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
This commit is contained in:
Klaus Basan
2018-06-27 01:37:47 +02:00
parent 1f689a8830
commit 8898bf6be5
8 changed files with 72 additions and 4 deletions

View File

@@ -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<CAirspaceMonitor> 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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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
{

View File

@@ -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();

View File

@@ -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
//! @{
//! <pre>
//! .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
//! </pre>
//! @}
//! \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

View File

@@ -233,6 +233,11 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<bool>(QLatin1String("updateAircraftSupportingGndFLag"), callsign, supportGndFlag);
}
int CContextNetworkProxy::reInitializeAllAircraft()
{
return m_dBusInterface->callDBusRet<int>(QLatin1String("reInitializeAllAircraft"));
}
void CContextNetworkProxy::setFastPositionEnabledCallsigns(CCallsignSet &callsigns)
{
m_dBusInterface->callDBus(QLatin1String("setFastPositionEnabledCallsigns"), callsigns);

View File

@@ -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;