mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 01:05:34 +08:00
Let airspace monitor store the aircraft parts history
This commit adds a feature in airspace monitor to store the history of received aircraft parts. If needed the history can be retrieved via context methods. refs #835
This commit is contained in:
committed by
Mathew Sutcliffe
parent
a210b029f1
commit
4994bf12b2
@@ -416,6 +416,24 @@ namespace BlackCore
|
||||
return this->m_reverseLookupMessages.value(callsign);
|
||||
}
|
||||
|
||||
CStatusMessageList CAirspaceMonitor::getAircraftPartsHistory(const CCallsign &callsign) const
|
||||
{
|
||||
QReadLocker l(&m_lockPartsHistory);
|
||||
return this->m_aircraftPartsHistory.value(callsign);
|
||||
}
|
||||
|
||||
bool CAirspaceMonitor::isAircraftPartsHistoryEnabled() const
|
||||
{
|
||||
QReadLocker l(&m_lockPartsHistory);
|
||||
return this->m_enableAircraftPartsHistory;
|
||||
}
|
||||
|
||||
void CAirspaceMonitor::enableAircraftPartsHistory(bool enabled)
|
||||
{
|
||||
QWriteLocker l(&m_lockPartsHistory);
|
||||
m_enableAircraftPartsHistory = enabled;
|
||||
}
|
||||
|
||||
void CAirspaceMonitor::requestDataUpdates()
|
||||
{
|
||||
if (!this->isConnected()) { return; }
|
||||
@@ -1074,7 +1092,8 @@ namespace BlackCore
|
||||
|
||||
{ QWriteLocker l1(&m_lockParts); m_partsByCallsign.remove(callsign); m_aircraftSupportingParts.remove(callsign); }
|
||||
{ QWriteLocker l2(&m_lockSituations); m_situationsByCallsign.remove(callsign); }
|
||||
{ QWriteLocker l(&m_lockClient); m_otherClients.removeByCallsign(callsign); }
|
||||
{ QWriteLocker l3(&m_lockClient); m_otherClients.removeByCallsign(callsign); }
|
||||
{ QWriteLocker l4(&m_lockPartsHistory); m_aircraftPartsHistory.remove(callsign); }
|
||||
|
||||
bool removedCallsign = false;
|
||||
{
|
||||
@@ -1123,6 +1142,22 @@ namespace BlackCore
|
||||
this->storeAircraftParts(callsign, parts);
|
||||
emit this->addedAircraftParts(callsign, parts);
|
||||
|
||||
if (m_enableAircraftPartsHistory)
|
||||
{
|
||||
QJsonDocument doc(jsonObject);
|
||||
QString partsAsString = doc.toJson(QJsonDocument::Compact);
|
||||
CStatusMessage message(getLogCategories(), BlackMisc::CStatusMessage::SeverityInfo, callsign.isEmpty() ? callsign.toQString() + ": " + partsAsString.trimmed() : partsAsString.trimmed());
|
||||
if (this->m_aircraftPartsHistory.contains(callsign))
|
||||
{
|
||||
CStatusMessageList &msgs = this->m_aircraftPartsHistory[callsign];
|
||||
msgs.push_back(message);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->m_aircraftPartsHistory.insert(callsign, message);
|
||||
}
|
||||
}
|
||||
|
||||
// here I expect always a changed value
|
||||
QWriteLocker l(&m_lockAircraft);
|
||||
this->m_aircraftInRange.setAircraftParts(callsign, parts);
|
||||
|
||||
@@ -104,6 +104,9 @@ namespace BlackCore
|
||||
virtual void enableReverseLookupMessages(bool enabled) override;
|
||||
virtual bool isReverseLookupMessagesEnabled() const override;
|
||||
virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual bool isAircraftPartsHistoryEnabled() const override;
|
||||
virtual void enableAircraftPartsHistory(bool enabled) override;
|
||||
//! @}
|
||||
|
||||
//! Returns the list of users we know about
|
||||
@@ -230,6 +233,7 @@ namespace BlackCore
|
||||
BlackMisc::Network::CClientList m_otherClients; //!< client informatiom, thread safe access required
|
||||
BlackMisc::Simulation::CSimulatedAircraftList m_aircraftInRange; //!< aircraft, thread safe access required
|
||||
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::CStatusMessageList> m_reverseLookupMessages;
|
||||
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::CStatusMessageList> m_aircraftPartsHistory;
|
||||
QMap<BlackMisc::Aviation::CCallsign, FsInnPacket> m_tempFsInnPackets;
|
||||
|
||||
// hashs, because not sorted by key but keeping order
|
||||
@@ -242,6 +246,7 @@ namespace BlackCore
|
||||
INetwork *m_network = nullptr; //!< corresponding network interface
|
||||
CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer
|
||||
bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process
|
||||
bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts
|
||||
|
||||
// locks
|
||||
mutable QReadWriteLock m_lockSituations; //!< lock for situations: m_situationsByCallsign
|
||||
@@ -249,6 +254,7 @@ namespace BlackCore
|
||||
mutable QReadWriteLock m_lockAircraft; //!< lock aircraft: m_aircraftInRange
|
||||
mutable QReadWriteLock m_lockClient; //!< lock clients: m_otherClients
|
||||
mutable QReadWriteLock m_lockMessages; //!< lock for messages
|
||||
mutable QReadWriteLock m_lockPartsHistory; //!< lock for aircraft parts
|
||||
|
||||
//! Remove ATC online stations
|
||||
void removeAllOnlineAtcStations();
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "blackcore/corefacadeconfig.h"
|
||||
#include "blackcore/network.h"
|
||||
#include "blackmisc/audio/voiceroomlist.h"
|
||||
#include "blackmisc/aviation/aircraftpartslist.h"
|
||||
#include "blackmisc/aviation/airporticaocode.h"
|
||||
#include "blackmisc/aviation/atcstation.h"
|
||||
#include "blackmisc/aviation/atcstationlist.h"
|
||||
@@ -275,6 +276,18 @@ namespace BlackCore
|
||||
//! Enable reverse lookup logging
|
||||
virtual void enableReverseLookupMessages(bool enabled) = 0;
|
||||
|
||||
//! Get aircraft parts history
|
||||
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
|
||||
|
||||
//! Get remote aircraft parts
|
||||
virtual BlackMisc::Aviation::CAircraftPartsList getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const = 0;
|
||||
|
||||
//! Is storing the aircraft parts history enabled?
|
||||
virtual bool isAircraftPartsHistoryEnabled() const = 0;
|
||||
|
||||
//! Enable storing of aircraft parts
|
||||
virtual void enableAircraftPartsHistory(bool enabled) = 0;
|
||||
|
||||
// ------------------------ testing ------------------------
|
||||
|
||||
//! Create dummy ATC stations for performance tests etc.
|
||||
|
||||
@@ -332,6 +332,37 @@ namespace BlackCore
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
Q_UNUSED(enabled);
|
||||
}
|
||||
|
||||
//! \copydoc IContextNetwork::getAircraftPartsHistory
|
||||
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override
|
||||
{
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
Q_UNUSED(callsign);
|
||||
return BlackMisc::CStatusMessageList();
|
||||
}
|
||||
|
||||
//! \copydoc IContextNetwork::getRemoteAircraftParts
|
||||
virtual BlackMisc::Aviation::CAircraftPartsList getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const override
|
||||
{
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
Q_UNUSED(callsign);
|
||||
Q_UNUSED(cutoffTimeValuesBefore);
|
||||
return BlackMisc::Aviation::CAircraftPartsList();
|
||||
}
|
||||
|
||||
//! \copydoc IContextNetwork::isAircraftPartsHistoryEnabled
|
||||
virtual bool isAircraftPartsHistoryEnabled() const override
|
||||
{
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
|
||||
//! \copydoc IContextNetwork::enableAircraftPartsHistory
|
||||
virtual void enableAircraftPartsHistory(bool enabled) override
|
||||
{
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
Q_UNUSED(enabled);
|
||||
}
|
||||
};
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -527,6 +527,31 @@ namespace BlackCore
|
||||
emit CContext::changedLogOrDebugSettings();
|
||||
}
|
||||
|
||||
CStatusMessageList CContextNetwork::getAircraftPartsHistory(const CCallsign &callsign) const
|
||||
{
|
||||
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; }
|
||||
return this->m_airspace->getAircraftPartsHistory(callsign);
|
||||
}
|
||||
|
||||
CAircraftPartsList CContextNetwork::getRemoteAircraftParts(const CCallsign &callsign, qint64 cutoffTimeValuesBefore) const
|
||||
{
|
||||
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; }
|
||||
return this->m_airspace->remoteAircraftParts(callsign, cutoffTimeValuesBefore);
|
||||
}
|
||||
|
||||
bool CContextNetwork::isAircraftPartsHistoryEnabled() const
|
||||
{
|
||||
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||
return this->m_airspace->isAircraftPartsHistoryEnabled();
|
||||
}
|
||||
|
||||
void CContextNetwork::enableAircraftPartsHistory(bool enabled)
|
||||
{
|
||||
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << enabled; }
|
||||
this->m_airspace->enableAircraftPartsHistory(enabled);
|
||||
emit CContext::changedLogOrDebugSettings();
|
||||
}
|
||||
|
||||
CAtcStation CContextNetwork::getOnlineStationForCallsign(const CCallsign &callsign) const
|
||||
{
|
||||
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; }
|
||||
|
||||
@@ -181,6 +181,22 @@ namespace BlackCore
|
||||
//! \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
|
||||
//! \remarks Intentionally only running locally, not in interface
|
||||
|
||||
@@ -231,6 +231,26 @@ namespace BlackCore
|
||||
this->m_dBusInterface->callDBus(QLatin1Literal("enableReverseLookupLogging"), enabled);
|
||||
}
|
||||
|
||||
CStatusMessageList CContextNetworkProxy::getAircraftPartsHistory(const CCallsign &callsign) const
|
||||
{
|
||||
return this->m_dBusInterface->callDBusRet<CStatusMessageList>(QLatin1Literal("getAircraftPartsHistory"), callsign);
|
||||
}
|
||||
|
||||
CAircraftPartsList CContextNetworkProxy::getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const
|
||||
{
|
||||
return this->m_dBusInterface->callDBusRet<CAircraftPartsList>(QLatin1Literal("getRemoteAircraftParts"), callsign, cutoffTimeValuesBefore);
|
||||
}
|
||||
|
||||
bool CContextNetworkProxy::isAircraftPartsHistoryEnabled() const
|
||||
{
|
||||
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isAircraftPartsHistoryEnabled"));
|
||||
}
|
||||
|
||||
void CContextNetworkProxy::enableAircraftPartsHistory(bool enabled)
|
||||
{
|
||||
this->m_dBusInterface->callDBus(QLatin1Literal("enableAircraftPartsHistory"), enabled);
|
||||
}
|
||||
|
||||
void CContextNetworkProxy::testCreateDummyOnlineAtcStations(int number)
|
||||
{
|
||||
this->m_dBusInterface->callDBus(QLatin1Literal("testCreateDummyOnlineAtcStations"), number);
|
||||
|
||||
@@ -109,6 +109,10 @@ namespace BlackCore
|
||||
virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual bool isReverseLookupMessagesEnabled() const override;
|
||||
virtual void enableReverseLookupMessages(bool enabled) override;
|
||||
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual BlackMisc::Aviation::CAircraftPartsList getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const override;
|
||||
virtual bool isAircraftPartsHistoryEnabled() const override;
|
||||
virtual void enableAircraftPartsHistory(bool enabled) override;
|
||||
virtual void testCreateDummyOnlineAtcStations(int number) override;
|
||||
virtual void testAddAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts, bool incremental) override;
|
||||
virtual void testReceivedTextMessages(const BlackMisc::Network::CTextMessageList &textMessages) override;
|
||||
|
||||
@@ -136,6 +136,18 @@ namespace BlackMisc
|
||||
//! \threadsafe
|
||||
virtual void enableReverseLookupMessages(bool enabled) = 0;
|
||||
|
||||
//! Get aircraft parts history
|
||||
//! \threadsafe
|
||||
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
|
||||
|
||||
//! Is storing aircraft parts history enabled?
|
||||
//! \threadsafe
|
||||
virtual bool isAircraftPartsHistoryEnabled() const = 0;
|
||||
|
||||
//! Enable storing of aircraft parts history
|
||||
//! \threadsafe
|
||||
virtual void enableAircraftPartsHistory(bool enabled) = 0;
|
||||
|
||||
//! Destructor
|
||||
virtual ~IRemoteAircraftProvider() {}
|
||||
|
||||
|
||||
@@ -160,6 +160,22 @@ namespace BlackMisc
|
||||
Q_UNUSED(enabled);
|
||||
}
|
||||
|
||||
CStatusMessageList CRemoteAircraftProviderDummy::getAircraftPartsHistory(const CCallsign &callsign) const
|
||||
{
|
||||
Q_UNUSED(callsign);
|
||||
return CStatusMessageList();
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::isAircraftPartsHistoryEnabled() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::enableAircraftPartsHistory(bool enabled)
|
||||
{
|
||||
Q_UNUSED(enabled);
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::insertNewSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
this->m_situations.push_front(situation);
|
||||
|
||||
@@ -91,6 +91,9 @@ namespace BlackMisc
|
||||
virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual bool isReverseLookupMessagesEnabled() const override;
|
||||
virtual void enableReverseLookupMessages(bool enabled) override;
|
||||
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual bool isAircraftPartsHistoryEnabled() const override;
|
||||
virtual void enableAircraftPartsHistory(bool enabled) override;
|
||||
//! @}
|
||||
|
||||
signals:
|
||||
|
||||
Reference in New Issue
Block a user