From cbd93da1c622af2c9126b726886f820289fad8bd Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 26 Jul 2019 16:48:44 +0200 Subject: [PATCH] Ref T709, send XSwiftBusSettings when driver is connected * send from swift -> XPlane side * also send if settings on swift side are updated --- .../simulator/xplane/simulatorxplane.cpp | 41 +++++++++++++++---- .../simulator/xplane/simulatorxplane.h | 7 +++- src/xswiftbus/service.cpp | 4 ++ 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index d4ebeb0fe..6fdf5e91a 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -380,10 +380,17 @@ namespace BlackSimPlugin connect(m_trafficProxy, &CXSwiftBusTrafficProxy::remoteAircraftAddingFailed, this, &CSimulatorXPlane::onRemoteAircraftAddingFailed); if (m_watcher) { m_watcher->setConnection(m_dBusConnection); } m_trafficProxy->removeAllPlanes(); + + // send the settings + this->sendXSwiftBusSettings(); + + // load CSL this->loadCslPackages(); + + // finish + this->initSimulatorInternals(); this->emitSimulatorCombinedStatus(); - this->initSimulatorInternals(); return true; } @@ -1056,18 +1063,38 @@ namespace BlackSimPlugin if (!m_serviceProxy) { return false; } const CXSwiftBusSettings s = m_xSwiftBusServerSettings.get(); m_serviceProxy->setSettings(s.toXSwiftBusJsonStringQt()); + CLogMessage(this).info(u"Send settings: %1") << s.toQString(true); return true; } - bool CSimulatorXPlane::receiveXSwiftBusSettings() + CXSwiftBusSettings CSimulatorXPlane::receiveXSwiftBusSettings(bool &ok) { - if (!this->isConnected()) { return false; } - if (!m_serviceProxy) { return false; } + ok = false; + CXSwiftBusSettings s; + + if (!this->isConnected()) { return s; } + if (!m_serviceProxy) { return s; } const QString json = m_serviceProxy->getSettings(); - const CXSwiftBusSettings s(json); - Q_UNUSED(s); // DO SOMETHING WITH THE SETTINGS - return true; + s.parseXSwiftBusStringQt(json); + ok = true; + return s; + } + + void CSimulatorXPlane::onXSwiftBusSettingsChanged() + { + bool ok; + const CXSwiftBusSettings xPlaneSide = this->receiveXSwiftBusSettings(ok); + if (ok) + { + // we only send if DBus did not change + // DBus changes would require a restart + const CXSwiftBusSettings swiftSide = m_xSwiftBusServerSettings.get(); + if (xPlaneSide.getDBusServerAddressQt() == swiftSide.getDBusServerAddressQt()) + { + this->sendXSwiftBusSettings(); + } + } } void CSimulatorXPlane::updateAirportsInRange() diff --git a/src/plugins/simulator/xplane/simulatorxplane.h b/src/plugins/simulator/xplane/simulatorxplane.h index 1561c06d2..ef414d704 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.h +++ b/src/plugins/simulator/xplane/simulatorxplane.h @@ -225,11 +225,14 @@ namespace BlackSimPlugin //! Send/receive settings @{ bool sendXSwiftBusSettings(); - bool receiveXSwiftBusSettings(); + BlackMisc::Simulation::Settings::CXSwiftBusSettings receiveXSwiftBusSettings(bool &ok); //! @} + //! Settings have changed + void onXSwiftBusSettingsChanged(); + DBusMode m_dbusMode; - BlackMisc::CSetting m_xSwiftBusServerSettings { this }; + BlackMisc::CSetting m_xSwiftBusServerSettings { this, &CSimulatorXPlane::onXSwiftBusSettingsChanged }; static constexpr qint64 TimeoutAdding = 10000; QDBusConnection m_dBusConnection { "default" }; QDBusServiceWatcher *m_watcher { nullptr }; diff --git a/src/xswiftbus/service.cpp b/src/xswiftbus/service.cpp index 99add0cbb..92cd08df5 100644 --- a/src/xswiftbus/service.cpp +++ b/src/xswiftbus/service.cpp @@ -165,6 +165,10 @@ namespace XSwiftBus void CService::setSettings(const std::string &jsonString) { m_pluginSettings.parseXSwiftBusString(jsonString); + + XPLMDebugString("Received settings "); + XPLMDebugString(m_pluginSettings.convertToString().c_str()); + XPLMDebugString("\n"); } void CService::readAirportsDatabase()