Skip to content

Commit 8632f9f

Browse files
committed
[localcontroller] Add possibility to start a localcontroller without database and without timers
1 parent 04ab5d6 commit 8632f9f

File tree

2 files changed

+75
-55
lines changed

2 files changed

+75
-55
lines changed

src/localcontroller/LocalController.cpp

Lines changed: 72 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -68,35 +68,44 @@ LocalController::LocalController(const ocpp::config::ILocalControllerConfig&
6868
m_timer_pool(timer_pool),
6969
m_worker_pool(worker_pool),
7070
m_database(),
71-
m_internal_config(m_database),
71+
m_internal_config(),
7272
m_messages_converter(),
7373
m_messages_validator(),
7474
m_ws_server(),
7575
m_rpc_server(),
7676
m_rpc_pool(),
77-
m_uptime_timer(*m_timer_pool.get(), "Uptime timer"),
77+
m_uptime_timer(),
7878
m_uptime(0),
7979
m_total_uptime(0)
8080
{
8181
// Open database
82-
if (m_database.open(m_stack_config.databasePath()))
82+
if (!m_stack_config.databasePath().empty())
8383
{
84-
// Register logger
85-
if (m_stack_config.logMaxEntriesCount() != 0)
84+
m_database = std::make_unique<ocpp::database::Database>();
85+
m_internal_config = std::make_unique<ocpp::config::InternalConfigManager>(*m_database);
86+
if (m_database->open(m_stack_config.databasePath()))
8687
{
87-
ocpp::log::Logger::registerDefaultLogger(m_database, m_stack_config.logMaxEntriesCount());
88-
}
88+
// Register logger
89+
if (m_stack_config.logMaxEntriesCount() != 0)
90+
{
91+
ocpp::log::Logger::registerDefaultLogger(*m_database, m_stack_config.logMaxEntriesCount());
92+
}
8993

90-
// Initialize the database
91-
initDatabase();
92-
}
93-
else
94-
{
95-
LOG_ERROR << "Unable to open database";
94+
// Initialize the database
95+
initDatabase();
96+
}
97+
else
98+
{
99+
LOG_ERROR << "Unable to open database";
100+
}
96101
}
97102

98103
// Uptime timer
99-
m_uptime_timer.setCallback(std::bind(&LocalController::processUptime, this));
104+
if (m_timer_pool && m_worker_pool && m_internal_config)
105+
{
106+
m_uptime_timer = std::make_unique<ocpp::helpers::Timer>(*m_timer_pool, "Uptime timer");
107+
m_uptime_timer->setCallback(std::bind(&LocalController::processUptime, this));
108+
}
100109

101110
// Random numbers
102111
std::srand(static_cast<unsigned int>(time(nullptr)));
@@ -125,33 +134,36 @@ bool LocalController::resetData()
125134
}
126135

127136
// Close database to invalid existing connexions
128-
m_database.close();
129-
130-
// Delete database
131-
if (std::filesystem::remove(m_stack_config.databasePath()))
137+
if (m_database)
132138
{
133-
// Open database
134-
if (m_database.open(m_stack_config.databasePath()))
139+
m_database->close();
140+
141+
// Delete database
142+
if (std::filesystem::remove(m_stack_config.databasePath()))
135143
{
136-
// Register logger
137-
if (m_stack_config.logMaxEntriesCount() != 0)
144+
// Open database
145+
if (m_database->open(m_stack_config.databasePath()))
138146
{
139-
ocpp::log::Logger::registerDefaultLogger(m_database, m_stack_config.logMaxEntriesCount());
147+
// Register logger
148+
if (m_stack_config.logMaxEntriesCount() != 0)
149+
{
150+
ocpp::log::Logger::registerDefaultLogger(*m_database, m_stack_config.logMaxEntriesCount());
151+
}
152+
153+
// Re-initialize with default values
154+
m_total_uptime = 0;
155+
initDatabase();
156+
}
157+
else
158+
{
159+
LOG_ERROR << "Unable to open database";
140160
}
141-
142-
// Re-initialize with default values
143-
m_total_uptime = 0;
144-
initDatabase();
145161
}
146162
else
147163
{
148-
LOG_ERROR << "Unable to open database";
164+
LOG_ERROR << "Unable to delete database";
149165
}
150166
}
151-
else
152-
{
153-
LOG_ERROR << "Unable to delete database";
154-
}
155167
}
156168

157169
return ret;
@@ -171,11 +183,13 @@ bool LocalController::start()
171183
ret = m_messages_validator.load(m_stack_config.jsonSchemasPath());
172184
if (ret)
173185
{
174-
175186
// Start uptime counter
176-
m_uptime = 0;
177-
m_internal_config.setKey(START_DATE_KEY, DateTime::now().str());
178-
m_uptime_timer.start(std::chrono::seconds(1u));
187+
if (m_uptime_timer)
188+
{
189+
m_uptime = 0;
190+
m_internal_config->setKey(START_DATE_KEY, DateTime::now().str());
191+
m_uptime_timer->start(std::chrono::seconds(1u));
192+
}
179193

180194
// Allocate resources
181195
m_ws_server = std::unique_ptr<ocpp::websockets::IWebsocketServer>(ocpp::websockets::WebsocketFactory::newServer());
@@ -227,8 +241,11 @@ bool LocalController::stop()
227241
LOG_INFO << "Stopping OCPP stack";
228242

229243
// Stop uptime counter
230-
m_uptime_timer.stop();
231-
saveUptime();
244+
if (m_uptime_timer)
245+
{
246+
m_uptime_timer->stop();
247+
saveUptime();
248+
}
232249

233250
// Stop connection
234251
ret = m_rpc_server->stop();
@@ -240,7 +257,10 @@ bool LocalController::stop()
240257
m_rpc_pool.reset();
241258

242259
// Close database
243-
m_database.close();
260+
if (m_database)
261+
{
262+
m_database->close();
263+
}
244264
}
245265
else
246266
{
@@ -303,33 +323,33 @@ void LocalController::rpcServerError()
303323
void LocalController::initDatabase()
304324
{
305325
// Initialize internal configuration
306-
m_internal_config.initDatabaseTable();
326+
m_internal_config->initDatabaseTable();
307327

308328
// Internal keys
309-
if (!m_internal_config.keyExist(STACK_VERSION_KEY))
329+
if (!m_internal_config->keyExist(STACK_VERSION_KEY))
310330
{
311-
m_internal_config.createKey(STACK_VERSION_KEY, OPEN_OCPP_VERSION);
331+
m_internal_config->createKey(STACK_VERSION_KEY, OPEN_OCPP_VERSION);
312332
}
313333
else
314334
{
315-
m_internal_config.setKey(STACK_VERSION_KEY, OPEN_OCPP_VERSION);
335+
m_internal_config->setKey(STACK_VERSION_KEY, OPEN_OCPP_VERSION);
316336
}
317-
if (!m_internal_config.keyExist(START_DATE_KEY))
337+
if (!m_internal_config->keyExist(START_DATE_KEY))
318338
{
319-
m_internal_config.createKey(START_DATE_KEY, "");
339+
m_internal_config->createKey(START_DATE_KEY, "");
320340
}
321-
if (!m_internal_config.keyExist(UPTIME_KEY))
341+
if (!m_internal_config->keyExist(UPTIME_KEY))
322342
{
323-
m_internal_config.createKey(UPTIME_KEY, "0");
343+
m_internal_config->createKey(UPTIME_KEY, "0");
324344
}
325-
if (!m_internal_config.keyExist(TOTAL_UPTIME_KEY))
345+
if (!m_internal_config->keyExist(TOTAL_UPTIME_KEY))
326346
{
327-
m_internal_config.createKey(TOTAL_UPTIME_KEY, "0");
347+
m_internal_config->createKey(TOTAL_UPTIME_KEY, "0");
328348
}
329349
else
330350
{
331351
std::string value;
332-
m_internal_config.getKey(TOTAL_UPTIME_KEY, value);
352+
m_internal_config->getKey(TOTAL_UPTIME_KEY, value);
333353
m_total_uptime = static_cast<unsigned int>(std::atoi(value.c_str()));
334354
}
335355
}
@@ -351,8 +371,8 @@ void LocalController::processUptime()
351371
/** @brief Save the uptime counter in database */
352372
void LocalController::saveUptime()
353373
{
354-
m_internal_config.setKey(UPTIME_KEY, std::to_string(m_uptime));
355-
m_internal_config.setKey(TOTAL_UPTIME_KEY, std::to_string(m_total_uptime));
374+
m_internal_config->setKey(UPTIME_KEY, std::to_string(m_uptime));
375+
m_internal_config->setKey(TOTAL_UPTIME_KEY, std::to_string(m_total_uptime));
356376
}
357377

358378
} // namespace localcontroller

src/localcontroller/LocalController.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ class LocalController : public ILocalController, public ocpp::rpc::RpcServer::IL
9393
std::shared_ptr<ocpp::helpers::WorkerThreadPool> m_worker_pool;
9494

9595
/** @brief Database */
96-
ocpp::database::Database m_database;
96+
std::unique_ptr<ocpp::database::Database> m_database;
9797
/** @brief Internal configuration manager */
98-
ocpp::config::InternalConfigManager m_internal_config;
98+
std::unique_ptr<ocpp::config::InternalConfigManager> m_internal_config;
9999

100100
/** @brief Messages converter */
101101
ocpp::messages::MessagesConverter m_messages_converter;
@@ -110,7 +110,7 @@ class LocalController : public ILocalController, public ocpp::rpc::RpcServer::IL
110110
std::unique_ptr<ocpp::rpc::RpcPool> m_rpc_pool;
111111

112112
/** @brief Uptime timer */
113-
ocpp::helpers::Timer m_uptime_timer;
113+
std::unique_ptr<ocpp::helpers::Timer> m_uptime_timer;
114114
/** @brief Uptime in seconds */
115115
unsigned int m_uptime;
116116
/** @brief Total uptime in seconds */

0 commit comments

Comments
 (0)