mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-09 21:45:34 +08:00
Ref T259, Ref T243 added number of parts/situations and last modified timestamp
* the spline interpolator might need the timestamp to create a new interpolant * number of parts/situations is for info only
This commit is contained in:
@@ -121,8 +121,8 @@ namespace BlackMisc
|
||||
}
|
||||
|
||||
// locked members
|
||||
{ QWriteLocker l(&m_lockParts); m_partsByCallsign.clear(); m_aircraftWithParts.clear(); }
|
||||
{ QWriteLocker l(&m_lockSituations); m_situationsByCallsign.clear(); }
|
||||
{ QWriteLocker l(&m_lockParts); m_partsByCallsign.clear(); m_aircraftWithParts.clear(); m_partsAdded = 0; m_partsLastModified.clear(); }
|
||||
{ QWriteLocker l(&m_lockSituations); m_situationsByCallsign.clear(); m_situationsAdded = 0; m_situationsLastModified.clear(); }
|
||||
{ QWriteLocker l(&m_lockPartsHistory); m_aircraftPartsHistory.clear(); }
|
||||
{ QWriteLocker l(&m_lockMessages); m_reverseLookupMessages.clear(); }
|
||||
{ QWriteLocker l(&m_lockAircraft); m_aircraftInRange.clear(); }
|
||||
@@ -164,8 +164,13 @@ namespace BlackMisc
|
||||
|
||||
void CRemoteAircraftProvider::storeAircraftSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
if (situation.getCallsign().isEmpty()) { return; }
|
||||
const qint64 ts = QDateTime::currentMSecsSinceEpoch();
|
||||
|
||||
// list from new to old
|
||||
QWriteLocker lock(&m_lockSituations);
|
||||
m_situationsAdded++;
|
||||
m_situationsLastModified[situation.getCallsign()] = ts;
|
||||
CAircraftSituationList &situationList = m_situationsByCallsign[situation.getCallsign()];
|
||||
if (situationList.isEmpty())
|
||||
{
|
||||
@@ -187,9 +192,12 @@ namespace BlackMisc
|
||||
if (callsign.isEmpty()) { return; }
|
||||
|
||||
// list sorted from new to old
|
||||
const qint64 ts = QDateTime::currentMSecsSinceEpoch();
|
||||
CAircraftPartsList correctiveParts;
|
||||
{
|
||||
QWriteLocker lock(&m_lockParts);
|
||||
m_partsAdded++;
|
||||
m_partsLastModified[callsign] = ts;
|
||||
CAircraftPartsList &partsList = m_partsByCallsign[callsign];
|
||||
partsList.push_frontKeepLatestFirstAdjustOffset(parts, IRemoteAircraftProvider::MaxPartsPerCallsign);
|
||||
|
||||
@@ -207,7 +215,8 @@ namespace BlackMisc
|
||||
{
|
||||
QWriteLocker lock(&m_lockSituations);
|
||||
CAircraftSituationList &situationList = m_situationsByCallsign[callsign];
|
||||
situationList.adjustGroundFlag(parts);
|
||||
const int c = situationList.adjustGroundFlag(parts);
|
||||
if (c > 0) { m_situationsLastModified[callsign] = ts; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -418,6 +427,30 @@ namespace BlackMisc
|
||||
m_enableAircraftPartsHistory = enabled;
|
||||
}
|
||||
|
||||
int CRemoteAircraftProvider::aircraftSituationsAdded() const
|
||||
{
|
||||
QReadLocker l(&m_lockSituations);
|
||||
return m_situationsAdded;
|
||||
}
|
||||
|
||||
qint64 CRemoteAircraftProvider::situationsLastModified(const CCallsign &callsign) const
|
||||
{
|
||||
QReadLocker l(&m_lockSituations);
|
||||
return m_situationsLastModified.value(callsign, -1);
|
||||
}
|
||||
|
||||
qint64 CRemoteAircraftProvider::partsLastModified(const CCallsign &callsign) const
|
||||
{
|
||||
QReadLocker l(&m_lockParts);
|
||||
return m_partsLastModified.value(callsign, -1);
|
||||
}
|
||||
|
||||
int CRemoteAircraftProvider::aircraftPartsAdded() const
|
||||
{
|
||||
QReadLocker l(&m_lockParts);
|
||||
return m_partsAdded;
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProvider::isAircraftInRange(const CCallsign &callsign) const
|
||||
{
|
||||
if (callsign.isEmpty()) { return false; }
|
||||
@@ -456,8 +489,8 @@ namespace BlackMisc
|
||||
|
||||
bool CRemoteAircraftProvider::removeAircraft(const CCallsign &callsign)
|
||||
{
|
||||
{ QWriteLocker l1(&m_lockParts); m_partsByCallsign.remove(callsign); m_aircraftWithParts.remove(callsign); }
|
||||
{ QWriteLocker l2(&m_lockSituations); m_situationsByCallsign.remove(callsign); }
|
||||
{ QWriteLocker l1(&m_lockParts); m_partsByCallsign.remove(callsign); m_aircraftWithParts.remove(callsign); m_partsLastModified.remove(callsign); }
|
||||
{ QWriteLocker l2(&m_lockSituations); m_situationsByCallsign.remove(callsign); m_situationsLastModified.remove(callsign); }
|
||||
{ QWriteLocker l4(&m_lockPartsHistory); m_aircraftPartsHistory.remove(callsign); }
|
||||
bool removedCallsign = false;
|
||||
{
|
||||
@@ -576,6 +609,30 @@ namespace BlackMisc
|
||||
this->provider()->updateMarkAllAsNotRendered();
|
||||
}
|
||||
|
||||
int CRemoteAircraftAware::aircraftSituationsAdded() const
|
||||
{
|
||||
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
|
||||
return this->provider()->aircraftSituationsAdded();
|
||||
}
|
||||
|
||||
int CRemoteAircraftAware::aircraftPartsAdded() const
|
||||
{
|
||||
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
|
||||
return this->provider()->aircraftPartsAdded();
|
||||
}
|
||||
|
||||
qint64 CRemoteAircraftAware::situationsLastModified(const CCallsign &callsign) const
|
||||
{
|
||||
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
|
||||
return this->provider()->situationsLastModified(callsign);
|
||||
}
|
||||
|
||||
qint64 CRemoteAircraftAware::partsLastModified(const CCallsign &callsign) const
|
||||
{
|
||||
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
|
||||
return this->provider()->partsLastModified(callsign);
|
||||
}
|
||||
|
||||
bool CRemoteAircraftAware::isRemoteAircraftSupportingParts(const CCallsign &callsign) const
|
||||
{
|
||||
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
|
||||
|
||||
@@ -171,6 +171,22 @@ namespace BlackMisc
|
||||
//! \threadsafe
|
||||
virtual void enableAircraftPartsHistory(bool enabled) = 0;
|
||||
|
||||
//! Number of situations added
|
||||
//! \threadsafe
|
||||
virtual int aircraftSituationsAdded() const = 0;
|
||||
|
||||
//! Number of parts added
|
||||
//! \threadsafe
|
||||
virtual int aircraftPartsAdded() const = 0;
|
||||
|
||||
//! When last modified
|
||||
//! \threadsafe
|
||||
virtual qint64 situationsLastModified(const Aviation::CCallsign &callsign) const = 0;
|
||||
|
||||
//! When last modified
|
||||
//! \threadsafe
|
||||
virtual qint64 partsLastModified(const Aviation::CCallsign &callsign) const = 0;
|
||||
|
||||
//! Destructor
|
||||
virtual ~IRemoteAircraftProvider() {}
|
||||
|
||||
@@ -239,6 +255,10 @@ namespace BlackMisc
|
||||
virtual CStatusMessageList getAircraftPartsHistory(const Aviation::CCallsign &callsign) const override;
|
||||
virtual bool isAircraftPartsHistoryEnabled() const override;
|
||||
virtual void enableAircraftPartsHistory(bool enabled) override;
|
||||
virtual int aircraftSituationsAdded() const override;
|
||||
virtual int aircraftPartsAdded() const override;
|
||||
virtual qint64 situationsLastModified(const Aviation::CCallsign &callsign) const override;
|
||||
virtual qint64 partsLastModified(const Aviation::CCallsign &callsign) const override;
|
||||
virtual QList<QMetaObject::Connection> connectRemoteAircraftProviderSignals(
|
||||
QObject *receiver,
|
||||
std::function<void(const Aviation::CAircraftSituation &)> addedSituationSlot,
|
||||
@@ -338,10 +358,14 @@ namespace BlackMisc
|
||||
CSituationsPerCallsign m_situationsByCallsign; //!< situations, for performance reasons per callsign, thread safe access required
|
||||
CPartsPerCallsign m_partsByCallsign; //!< parts, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CCallsignSet m_aircraftWithParts; //!< aircraft supporting parts, thread safe access required
|
||||
int m_situationsAdded = 0; //!< total number of situations added
|
||||
int m_partsAdded = 0; //!< total number of parts added
|
||||
|
||||
CSimulatedAircraftList m_aircraftInRange; //!< aircraft, thread safe access required
|
||||
QMap<Aviation::CCallsign, CStatusMessageList> m_reverseLookupMessages;
|
||||
QMap<Aviation::CCallsign, CStatusMessageList> m_aircraftPartsHistory;
|
||||
QMap<Aviation::CCallsign, qint64> m_situationsLastModified;
|
||||
QMap<Aviation::CCallsign, qint64> m_partsLastModified;
|
||||
|
||||
bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process
|
||||
bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts
|
||||
@@ -421,6 +445,18 @@ namespace BlackMisc
|
||||
//! \copydoc IRemoteAircraftProvider::updateMarkAllAsNotRendered
|
||||
void updateMarkAllAsNotRendered();
|
||||
|
||||
//! \copydoc IRemoteAircraftProvider::aircraftSituationsAdded
|
||||
int aircraftSituationsAdded() const;
|
||||
|
||||
//! \copydoc IRemoteAircraftProvider::aircraftPartsAdded
|
||||
int aircraftPartsAdded() const;
|
||||
|
||||
//! \copydoc IRemoteAircraftProvider::situationsLastModified
|
||||
qint64 situationsLastModified(const Aviation::CCallsign &callsign) const;
|
||||
|
||||
//! \copydoc IRemoteAircraftProvider::partsLastModified
|
||||
qint64 partsLastModified(const Aviation::CCallsign &callsign) const;
|
||||
|
||||
//! Set remote aircraft provider
|
||||
void setRemoteAircraftProvider(IRemoteAircraftProvider *remoteAircraftProvider) { this->setProvider(remoteAircraftProvider); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user