REfactor SimDatabase PRODUCES CRASH ON EXIT

This commit is contained in:
2022-09-11 04:31:01 +02:00
parent 4445f1f12a
commit 161941ac1b
11 changed files with 207 additions and 140 deletions
+38 -25
View File
@@ -11,10 +11,7 @@ std::thread recordingThread;
std::atomic<bool> wantsExit;
germanairlinesva::file::config::Config configuration;
std::map<std::string,
std::pair<std::vector<germanairlinesva::file::simdata::Gate>,
std::vector<germanairlinesva::file::simdata::Runway>>>
airports;
germanairlinesva::file::simdata::SimDatabase database;
germanairlinesva_websocket::Websocket *connector;
int xplaneVersion;
@@ -116,18 +113,18 @@ PLUGIN_API int XPluginStart(char *outName, char *outSig, char *outDesc)
configuration = germanairlinesva::file::config::Config();
toLog("Config loaded");
try {
connector = new germanairlinesva_websocket::Websocket(
"wss://ws.hofmannnet.myhome-server.de:8000",
configuration.getUser(),
toLog);
} catch (const std::invalid_argument &e) {
toLog(e.what());
return 0;
}
toLog("WebSocket started");
/*
try {
connector = new germanairlinesva_websocket::Websocket(
"wss://ws.hofmannnet.myhome-server.de:8000",
configuration.getUser(),
toLog);
} catch (const std::invalid_argument &e) {
toLog(e.what());
return 0;
}
toLog("WebSocket started");
*/
char hash[2 * MD5LEN + 1] = "";
if (germanairlinesva::util::generateMD5(XPLANE_CUSTOM_SCENERY, hash, toLog) ==
0) {
@@ -139,32 +136,42 @@ PLUGIN_API int XPluginStart(char *outName, char *outSig, char *outDesc)
: XPLANE12_BASE_SCENERY,
XPLANE_CUSTOM_SCENERY,
XPLANE_PLUGIN_DIRECTORY "log.txt",
airports);
database);
germanairlinesva::file::simdata::toFile(
airports,
database,
XPLANE_PLUGIN_DIRECTORY SIMDATABASE);
configuration.updateScenery(hash);
toLog("Sim Database updated");
} else {
airports = germanairlinesva::file::simdata::fromFile(
database = germanairlinesva::file::simdata::fromFile(
XPLANE_PLUGIN_DIRECTORY SIMDATABASE);
toLog("Sim Database loaded");
}
toLog("Binary readback test");
germanairlinesva::file::simdata::toFile(database,
XPLANE_PLUGIN_DIRECTORY "sim2.bin");
toLog("Readback test of sim database using EDDF");
auto ap = airports["EDDF"];
auto ap = database.getAirport("EDDF");
for (const auto &it : ap.first) {
toLog(" " + it.to_string());
}
for (const auto &it : ap.second) {
toLog(" " + it.to_string());
}
toLog("Readback test of sim database using XXXX");
try {
ap = database.getAirport("XXXX");
toLog(" Return was non null ! ERROR");
} catch (std::out_of_range) {
toLog(" Return was null");
}
}
// Thread for sending data to websocket
serverThread = std::thread(&serverWorker);
recordingThread = std::thread(&recordingWorker);
// serverThread = std::thread(&serverWorker);
// recordingThread = std::thread(&recordingWorker);
toLog("Workers started");
toLog("Logbook Test");
@@ -209,11 +216,13 @@ PLUGIN_API void XPluginStop(void)
XPLMUnregisterFlightLoopCallback(flightLoop, nullptr);
/* End threads */
wantsExit = true;
delete connector;
serverThread.join();
recordingThread.join();
// serverThread.join();
// recordingThread.join();
// delete connector;
p.toFile("flight.rec");
toLog("Plugin stopped");
}
PLUGIN_API void XPluginDisable(void) {}
@@ -286,6 +295,8 @@ void serverWorker()
std::this_thread::sleep_for(std::chrono::milliseconds(250));
}
toLog("Server thread stopped");
}
void recordingWorker()
@@ -318,6 +329,8 @@ void recordingWorker()
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
toLog("Recording thread stopped");
}
void toLog(const std::string &message)