From 8898bf6be59c3b498c49c592918f10e193f5552b Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 27 Jun 2018 01:37:47 +0200 Subject: [PATCH] Ref T285, allow to re-init all aircraft * aircraft will be removed, then added again as new * this will go thru the full cycle and matching --- src/blackcore/airspacemonitor.cpp | 27 +++++++++++++++++++ src/blackcore/airspacemonitor.h | 8 ++++++ src/blackcore/context/contextnetwork.h | 3 +++ src/blackcore/context/contextnetworkempty.h | 6 +++++ src/blackcore/context/contextnetworkimpl.cpp | 18 +++++++++++-- src/blackcore/context/contextnetworkimpl.h | 8 ++++-- src/blackcore/context/contextnetworkproxy.cpp | 5 ++++ src/blackcore/context/contextnetworkproxy.h | 1 + 8 files changed, 72 insertions(+), 4 deletions(-) diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 0046af023..883d99a57 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -340,6 +340,14 @@ namespace BlackCore QObject::disconnect(this); } + int CAirspaceMonitor::reInitializeAllAircraft() + { + const CSimulatedAircraftList aircraft = this->getAircraftInRange(); + CRemoteAircraftProvider::removeAllAircraft(); + this->asyncAddNewAircraftInRange(aircraft, true); + return aircraft.size(); + } + void CAirspaceMonitor::onRealNameReplyReceived(const CCallsign &callsign, const QString &realname) { if (!this->isConnected() || realname.isEmpty()) { return; } @@ -756,6 +764,25 @@ namespace BlackCore return CRemoteAircraftProvider::addNewAircraftInRange(newAircraft); } + void CAirspaceMonitor::asyncAddNewAircraftInRange(const CSimulatedAircraftList &aircraft, bool readyForModelMatching) + { + if (aircraft.isEmpty()) { return; } + if (!sApp || sApp->isShuttingDown()) { return; } + + int c = 1; + QPointer myself(this); + for (const CSimulatedAircraft &ac : aircraft) + { + QTimer::singleShot(c * 25, this, [ = ] + { + if (!myself) { return; } + myself->addNewAircraftInRange(ac); + if (!readyForModelMatching) { return; } + myself->sendReadyForModelMatching(ac.getCallsign()); + }); + } + } + int CAirspaceMonitor::updateOnlineStation(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues, bool sendSignal) { const int c = m_atcStationsOnline.applyIfCallsign(callsign, vm, skipEqualValues); diff --git a/src/blackcore/airspacemonitor.h b/src/blackcore/airspacemonitor.h index 8377fbd30..e7b6b031c 100644 --- a/src/blackcore/airspacemonitor.h +++ b/src/blackcore/airspacemonitor.h @@ -124,6 +124,9 @@ namespace BlackCore //! Gracefully shut down, e.g. for thread safety void gracefulShutdown(); + //! Re-init all aircrft + int reInitializeAllAircraft(); + //! Create dummy entries for performance tests //! \private for testing purposes void testCreateDummyOnlineAtcStations(int number); @@ -228,6 +231,11 @@ namespace BlackCore //! \threadsafe bool addNewAircraftInRange(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + //! Asynchronously add aircraft + //! \threadsafe + //! \sa addNewAircraftInRange + void asyncAddNewAircraftInRange(const BlackMisc::Simulation::CSimulatedAircraftList &aircraft, bool readyForModelMatching); + //! Update online stations by callsign int updateOnlineStation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::CPropertyIndexVariantMap &vm, bool skipEqualValues = true, bool sendSignal = true); diff --git a/src/blackcore/context/contextnetwork.h b/src/blackcore/context/contextnetwork.h index f86c76e57..4cf8355b6 100644 --- a/src/blackcore/context/contextnetwork.h +++ b/src/blackcore/context/contextnetwork.h @@ -278,6 +278,9 @@ namespace BlackCore //! Change fast position updates virtual bool updateFastPositionEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enableFastPositionSending) = 0; + //! Re-initialize all aircraft + virtual int reInitializeAllAircraft() = 0; + //! Get reverse lookup messages virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const = 0; diff --git a/src/blackcore/context/contextnetworkempty.h b/src/blackcore/context/contextnetworkempty.h index d7cd5475c..15bb6a862 100644 --- a/src/blackcore/context/contextnetworkempty.h +++ b/src/blackcore/context/contextnetworkempty.h @@ -345,6 +345,12 @@ namespace BlackCore return false; } + //! \copydoc IContextNetwork::reInitializeAllAircraft + virtual int reInitializeAllAircraft() override + { + return 0; + } + //! \copydoc IContextNetwork::setFastPositionEnabledCallsigns virtual void setFastPositionEnabledCallsigns(BlackMisc::Aviation::CCallsignSet &callsigns) override { diff --git a/src/blackcore/context/contextnetworkimpl.cpp b/src/blackcore/context/contextnetworkimpl.cpp index 7039197e1..b0c3a1739 100644 --- a/src/blackcore/context/contextnetworkimpl.cpp +++ b/src/blackcore/context/contextnetworkimpl.cpp @@ -265,7 +265,7 @@ namespace BlackCore { Q_UNUSED(originator;) if (commandLine.isEmpty()) { return false; } - static const QStringList cmds({ ".msg", ".m", ".altos", ".altoffset", ".watchdog" }); + static const QStringList cmds({ ".msg", ".m", ".altos", ".altoffset", ".watchdog", ".reinit", ".reinitialize" }); CSimpleCommandParser parser(cmds); parser.parse(commandLine); if (!parser.isKnownCommand()) { return false; } @@ -335,7 +335,7 @@ namespace BlackCore } } - QString msg(parser.remainingStringAfter(2)); + const QString msg(parser.remainingStringAfter(2)); tm.setMessage(msg); if (tm.isEmpty()) { @@ -379,6 +379,15 @@ namespace BlackCore m_airspace->enableWatchdog(watchdog); CLogMessage(this).info("Enabled watchdog: %1") << boolToYesNo(watchdog); } + else if (parser.matchesCommand(".reinit", ".reinitialize")) + { + if (!m_airspace) { return false; } + const int count = m_airspace->reInitializeAllAircraft(); + if (count > 0) + { + CLogMessage(this).info("Re-init %1 aircraft") << count; + } + } return false; } @@ -833,6 +842,11 @@ namespace BlackCore m_airspace->updateMarkAllAsNotRendered(); } + int CContextNetwork::reInitializeAllAircraft() + { + return m_airspace->reInitializeAllAircraft(); + } + CAirspaceAircraftSnapshot CContextNetwork::getLatestAirspaceAircraftSnapshot() const { return m_airspace->getLatestAirspaceAircraftSnapshot(); diff --git a/src/blackcore/context/contextnetworkimpl.h b/src/blackcore/context/contextnetworkimpl.h index dbf4fb1af..9fba46b65 100644 --- a/src/blackcore/context/contextnetworkimpl.h +++ b/src/blackcore/context/contextnetworkimpl.h @@ -155,6 +155,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 int reInitializeAllAircraft() 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; @@ -195,8 +196,10 @@ namespace BlackCore //! \addtogroup swiftdotcommands //! @{ //!
-            //! .m .msg           message text
-            //! .altos .altoffset altitude offset for testing
+            //! .m .msg                 message text
+            //! .altos .altoffset       altitude offset for testing
+            //! .reinit .reinitialize   re-initialize all aircraft
+            //! .watchdog on|off        watchdog on/off
             //! 
//! @} //! \copydoc IContextNetwork::parseCommandLine @@ -211,6 +214,7 @@ namespace BlackCore BlackMisc::CSimpleCommandParser::registerCommand({".m callsign message text", "send text message"}); BlackMisc::CSimpleCommandParser::registerCommand({".altos callsign offsetvalue", "set altitude offset value (testing)"}); BlackMisc::CSimpleCommandParser::registerCommand({".watchdog on|off", "enable/disable network watchdog (testing)"}); + BlackMisc::CSimpleCommandParser::registerCommand({".reinit", "re-initialize all aircraft"}); } //! \publicsection diff --git a/src/blackcore/context/contextnetworkproxy.cpp b/src/blackcore/context/contextnetworkproxy.cpp index c13587278..65aab2a4e 100644 --- a/src/blackcore/context/contextnetworkproxy.cpp +++ b/src/blackcore/context/contextnetworkproxy.cpp @@ -233,6 +233,11 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("updateAircraftSupportingGndFLag"), callsign, supportGndFlag); } + int CContextNetworkProxy::reInitializeAllAircraft() + { + return m_dBusInterface->callDBusRet(QLatin1String("reInitializeAllAircraft")); + } + 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 b16ae97b3..d5796699e 100644 --- a/src/blackcore/context/contextnetworkproxy.h +++ b/src/blackcore/context/contextnetworkproxy.h @@ -110,6 +110,7 @@ namespace BlackCore 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 int reInitializeAllAircraft() 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;