11#include " BackgroundWorker.h"
22#include " DataEngine.h"
3- #include " DataSerializer.h"
43#include " HttpServer.h"
54#include " Logger.h"
65
1110#include < thread>
1211
1312
14- int main (const int argc, const char * const * const argv)
13+ int main (const int argc, const char * const * const argv)
1514{
1615 LOG_INFO << " main: begin" << std::endl;
1716 const std::string arg1 = argc > 1 ? argv[1 ] : " " ;
@@ -30,36 +29,33 @@ int main(const int argc, const char * const * const argv)
3029 DataEngine engine;
3130
3231 LOG_INFO << " main: load data" << std::endl;
32+ const size_t loadedRecordCount = BackgroundWorker::initial_load_data (engine, databaseFilename);
33+ LOG_INFO << " main: loaded " << loadedRecordCount << " DB records from file " << databaseFilename << std::endl;
3334
3435 {
35- size_t recordCount = 0 ;
36- auto loadVisitor = [&engine, &recordCount](const std::string_view name, const std::string_view value)
36+ BackgroundWorker worker;
37+
38+ auto backgroundWorkerProc = [&worker, &engine, &databaseFilename]()
3739 {
38- engine.initial_set (name, value);
39- ++recordCount;
40+ worker.run (engine, databaseFilename);
4041 };
41- DataSerializer::load (databaseFilename, loadVisitor);
42- LOG_INFO << " main: loaded " << recordCount << " DB records from file " << databaseFilename << std::endl;
43- }
4442
45- BackgroundWorker worker ;
43+ auto backgroundWorkerFuture = std::async (std::launch::async, backgroundWorkerProc) ;
4644
47- auto backgroundWorkerProc = [&worker, &engine, &databaseFilename]()
48- {
49- worker.run (engine, databaseFilename);
50- };
45+ LOG_INFO << " main: listening connections: begin" << std::endl;
5146
52- auto backgroundWorkerFuture = std::async (std::launch::async, backgroundWorkerProc);
47+ HttpServer server;
48+ server.run (listenHost, listenPort, engine, logEachRequest);
5349
54- LOG_INFO << " main: listening connections: begin " << std::endl;
50+ LOG_INFO << " main: listening connections: end " << std::endl;
5551
56- HttpServer server;
57- server.run (listenHost, listenPort, engine, logEachRequest);
58-
59- LOG_INFO << " main: listening connections: end" << std::endl;
52+ worker.stop_notify ();
53+ backgroundWorkerFuture.wait ();
54+ }
6055
61- worker.stop_notify ();
62- backgroundWorkerFuture.wait ();
56+ LOG_INFO << " main: save data to file before process exit" << std::endl;
57+ const size_t savedRecordCount = BackgroundWorker::store_data (engine, databaseFilename);
58+ LOG_INFO << " main: saved " << savedRecordCount << " DB records to file " << databaseFilename << std::endl;
6359
6460 LOG_INFO << " main: end" << std::endl;
6561
0 commit comments