From e3465f432c3fb5b4f030f549f8a9459574fbacda Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 17 May 2018 23:54:39 +0200 Subject: [PATCH] Ref T261, Ref T251 gnd flag support in context/client provider * allow to set gnd.flag capability via context/client * utility functions in client provider --- src/blackcore/context/contextnetwork.h | 8 ++++++- src/blackcore/context/contextnetworkempty.h | 13 +++++++++-- src/blackcore/context/contextnetworkimpl.cpp | 22 +++++++++++++++++-- src/blackcore/context/contextnetworkimpl.h | 2 ++ src/blackcore/context/contextnetworkproxy.cpp | 8 +++++++ src/blackcore/context/contextnetworkproxy.h | 1 + src/blackcore/context/contextsimulatorimpl.h | 4 ++++ src/blackmisc/network/clientprovider.cpp | 17 +++++++++++--- src/blackmisc/network/clientprovider.h | 5 +++++ 9 files changed, 72 insertions(+), 8 deletions(-) diff --git a/src/blackcore/context/contextnetwork.h b/src/blackcore/context/contextnetwork.h index cd9e5c407..c33be6b6c 100644 --- a/src/blackcore/context/contextnetwork.h +++ b/src/blackcore/context/contextnetwork.h @@ -140,6 +140,9 @@ namespace BlackCore //! Aircraft enabled / disabled void changedFastPositionUpdates(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + //! Changed gnd. flag capability + void changedGndFlagCapability(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + //! Connection status changed for online station void changedAtcStationOnlineConnectionStatus(const BlackMisc::Aviation::CAtcStation &atcStation, bool connected); @@ -261,7 +264,10 @@ namespace BlackCore virtual void requestAtisUpdates() = 0; //! Enable/disable rendering - virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) = 0; + virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) = 0; + + //! Enable/disable support of gnd. flag + virtual bool updateAircraftSupportingGndFLag(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) = 0; //! Change model virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) = 0; diff --git a/src/blackcore/context/contextnetworkempty.h b/src/blackcore/context/contextnetworkempty.h index 811539ede..d695245aa 100644 --- a/src/blackcore/context/contextnetworkempty.h +++ b/src/blackcore/context/contextnetworkempty.h @@ -299,10 +299,19 @@ namespace BlackCore } //! \copydoc IContextNetwork::updateAircraftEnabled - virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) override + virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override { Q_UNUSED(callsign); - Q_UNUSED(enabledForRedering); + Q_UNUSED(enabledForRendering); + logEmptyContextWarning(Q_FUNC_INFO); + return false; + } + + //! \copydoc IContextNetwork::updateAircraftSupportingGndFLag + virtual bool updateAircraftSupportingGndFLag(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) override + { + Q_UNUSED(callsign); + Q_UNUSED(supportGndFlag); logEmptyContextWarning(Q_FUNC_INFO); return false; } diff --git a/src/blackcore/context/contextnetworkimpl.cpp b/src/blackcore/context/contextnetworkimpl.cpp index cd0777cd8..01f4ed357 100644 --- a/src/blackcore/context/contextnetworkimpl.cpp +++ b/src/blackcore/context/contextnetworkimpl.cpp @@ -422,6 +422,11 @@ namespace BlackCore return m_airspace->addClientGndCapability(callsign); } + bool CContextNetwork::setClientGndCapability(const Aviation::CCallsign &callsign, bool supportGndFlag) + { + return m_airspace->setClientGndCapability(callsign, supportGndFlag); + } + CServerList CContextNetwork::getVatsimFsdServers() const { Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing data reader"); @@ -700,7 +705,7 @@ namespace BlackCore { Q_ASSERT(m_airspace); if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << enabledForRendering; } - bool c = m_airspace->updateAircraftEnabled(callsign, enabledForRendering); + const bool c = m_airspace->updateAircraftEnabled(callsign, enabledForRendering); if (c) { CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign)); @@ -742,13 +747,26 @@ namespace BlackCore const bool c = m_airspace->updateFastPositionEnabled(callsign, enableFastPositonUpdates); if (c) { - CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign)); + const CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign)); CLogMessage(this).info("Callsign %1 sets fast positions ") << aircraft.getCallsign() << BlackMisc::boolToOnOff(aircraft.fastPositionUpdates()); emit this->changedFastPositionUpdates(aircraft); } return c; } + bool CContextNetwork::updateAircraftSupportingGndFLag(const CCallsign &callsign, bool supportGndFlag) + { + if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << supportGndFlag; } + const bool c = m_airspace->setClientGndCapability(callsign, supportGndFlag); + if (c) + { + const CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign)); + CLogMessage(this).info("Callsign %1 set gnd.capability ") << aircraft.getCallsign() << BlackMisc::boolToOnOff(aircraft.fastPositionUpdates()); + emit this->changedGndFlagCapability(aircraft); + } + return c; + } + bool CContextNetwork::updateCG(const Aviation::CCallsign &callsign, const CLength &cg) { if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << cg.valueRoundedWithUnit(1); } diff --git a/src/blackcore/context/contextnetworkimpl.h b/src/blackcore/context/contextnetworkimpl.h index 690df1f0f..2c71c2a7c 100644 --- a/src/blackcore/context/contextnetworkimpl.h +++ b/src/blackcore/context/contextnetworkimpl.h @@ -121,6 +121,7 @@ namespace BlackCore virtual int removeClient(const BlackMisc::Aviation::CCallsign &callsign) override; virtual bool autoAdjustCientGndCapability(const BlackMisc::Aviation::CAircraftSituation &situation) override; virtual bool addClientGndCapability(const BlackMisc::Aviation::CCallsign &callsign) override; + virtual bool setClientGndCapability(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) override; //! @} public slots: @@ -131,6 +132,7 @@ namespace BlackCore virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override; virtual bool updateAircraftNetworkModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override; virtual bool updateFastPositionEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enableFastPositonUpdates) override; + virtual bool updateAircraftSupportingGndFLag(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) override; virtual bool updateCG(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CLength &cg) override; virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override; virtual BlackMisc::Aviation::CCallsignSet getAircraftInRangeCallsigns() const override; diff --git a/src/blackcore/context/contextnetworkproxy.cpp b/src/blackcore/context/contextnetworkproxy.cpp index 2995a699b..cc2ca6cd6 100644 --- a/src/blackcore/context/contextnetworkproxy.cpp +++ b/src/blackcore/context/contextnetworkproxy.cpp @@ -87,6 +87,9 @@ namespace BlackCore s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), "changedFastPositionUpdates", this, SIGNAL(changedFastPositionUpdates(BlackMisc::Simulation::CSimulatedAircraft))); Q_ASSERT(s); + s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), + "changedGndFlagCapability", this, SIGNAL(changedGndFlagCapability(BlackMisc::Simulation::CSimulatedAircraft))); + Q_ASSERT(s); s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), "addedAircraft", this, SIGNAL(addedAircraft(BlackMisc::Simulation::CSimulatedAircraft))); Q_ASSERT(s); @@ -225,6 +228,11 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("updateFastPositionEnabled"), callsign, enableFastPositionSending); } + bool CContextNetworkProxy::updateAircraftSupportingGndFLag(const CCallsign &callsign, bool supportGndFlag) + { + return m_dBusInterface->callDBusRet(QLatin1String("updateAircraftSupportingGndFLag"), callsign, supportGndFlag); + } + void CContextNetworkProxy::setFastPositionEnabledCallsigns(CCallsignSet &callsigns) { m_dBusInterface->callDBus(QLatin1String("setFastPositionEnabledCallsigns"), callsigns); diff --git a/src/blackcore/context/contextnetworkproxy.h b/src/blackcore/context/contextnetworkproxy.h index e8678a8a8..03b3d0d0a 100644 --- a/src/blackcore/context/contextnetworkproxy.h +++ b/src/blackcore/context/contextnetworkproxy.h @@ -109,6 +109,7 @@ namespace BlackCore virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override; virtual bool updateAircraftNetworkModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override; virtual bool updateFastPositionEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enableFastPositionSending) override; + virtual bool updateAircraftSupportingGndFLag(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) override; virtual void setFastPositionEnabledCallsigns(BlackMisc::Aviation::CCallsignSet &callsigns) override; virtual BlackMisc::Aviation::CCallsignSet getFastPositionEnabledCallsigns() const override; virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index 18193a0f9..7f236637c 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -14,6 +14,7 @@ #include "blackcore/context/contextsimulator.h" #include "blackcore/application/applicationsettings.h" +#include "blackcore/simulator.h" #include "blackcore/corefacadeconfig.h" #include "blackcore/aircraftmatcher.h" #include "blackcore/blackcoreexport.h" @@ -130,6 +131,9 @@ namespace BlackCore //! Access to simulator (i.e. the plugin) ISimulator *simulator() const; + //! Simulator available? + bool hasSimulator() const { return this->simulator(); } + //! Register dot commands static void registerHelp() { diff --git a/src/blackmisc/network/clientprovider.cpp b/src/blackmisc/network/clientprovider.cpp index d071a2c7c..9ac9ff722 100644 --- a/src/blackmisc/network/clientprovider.cpp +++ b/src/blackmisc/network/clientprovider.cpp @@ -100,14 +100,25 @@ namespace BlackMisc } bool CClientProvider::addClientGndCapability(const CCallsign &callsign) + { + return this->setClientGndCapability(callsign, true); + } + + bool CClientProvider::setClientGndCapability(const CCallsign &callsign, bool supportGndFlag) { CClient client = this->getClientOrDefaultForCallsign(callsign); // need to change? if (!client.isValid()) { return false; } // no client - if (client.hasGndFlagCapability()) { return true; } // already set, but set - - client.addCapability(CClient::FsdWithGroundFlag); + if (client.hasGndFlagCapability() == supportGndFlag) { return true; } // already set, but set + if (supportGndFlag) + { + client.addCapability(CClient::FsdWithGroundFlag); + } + else + { + client.removeCapability(CClient::FsdWithGroundFlag); + } QWriteLocker l(&m_lockClient); m_clients.replaceOrAddObjectByCallsign(client); return true; diff --git a/src/blackmisc/network/clientprovider.h b/src/blackmisc/network/clientprovider.h index 59bffcdf6..1e0fe3832 100644 --- a/src/blackmisc/network/clientprovider.h +++ b/src/blackmisc/network/clientprovider.h @@ -73,6 +73,10 @@ namespace BlackMisc //! Add gnd.flag capability //! \threadsafe virtual bool addClientGndCapability(const Aviation::CCallsign &callsign) = 0; + + //! Set gnd.flag capability + //! \threadsafe + virtual bool setClientGndCapability(const Aviation::CCallsign &callsign, bool supportGndFlag) = 0; }; //! Direct in memory access to client (network client) data @@ -93,6 +97,7 @@ namespace BlackMisc virtual int removeClient(const Aviation::CCallsign &callsign) override; virtual bool autoAdjustCientGndCapability(const Aviation::CAircraftSituation &situation) override; virtual bool addClientGndCapability(const Aviation::CCallsign &callsign) override; + virtual bool setClientGndCapability(const Aviation::CCallsign &callsign, bool supportGndFlag) override; //! @} private: