From be297d8ccf6bbc04f829e8797be501cbb3279107 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 21 Dec 2016 22:34:21 +0100 Subject: [PATCH] refs #840, update (ground) elevation via remote aircraft provider --- src/blackcore/aircraftmatcher.cpp | 35 +++++--- src/blackcore/airspacemonitor.cpp | 37 +++++---- src/blackcore/airspacemonitor.h | 1 + src/blackcore/context/contextnetworkimpl.cpp | 7 +- src/blackcore/context/contextnetworkimpl.h | 83 ++----------------- .../simulation/remoteaircraftprovider.cpp | 7 ++ .../simulation/remoteaircraftprovider.h | 40 +++++---- .../remoteaircraftproviderdummy.cpp | 21 +++-- .../simulation/remoteaircraftproviderdummy.h | 7 +- 9 files changed, 110 insertions(+), 128 deletions(-) diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index 4e7fa74b8..7c8d8a075 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -52,6 +52,8 @@ namespace BlackCore const CAircraftModelList modelSet(this->m_modelSet); // Models for this matching const MatchingMode mode = this->m_matchingMode; + static const QString format("hh:mm:ss.zzz"); + CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("--- Matching: %1 ---").arg(QDateTime::currentDateTimeUtc().toString(format))); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Matching uses model set of %1 models").arg(modelSet.size()), getLogCategories()); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Input model: '%1' '%2'").arg(remoteAircraft.getCallsignAsString(), remoteAircraft.getModel().toQString()), getLogCategories()); @@ -108,6 +110,7 @@ namespace BlackCore Q_ASSERT_X(matchedModel.hasModelString(), Q_FUNC_INFO, "Missing model string"); Q_ASSERT_X(matchedModel.getModelType() != CAircraftModel::TypeUnknown, Q_FUNC_INFO, "Missing model type"); + CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("--- Matching end: %1 ---").arg(QDateTime::currentDateTimeUtc().toString(format))); return matchedModel; } @@ -482,34 +485,46 @@ namespace BlackCore return matchedModel; } - CAircraftModel CAircraftMatcher::getClosestMatchScoreImplementation(MatchingMode mode, const BlackMisc::Simulation::CAircraftModelList &modelSet, const CSimulatedAircraft &remoteAircraft, CStatusMessageList *log) const + CAircraftModel CAircraftMatcher::getClosestMatchScoreImplementation(MatchingMode mode, const CAircraftModelList &modelSet, const CSimulatedAircraft &remoteAircraft, CStatusMessageList *log) const { Q_UNUSED(mode); + CAircraftModelList usedModelSet; + + // VTOL + ScoredModels map; + if (remoteAircraft.isVtol() && modelSet.contains(&CAircraftModel::isVtol, true)) + { + usedModelSet = modelSet.findBy(&CAircraftModel::isVtol, true); + } + else + { + usedModelSet = modelSet; + } + // first decide what set to use for scoring, it should not be too large - ScoredModels map; - if (remoteAircraft.hasAircraftAndAirlineDesignator() && modelSet.containsModelsWithAircraftAndAirlineDesignator(remoteAircraft.getAircraftIcaoCodeDesignator(), remoteAircraft.getAirlineIcaoCodeDesignator())) + if (remoteAircraft.hasAircraftAndAirlineDesignator() && usedModelSet.containsModelsWithAircraftAndAirlineDesignator(remoteAircraft.getAircraftIcaoCodeDesignator(), remoteAircraft.getAirlineIcaoCodeDesignator())) { - const CAircraftModelList byAircraftAndAirline(modelSet.findByIcaoDesignators(remoteAircraft.getAircraftIcaoCode(), remoteAircraft.getAirlineIcaoCode())); + const CAircraftModelList byAircraftAndAirline(usedModelSet.findByIcaoDesignators(remoteAircraft.getAircraftIcaoCode(), remoteAircraft.getAirlineIcaoCode())); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using reduced set of %1 models by aircraft/airline ICAOs '%2'/'%3' for scoring").arg(byAircraftAndAirline.size()).arg(remoteAircraft.getAircraftIcaoCode().getDesignatorDbKey(), remoteAircraft.getAirlineIcaoCode().getVDesignatorDbKey()), getLogCategories()); map = byAircraftAndAirline.scoreFull(remoteAircraft.getModel()); } - else if (remoteAircraft.hasAircraftDesignator() && modelSet.contains(&CAircraftModel::getAircraftIcaoCodeDesignator, remoteAircraft.getAircraftIcaoCodeDesignator())) + else if (remoteAircraft.hasAircraftDesignator() && usedModelSet.contains(&CAircraftModel::getAircraftIcaoCodeDesignator, remoteAircraft.getAircraftIcaoCodeDesignator())) { - const CAircraftModelList byAircraft(modelSet.findByIcaoDesignators(remoteAircraft.getAircraftIcaoCode(), CAirlineIcaoCode())); + const CAircraftModelList byAircraft(usedModelSet.findByIcaoDesignators(remoteAircraft.getAircraftIcaoCode(), CAirlineIcaoCode())); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using reduced set of %1 models by aircraft ICAO '%2' for scoring").arg(byAircraft.size()).arg(remoteAircraft.getAircraftIcaoCode().getDesignatorDbKey()), getLogCategories()); map = byAircraft.scoreFull(remoteAircraft.getModel()); } - else if (remoteAircraft.getAircraftIcaoCode().hasValidCombinedType() && modelSet.containsCombinedType(remoteAircraft.getAircraftIcaoCode().getCombinedType())) + else if (remoteAircraft.getAircraftIcaoCode().hasValidCombinedType() && usedModelSet.containsCombinedType(remoteAircraft.getAircraftIcaoCode().getCombinedType())) { - const CAircraftModelList byAircraft(modelSet.findByCombinedType(remoteAircraft.getAircraftIcaoCode().getCombinedType())); + const CAircraftModelList byAircraft(usedModelSet.findByCombinedType(remoteAircraft.getAircraftIcaoCode().getCombinedType())); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using reduced set of %1 models by combined type '%2' for scoring").arg(byAircraft.size()).arg(remoteAircraft.getAircraftIcaoCode().getCombinedType()), getLogCategories()); map = byAircraft.scoreFull(remoteAircraft.getModel()); } else { - CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using full set with %1 models").arg(modelSet.size()), getLogCategories()); - map = modelSet.scoreFull(remoteAircraft.getModel()); + CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using set with %1 models").arg(usedModelSet.size()), getLogCategories()); + map = usedModelSet.scoreFull(remoteAircraft.getModel()); } CAircraftModel matchedModel; diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 49e5e0055..7fdc62979 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -21,13 +21,14 @@ #include "blackmisc/aviation/comsystem.h" #include "blackmisc/aviation/modulator.h" #include "blackmisc/aviation/transponder.h" +#include "blackmisc/geo/elevationplane.h" +#include "blackmisc/network/user.h" +#include "blackmisc/network/voicecapabilities.h" +#include "blackmisc/pq/units.h" #include "blackmisc/compare.h" #include "blackmisc/iterator.h" #include "blackmisc/json.h" #include "blackmisc/logmessage.h" -#include "blackmisc/network/user.h" -#include "blackmisc/network/voicecapabilities.h" -#include "blackmisc/pq/units.h" #include "blackmisc/propertyindexvariantmap.h" #include "blackmisc/range.h" #include "blackmisc/sequence.h" @@ -195,15 +196,15 @@ namespace BlackCore Q_ASSERT_X(receiver, Q_FUNC_INFO, "Missing receiver"); // bind does not allow to define connection type, so we use receiver as workaround - QMetaObject::Connection c1 = connect(this, &CAirspaceMonitor::addedAircraftSituation, receiver, situationSlot); + const QMetaObject::Connection c1 = connect(this, &CAirspaceMonitor::addedAircraftSituation, receiver, situationSlot); Q_ASSERT_X(c1, Q_FUNC_INFO, "connect failed"); - QMetaObject::Connection c2 = connect(this, &CAirspaceMonitor::addedAircraftParts, receiver, partsSlot); + const QMetaObject::Connection c2 = connect(this, &CAirspaceMonitor::addedAircraftParts, receiver, partsSlot); Q_ASSERT_X(c2, Q_FUNC_INFO, "connect failed"); - QMetaObject::Connection c3 = connect(this, &CAirspaceMonitor::removedAircraft, receiver, removedAircraftSlot); + const QMetaObject::Connection c3 = connect(this, &CAirspaceMonitor::removedAircraft, receiver, removedAircraftSlot); Q_ASSERT_X(c3, Q_FUNC_INFO, "connect failed"); // trick is to use the Queued signal here // analyzer (own thread) -> airspaceAircraftSnapshot -> AirspaceMonitor -> airspaceAircraftSnapshot queued in main thread - QMetaObject::Connection c4 = this->connect(this->m_analyzer, &CAirspaceAnalyzer::airspaceAircraftSnapshot, receiver, aircraftSnapshotSlot, Qt::QueuedConnection); + const QMetaObject::Connection c4 = this->connect(this->m_analyzer, &CAirspaceAnalyzer::airspaceAircraftSnapshot, receiver, aircraftSnapshotSlot, Qt::QueuedConnection); Q_ASSERT_X(c4, Q_FUNC_INFO, "connect failed"); return QList({ c1, c2, c3, c4}); } @@ -250,6 +251,13 @@ namespace BlackCore return c > 0; } + bool CAirspaceMonitor::updateAircraftGroundElevation(const CCallsign &callsign, const CElevationPlane &elevation) + { + QWriteLocker l(&m_lockAircraft); + const int c = m_aircraftInRange.setGroundElevation(callsign, elevation.geodeticHeight()); + return c > 0; + } + void CAirspaceMonitor::updateMarkAllAsNotRendered() { QWriteLocker l(&m_lockAircraft); @@ -307,7 +315,7 @@ namespace BlackCore CCallsignSet searchList(callsigns); // myself, which is not in the lists below - CSimulatedAircraft myAircraft(getOwnAircraft()); + const CSimulatedAircraft myAircraft(getOwnAircraft()); if (!myAircraft.getCallsign().isEmpty() && searchList.contains(myAircraft.getCallsign())) { searchList.remove(myAircraft.getCallsign()); @@ -343,7 +351,7 @@ namespace BlackCore // those are the ones not in range for (const CCallsign &callsign : searchList) { - CUserList usersByCallsign = sApp->getWebDataServices()->getUsersForCallsign(callsign); + const CUserList usersByCallsign = sApp->getWebDataServices()->getUsersForCallsign(callsign); if (usersByCallsign.isEmpty()) { CUser user; @@ -663,7 +671,7 @@ namespace BlackCore { Q_ASSERT(CThreadUtils::isCurrentThreadObjectThread(this)); if (!this->isConnected()) { return; } - CAtcStationList stationsWithCallsign = this->m_atcStationsOnline.findByCallsign(callsign); + const CAtcStationList stationsWithCallsign = this->m_atcStationsOnline.findByCallsign(callsign); if (stationsWithCallsign.isEmpty()) { // new station, init with data from data file @@ -699,7 +707,7 @@ namespace BlackCore vm.addValue(CAtcStation::IndexFrequency, frequency); vm.addValue(CAtcStation::IndexPosition, position); vm.addValue(CAtcStation::IndexRange, range); - int changed = this->m_atcStationsOnline.applyIf(&CAtcStation::getCallsign, callsign, vm, true); + const int changed = this->m_atcStationsOnline.applyIfCallsign(callsign, vm, true); if (changed > 0) { emit this->changedAtcStationsOnline(); } } @@ -713,7 +721,7 @@ namespace BlackCore this->m_otherClients.removeByCallsign(callsign); if (this->m_atcStationsOnline.containsCallsign(callsign)) { - CAtcStation removedStation = this->m_atcStationsOnline.findFirstByCallsign(callsign); + const CAtcStation removedStation = this->m_atcStationsOnline.findFirstByCallsign(callsign); this->m_atcStationsOnline.removeByCallsign(callsign); emit this->changedAtcStationsOnline(); emit this->changedAtcStationOnlineConnectionStatus(removedStation, false); @@ -933,7 +941,7 @@ namespace BlackCore int CAirspaceMonitor::updateOnlineStations(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues, bool sendSignal) { - const int c = this->m_atcStationsOnline.applyIf(&CAtcStation::getCallsign, callsign, vm, skipEqualValues); + const int c = this->m_atcStationsOnline.applyIfCallsign(callsign, vm, skipEqualValues); if (c > 0 && sendSignal) { emit this->changedAtcStationsOnline(); @@ -943,7 +951,8 @@ namespace BlackCore int CAirspaceMonitor::updateBookedStations(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues, bool sendSignal) { - const int c = this->m_atcStationsBooked.applyIf(&CAtcStation::getCallsign, callsign, vm, skipEqualValues); + // do not used applyFirst here, more stations wit callsign at a time + const int c = this->m_atcStationsBooked.applyIfCallsign(callsign, vm, skipEqualValues); if (c > 0 && sendSignal) { emit this->changedAtcStationsBooked(); diff --git a/src/blackcore/airspacemonitor.h b/src/blackcore/airspacemonitor.h index 0c54024de..434dfb342 100644 --- a/src/blackcore/airspacemonitor.h +++ b/src/blackcore/airspacemonitor.h @@ -100,6 +100,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 enableFastPositonUpdates) override; virtual bool updateAircraftRendered(const BlackMisc::Aviation::CCallsign &callsign, bool rendered) override; + virtual bool updateAircraftGroundElevation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Geo::CElevationPlane &elevation) override; virtual void updateMarkAllAsNotRendered() override; virtual void enableReverseLookupMessages(bool enabled) override; virtual bool isReverseLookupMessagesEnabled() const override; diff --git a/src/blackcore/context/contextnetworkimpl.cpp b/src/blackcore/context/contextnetworkimpl.cpp index 662695435..493d909e1 100644 --- a/src/blackcore/context/contextnetworkimpl.cpp +++ b/src/blackcore/context/contextnetworkimpl.cpp @@ -637,14 +637,17 @@ namespace BlackCore bool CContextNetwork::updateAircraftRendered(const CCallsign &callsign, bool rendered) { - if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << rendered; } bool c = this->m_airspace->updateAircraftRendered(callsign, rendered); return c; } + bool CContextNetwork::updateAircraftGroundElevation(const CCallsign &callsign, const CElevationPlane &elevation) + { + return this->m_airspace->updateAircraftGroundElevation(callsign, elevation); + } + void CContextNetwork::updateMarkAllAsNotRendered() { - if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } this->m_airspace->updateMarkAllAsNotRendered(); } diff --git a/src/blackcore/context/contextnetworkimpl.h b/src/blackcore/context/contextnetworkimpl.h index 1a04fa144..bbdc3705f 100644 --- a/src/blackcore/context/contextnetworkimpl.h +++ b/src/blackcore/context/contextnetworkimpl.h @@ -84,28 +84,13 @@ namespace BlackCore //! Destructor virtual ~CContextNetwork(); - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::remoteAircraftSituations //! \ingroup remoteaircraftprovider + //! @{ virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::remoteAircraftSituationsCount - //! \ingroup remoteaircraftprovider virtual int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::remoteAircraftParts - //! \ingroup remoteaircraftprovider virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::isRemoteAircraftSupportingParts - //! \ingroup remoteaircraftprovider virtual bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::remoteAircraftSupportingParts - //! \ingroup remoteaircraftprovider virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::connectRemoteAircraftProviderSignals - //! \ingroup remoteaircraftprovider virtual QList connectRemoteAircraftProviderSignals( QObject *receiver, std::function addedSituationSlot, @@ -113,89 +98,36 @@ namespace BlackCore std::function removedAircraftSlot, std::function aircraftSnapshotSlot ) override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::updateAircraftRendered - //! \ingroup remoteaircraftprovider virtual bool updateAircraftRendered(const BlackMisc::Aviation::CCallsign &callsign, bool rendered) override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::updateMarkAllAsNotRendered - //! \ingroup remoteaircraftprovider + virtual bool updateAircraftGroundElevation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Geo::CElevationPlane &elevation) override; virtual void updateMarkAllAsNotRendered() override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getLatestAirspaceAircraftSnapshot - //! \ingroup remoteaircraftprovider virtual BlackMisc::Simulation::CAirspaceAircraftSnapshot getLatestAirspaceAircraftSnapshot() const override; + //! @} //! Network library INetwork *network() const { return m_network; } public slots: - //! \copydoc IContextNetwork::updateAircraftEnabled + // from context and provider interface //! \ingroup remoteaircraftprovider + //! @{ virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override; - - //! \copydoc IContextNetwork::updateAircraftModel - //! \ingroup remoteaircraftprovider virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override; - - //! \copydoc IContextNetwork::updateAircraftNetworkModel - //! \ingroup remoteaircraftprovider virtual bool updateAircraftNetworkModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override; - - //! \copydoc IContextNetwork::updateFastPositionEnabled - //! \ingroup remoteaircraftprovider virtual bool updateFastPositionEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enableFastPositonUpdates) override; - - //! \copydoc IContextNetwork::getAtcStationsBooked() - virtual BlackMisc::Aviation::CAtcStationList getAtcStationsBooked() const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getAircraftInRange - //! \ingroup remoteaircraftprovider virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getAircraftInRangeCallsigns - //! \ingroup remoteaircraftprovider virtual BlackMisc::Aviation::CCallsignSet getAircraftInRangeCallsigns() const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getAircraftInRangeCount - //! \ingroup remoteaircraftprovider virtual int getAircraftInRangeCount() const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getAircraftInRangeForCallsign - //! \ingroup remoteaircraftprovider virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftInRangeForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getAircraftInRangeModelForCallsign - //! \ingroup remoteaircraftprovider virtual BlackMisc::Simulation::CAircraftModel getAircraftInRangeModelForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getReverseLookupMessages - //! \ingroup remoteaircraftprovider virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::isReverseLookupMessagesEnabled - //! \ingroup remoteaircraftprovider virtual bool isReverseLookupMessagesEnabled() const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::enableReverseLookupMessages - //! \ingroup remoteaircraftprovider virtual void enableReverseLookupMessages(bool enabled) override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getAircraftPartsHistory - //! \ingroup remoteaircraftprovider virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::remoteAircraftParts - //! \ingroup remoteaircraftprovider virtual BlackMisc::Aviation::CAircraftPartsList getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::isAircraftPartsHistoryEnabled - //! \ingroup remoteaircraftprovider virtual bool isAircraftPartsHistoryEnabled() const override; - - //! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::enableAircraftPartsHistory - //! \ingroup remoteaircraftprovider virtual void enableAircraftPartsHistory(bool enabled) override; + //! @} //! In transition state, e.g. connecting, disconnecting. //! \details In such a state it is advisable to wait until an end state (connected/disconnected) is reached @@ -211,6 +143,9 @@ namespace BlackCore //! \copydoc IContextNetwork::parseCommandLine virtual bool parseCommandLine(const QString &commandLine, const BlackMisc::CIdentifier &originator) override; + //! \copydoc IContextNetwork::getAtcStationsBooked() + virtual BlackMisc::Aviation::CAtcStationList getAtcStationsBooked() const override; + //! \copydoc IContextNetwork::readAtcBookingsFromSource() virtual void readAtcBookingsFromSource() const override; diff --git a/src/blackmisc/simulation/remoteaircraftprovider.cpp b/src/blackmisc/simulation/remoteaircraftprovider.cpp index 7e6cc64fa..77c3ff936 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.cpp +++ b/src/blackmisc/simulation/remoteaircraftprovider.cpp @@ -10,6 +10,7 @@ #include "blackmisc/simulation/remoteaircraftprovider.h" using namespace BlackMisc::Aviation; +using namespace BlackMisc::Geo; namespace BlackMisc { @@ -93,6 +94,12 @@ namespace BlackMisc return this->m_remoteAircraftProvider->updateAircraftRendered(callsign, rendered); } + bool CRemoteAircraftAware::updateAircraftGroundElevation(const CCallsign &callsign, const CElevationPlane &elevation) + { + Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available"); + return this->m_remoteAircraftProvider->updateAircraftGroundElevation(callsign, elevation); + } + void CRemoteAircraftAware::updateMarkAllAsNotRendered() { Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available"); diff --git a/src/blackmisc/simulation/remoteaircraftprovider.h b/src/blackmisc/simulation/remoteaircraftprovider.h index 7c8a3c89f..93e9b721c 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.h +++ b/src/blackmisc/simulation/remoteaircraftprovider.h @@ -37,7 +37,7 @@ namespace BlackMisc class CAircraftSituation; class CCallsign; } - + namespace Geo { class CElevationPlane; } namespace Simulation { //! Direct thread safe in memory access to remote aircraft @@ -108,6 +108,10 @@ namespace BlackMisc //! \threadsafe virtual bool updateAircraftRendered(const BlackMisc::Aviation::CCallsign &callsign, bool rendered) = 0; + //! Ground elevation of aircraft + //! \threadsafe + virtual bool updateAircraftGroundElevation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Geo::CElevationPlane &elevation) = 0; + //! Mark all as not rendered //! \threadsafe virtual void updateMarkAllAsNotRendered() = 0; @@ -168,7 +172,7 @@ namespace BlackMisc { public: //! \copydoc IRemoteAircraftProvider::getAircraftInRange - virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const; + BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const; //! \copydoc IRemoteAircraftProvider::getAircraftInRangeCount int getAircraftInRangeCount() const; @@ -177,46 +181,46 @@ namespace BlackMisc BlackMisc::Aviation::CCallsignSet getAircraftInRangeCallsigns() const; //! \copydoc IRemoteAircraftProvider::getAircraftInRangeForCallsign - virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftInRangeForCallsign(const Aviation::CCallsign &callsign) const; + BlackMisc::Simulation::CSimulatedAircraft getAircraftInRangeForCallsign(const Aviation::CCallsign &callsign) const; //! \copydoc IRemoteAircraftProvider::getAircraftInRangeModelForCallsign - virtual BlackMisc::Simulation::CAircraftModel getAircraftInRangeModelForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const; + BlackMisc::Simulation::CAircraftModel getAircraftInRangeModelForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const; //! \copydoc IRemoteAircraftProvider::getLatestAirspaceAircraftSnapshot - virtual BlackMisc::Simulation::CAirspaceAircraftSnapshot getLatestAirspaceAircraftSnapshot() const; + BlackMisc::Simulation::CAirspaceAircraftSnapshot getLatestAirspaceAircraftSnapshot() const; //! \copydoc IRemoteAircraftProvider::remoteAircraftSituations - virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const; + BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const; //! \copydoc IRemoteAircraftProvider::remoteAircraftParts - virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const; + BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const; //! \copydoc IRemoteAircraftProvider::remoteAircraftSupportingParts - virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const; + BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const; //! \copydoc IRemoteAircraftProvider::remoteAircraftSituationsCount - virtual int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const; + int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const; //! \copydoc IRemoteAircraftProvider::isRemoteAircraftSupportingParts - virtual bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const; + bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const; //! \copydoc IRemoteAircraftProvider::updateAircraftEnabled - virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering); + bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering); //! \copydoc IRemoteAircraftProvider::updateAircraftModel - virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator); + bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator); //! \copydoc IRemoteAircraftProvider::updateAircraftNetworkModel - virtual bool updateAircraftNetworkModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator); + bool updateAircraftNetworkModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator); //! \copydoc IRemoteAircraftProvider::updateAircraftRendered - virtual bool updateAircraftRendered(const BlackMisc::Aviation::CCallsign &callsign, bool rendered); + bool updateAircraftRendered(const BlackMisc::Aviation::CCallsign &callsign, bool rendered); + + //! \copydoc IRemoteAircraftProvider::updateAircraftGroundElevation + bool updateAircraftGroundElevation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Geo::CElevationPlane &elevation); //! \copydoc IRemoteAircraftProvider::updateMarkAllAsNotRendered - virtual void updateMarkAllAsNotRendered(); - - //! Destructor - virtual ~CRemoteAircraftAware() {} + void updateMarkAllAsNotRendered(); //! Set remote aircraft provider void setRemoteAircraftProvider(IRemoteAircraftProvider *remoteAircraftProvider) { m_remoteAircraftProvider = remoteAircraftProvider; } diff --git a/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp b/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp index 455c5d18e..1d100667b 100644 --- a/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp +++ b/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp @@ -8,17 +8,19 @@ */ #include "blackmisc/aviation/callsign.h" +#include "blackmisc/geo/elevationplane.h" +#include "blackmisc/simulation/remoteaircraftproviderdummy.h" #include "blackmisc/collection.h" #include "blackmisc/compare.h" #include "blackmisc/dictionary.h" #include "blackmisc/metaclassprivate.h" #include "blackmisc/propertyindexvariantmap.h" -#include "blackmisc/simulation/remoteaircraftproviderdummy.h" #include "blackmisc/variant.h" #include using namespace BlackMisc::Aviation; +using namespace BlackMisc::Geo; namespace BlackMisc { @@ -105,7 +107,7 @@ namespace BlackMisc bool CRemoteAircraftProviderDummy::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRendering) { CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexEnabled, CVariant::fromValue(enabledForRendering)); - int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = this->m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } @@ -113,7 +115,7 @@ namespace BlackMisc { Q_UNUSED(originator); CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexModel, CVariant::from(model)); - int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = this->m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } @@ -121,24 +123,31 @@ namespace BlackMisc { Q_UNUSED(originator); CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexNetworkModel, CVariant::from(model)); - int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = this->m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } bool CRemoteAircraftProviderDummy::updateFastPositionEnabled(const CCallsign &callsign, bool enableFastPositionUpdates) { CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexFastPositionUpdates, CVariant::fromValue(enableFastPositionUpdates)); - int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = this->m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } bool CRemoteAircraftProviderDummy::updateAircraftRendered(const CCallsign &callsign, bool rendered) { CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexRendered, CVariant::fromValue(rendered)); - int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = this->m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } + bool CRemoteAircraftProviderDummy::updateAircraftGroundElevation(const CCallsign &callsign, const CElevationPlane &elevation) + { + CPropertyIndexVariantMap vm({ CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexGroundSpeed }, CVariant::fromValue(elevation)); + const int c = this->m_aircraft.applyIfCallsign(callsign, vm); + return c > 0; + } + void CRemoteAircraftProviderDummy::updateMarkAllAsNotRendered() { this->m_aircraft.markAllAsNotRendered(); diff --git a/src/blackmisc/simulation/remoteaircraftproviderdummy.h b/src/blackmisc/simulation/remoteaircraftproviderdummy.h index 5d479adfd..276c04536 100644 --- a/src/blackmisc/simulation/remoteaircraftproviderdummy.h +++ b/src/blackmisc/simulation/remoteaircraftproviderdummy.h @@ -62,8 +62,7 @@ namespace BlackMisc //! Clear all data void clear(); - //! \name Interface overrides - //! @{ + // Interface overrides virtual CSimulatedAircraftList getAircraftInRange() const override; virtual int getAircraftInRangeCount() const override; virtual Aviation::CCallsignSet getAircraftInRangeCallsigns() const override; @@ -84,9 +83,10 @@ namespace BlackMisc ) override; virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override; 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 updateAircraftNetworkModel(const Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override; virtual bool updateFastPositionEnabled(const Aviation::CCallsign &callsign, bool enableFastPositionUpdates) override; virtual bool updateAircraftRendered(const Aviation::CCallsign &callsign, bool rendered) override; + virtual bool updateAircraftGroundElevation(const Aviation::CCallsign &callsign, const BlackMisc::Geo::CElevationPlane &elevation) override; virtual void updateMarkAllAsNotRendered() override; virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual bool isReverseLookupMessagesEnabled() const override; @@ -94,7 +94,6 @@ namespace BlackMisc virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual bool isAircraftPartsHistoryEnabled() const override; virtual void enableAircraftPartsHistory(bool enabled) override; - //! @} signals: //! Added situation