@@ -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()
303323void 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 */
352372void 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
0 commit comments