mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 17:35:34 +08:00
[XSwiftBus] Allow to write an updated xswiftbus.conf file
In a distributed core/UI swift we need to write on XPlane side
This commit is contained in:
committed by
Mat Sutcliffe
parent
80e97f749f
commit
fd3ad207bd
@@ -14,6 +14,8 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <chrono>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
using namespace BlackMisc::Simulation::XPlane::QtFreeUtils;
|
using namespace BlackMisc::Simulation::XPlane::QtFreeUtils;
|
||||||
|
|
||||||
@@ -79,6 +81,50 @@ namespace XSwiftBus
|
|||||||
DEBUG_LOG("DBus server port: " + std::to_string(m_dbusPort));
|
DEBUG_LOG("DBus server port: " + std::to_string(m_dbusPort));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CConfig::writeConfig(bool tcas, bool debug)
|
||||||
|
{
|
||||||
|
setTcasEnabled(tcas);
|
||||||
|
setDebugMode(debug);
|
||||||
|
return writeConfigFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CConfig::writeConfigFile() const
|
||||||
|
{
|
||||||
|
std::ofstream configFile(m_filePath, std::ofstream::out | std::ofstream::trunc);
|
||||||
|
if (!configFile.is_open()) { return false; }
|
||||||
|
|
||||||
|
// this code should be similar to CXSwiftBusConfigWriter
|
||||||
|
configFile << "# DBus Mode - Options: p2p, session" << std::endl;
|
||||||
|
configFile << "dbusMode = " << m_dbusMode << std::endl;
|
||||||
|
configFile << std::endl;
|
||||||
|
configFile << "# DBus server address - relevant for P2P mode only" << std::endl;
|
||||||
|
configFile << "dbusAddress = " << m_dbusAddress << std::endl;
|
||||||
|
configFile << std::endl;
|
||||||
|
configFile << "# DBus server port - relevant for P2P mode only" << std::endl;
|
||||||
|
configFile << "dbusPort = " << m_dbusPort << std::endl;
|
||||||
|
configFile << std::endl;
|
||||||
|
configFile << "# Render phase debugging - to help diagnose crashes" << std::endl;
|
||||||
|
configFile << "debug = " << boolToOnOff(m_debug) << std::endl;
|
||||||
|
configFile << std::endl;
|
||||||
|
configFile << "# TCAS traffic - to disable in case of crashes" << std::endl;
|
||||||
|
configFile << "tcas = " << boolToOnOff(m_tcas) << std::endl;
|
||||||
|
|
||||||
|
// for info
|
||||||
|
const auto clockNow = std::chrono::system_clock::now();
|
||||||
|
const time_t now = std::chrono::system_clock::to_time_t(clockNow);
|
||||||
|
struct tm tms;
|
||||||
|
#if defined (IBM)
|
||||||
|
localtime_s(&tms, &now);
|
||||||
|
#else
|
||||||
|
localtime_r(&now, &tms);
|
||||||
|
#endif
|
||||||
|
configFile << std::endl;
|
||||||
|
configFile << "# Updated by XSwiftBus plugin " << std::put_time(&tms, "%T");
|
||||||
|
configFile << std::endl;
|
||||||
|
configFile.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool CConfig::parseDBusMode(const std::string &value)
|
bool CConfig::parseDBusMode(const std::string &value)
|
||||||
{
|
{
|
||||||
if (stringCompareCaseInsensitive(value, "session")) { m_dbusMode = CConfig::DBusSession; return true; }
|
if (stringCompareCaseInsensitive(value, "session")) { m_dbusMode = CConfig::DBusSession; return true; }
|
||||||
@@ -137,4 +183,10 @@ namespace XSwiftBus
|
|||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string CConfig::boolToOnOff(bool on)
|
||||||
|
{
|
||||||
|
if (on) { return "on"; }
|
||||||
|
return "off";
|
||||||
|
}
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -53,9 +53,18 @@ namespace XSwiftBus
|
|||||||
//! Get debug on/off
|
//! Get debug on/off
|
||||||
bool getDebugMode() const { return m_debug; }
|
bool getDebugMode() const { return m_debug; }
|
||||||
|
|
||||||
//! Get tcas traffic on/off
|
//! Set debug mode
|
||||||
|
void setDebugMode(bool on) { m_debug = on; }
|
||||||
|
|
||||||
|
//! Get TCAS traffic on/off
|
||||||
bool getTcasEnabled() const { return m_tcas; }
|
bool getTcasEnabled() const { return m_tcas; }
|
||||||
|
|
||||||
|
//! Set TCAS traffic on/off
|
||||||
|
void setTcasEnabled(bool on) { m_tcas = on; }
|
||||||
|
|
||||||
|
//! Update and write config file
|
||||||
|
bool writeConfig(bool tcas, bool debug);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool parseDBusMode (const std::string &value);
|
bool parseDBusMode (const std::string &value);
|
||||||
bool parseDBusAddress(const std::string &value);
|
bool parseDBusAddress(const std::string &value);
|
||||||
@@ -65,6 +74,7 @@ namespace XSwiftBus
|
|||||||
bool writeConfigFile () const;
|
bool writeConfigFile () const;
|
||||||
|
|
||||||
static std::string dbusModeToString(DBusMode mode);
|
static std::string dbusModeToString(DBusMode mode);
|
||||||
|
static std::string boolToOnOff(bool on);
|
||||||
|
|
||||||
std::string m_filePath;
|
std::string m_filePath;
|
||||||
DBusMode m_dbusMode = DBusP2P;
|
DBusMode m_dbusMode = DBusP2P;
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ namespace XSwiftBus
|
|||||||
//! \copydoc XSwiftBus::CSettingsProvider::getConfig
|
//! \copydoc XSwiftBus::CSettingsProvider::getConfig
|
||||||
virtual const CConfig &getConfig() const override { return m_pluginConfig; }
|
virtual const CConfig &getConfig() const override { return m_pluginConfig; }
|
||||||
|
|
||||||
|
//! \copydoc XSwiftBus::CSettingsProvider::writeConfig
|
||||||
|
virtual bool writeConfig(bool tcas, bool debug) override { return m_pluginConfig.writeConfig(tcas, debug); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CConfig m_pluginConfig;
|
CConfig m_pluginConfig;
|
||||||
CDBusDispatcher m_dbusDispatcher;
|
CDBusDispatcher m_dbusDispatcher;
|
||||||
|
|||||||
@@ -258,8 +258,10 @@ namespace XSwiftBus
|
|||||||
CSettings s;
|
CSettings s;
|
||||||
s.parseXSwiftBusString(jsonString);
|
s.parseXSwiftBusString(jsonString);
|
||||||
this->setSettings(s);
|
this->setSettings(s);
|
||||||
|
const bool w = this->writeConfig(s.isTcasEnabled(), s.isLogRenderPhases());
|
||||||
this->updateMessageBoxFromSettings();
|
this->updateMessageBoxFromSettings();
|
||||||
INFO_LOG("Received settings " + s.convertToString());
|
INFO_LOG("Received settings " + s.convertToString());
|
||||||
|
if (w) { INFO_LOG("Written new config file"); }
|
||||||
}
|
}
|
||||||
|
|
||||||
void CService::readAirportsDatabase()
|
void CService::readAirportsDatabase()
|
||||||
|
|||||||
@@ -50,5 +50,11 @@ namespace XSwiftBus
|
|||||||
{
|
{
|
||||||
return m_provider->getConfig();
|
return m_provider->getConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSettingsAware::writeConfig(bool tcas, bool debug)
|
||||||
|
{
|
||||||
|
return m_provider->writeConfig(tcas, debug);
|
||||||
|
}
|
||||||
|
|
||||||
} // ns
|
} // ns
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ namespace XSwiftBus
|
|||||||
//! Get settings from xswiftbus.conf (needed during plugin initialization)
|
//! Get settings from xswiftbus.conf (needed during plugin initialization)
|
||||||
virtual const CConfig &getConfig() const = 0;
|
virtual const CConfig &getConfig() const = 0;
|
||||||
|
|
||||||
|
//! Write a config file with these new values
|
||||||
|
virtual bool writeConfig(bool tcas, bool debug) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Destructor
|
//! Destructor
|
||||||
~CSettingsProvider() = default;
|
~CSettingsProvider() = default;
|
||||||
@@ -73,6 +76,9 @@ namespace XSwiftBus
|
|||||||
//! \copydoc CSettingsProvider::getConfig
|
//! \copydoc CSettingsProvider::getConfig
|
||||||
const CConfig &getConfig() const;
|
const CConfig &getConfig() const;
|
||||||
|
|
||||||
|
//! \copydoc CSettingsProvider::writeConfig
|
||||||
|
bool writeConfig(bool tcas, bool debug);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CSettingsProvider *m_provider = nullptr;
|
CSettingsProvider *m_provider = nullptr;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user