Checks to avoid issues during the XPlane startup.

Those here are precautionary.
This commit is contained in:
Klaus Basan
2019-08-22 22:23:34 +02:00
parent 44328867d5
commit aa4671c018
4 changed files with 25 additions and 6 deletions

View File

@@ -24,7 +24,7 @@ static XSwiftBus::CPlugin *g_plugin = nullptr;
PLUGIN_API int XPluginStart(char *o_name, char *o_sig, char *o_desc) PLUGIN_API int XPluginStart(char *o_name, char *o_sig, char *o_desc)
{ {
#if APL #ifdef APL
// https://developer.x-plane.com/2014/12/mac-plugin-developers-you-should-be-using-native-paths/ // https://developer.x-plane.com/2014/12/mac-plugin-developers-you-should-be-using-native-paths/
XPLMEnableFeature("XPLM_USE_NATIVE_PATHS", 1); XPLMEnableFeature("XPLM_USE_NATIVE_PATHS", 1);
#endif #endif
@@ -58,6 +58,12 @@ PLUGIN_API void XPluginReceiveMessage(XPLMPluginID from, long msg, void *param)
{ {
if (from == XPLM_PLUGIN_XPLANE) if (from == XPLM_PLUGIN_XPLANE)
{ {
if (!g_plugin || !g_plugin->isRunning())
{
WARNING_LOG("Received message, but plugin NOT running");
return;
}
switch (msg) switch (msg)
{ {
case XPLM_MSG_PLANE_LOADED: case XPLM_MSG_PLANE_LOADED:

View File

@@ -85,7 +85,7 @@ namespace XSwiftBus
void CPlugin::readConfig() void CPlugin::readConfig()
{ {
initXPlanePath(); initXPlanePath();
auto configFilePath = g_xplanePath + "Resources" + g_sep + "plugins" + g_sep + "xswiftbus" + g_sep + "xswiftbus.conf"; const std::string configFilePath = g_xplanePath + "Resources" + g_sep + "plugins" + g_sep + "xswiftbus" + g_sep + "xswiftbus.conf";
m_pluginConfig.setFilePath(configFilePath); m_pluginConfig.setFilePath(configFilePath);
m_pluginConfig.parse(); m_pluginConfig.parse();
m_pluginConfig.print(); m_pluginConfig.print();
@@ -179,6 +179,7 @@ namespace XSwiftBus
{ {
plugin->startServer(); plugin->startServer();
plugin->m_isRunning = true; plugin->m_isRunning = true;
INFO_LOG("XSwiftBus plugin started (deferred)");
} }
return 0; return 0;
} }

View File

@@ -56,6 +56,12 @@ namespace XSwiftBus
//! Called by XPluginReceiveMessage when the aircraft is positioned at an airport //! Called by XPluginReceiveMessage when the aircraft is positioned at an airport
void onAircraftRepositioned(); void onAircraftRepositioned();
//! Is running
bool isRunning() const { return m_isRunning; }
//! Should stop
bool shouldStop() const { return m_shouldStop; }
private: private:
CConfig m_pluginConfig; CConfig m_pluginConfig;
CDBusDispatcher m_dbusDispatcher; CDBusDispatcher m_dbusDispatcher;

View File

@@ -14,6 +14,7 @@
#include <XPLM/XPLMPlanes.h> #include <XPLM/XPLMPlanes.h>
#include <XPLM/XPLMUtilities.h> #include <XPLM/XPLMUtilities.h>
#include <cstring>
#include <algorithm> #include <algorithm>
// clazy:excludeall=reserve-candidates // clazy:excludeall=reserve-candidates
@@ -33,7 +34,12 @@ namespace XSwiftBus
char filename[256]; char filename[256];
char path[512]; char path[512];
XPLMGetNthAircraftModel(XPLM_USER_AIRCRAFT, filename, path); XPLMGetNthAircraftModel(XPLM_USER_AIRCRAFT, filename, path);
AcfProperties acfProperties = extractAcfProperties(path); if (std::strlen(filename) < 1 || std::strlen(path) < 1)
{
WARNING_LOG("Aircraft changed, but NO path or file name");
return;
}
const AcfProperties acfProperties = extractAcfProperties(path);
emitAircraftModelChanged(path, filename, getAircraftLivery(), getAircraftIcaoCode(), acfProperties.modelString, acfProperties.modelName, getAircraftDescription()); emitAircraftModelChanged(path, filename, getAircraftLivery(), getAircraftIcaoCode(), acfProperties.modelString, acfProperties.modelName, getAircraftDescription());
} }