6 #ifndef SWIFT_MISC_SIMULATION_REMOTEAIRCRAFTPROVIDER_H
7 #define SWIFT_MISC_SIMULATION_REMOTEAIRCRAFTPROVIDER_H
12 #include <QJsonObject>
14 #include <QMetaObject>
16 #include <QReadWriteLock>
36 class CElevationPlane;
47 static constexpr
int MaxSituationsPerCallsign = 50;
48 static constexpr
int MaxPartsPerCallsign = 50;
49 static constexpr
int MaxPartsAgePerCallsignSecs = 60;
108 int index)
const = 0;
165 bool enabledForRendering) = 0;
170 bool enabledForRendering) = 0;
197 bool enableFastPositonUpdates) = 0;
204 bool *updateAircraftGroundElevation) = 0;
276 int sufficientValues = 2)
const = 0;
302 namespace swift::misc::simulation
315 static const QStringList &getLogCategories();
325 virtual int getAircraftInRangeCount()
const override;
331 int index)
const override;
333 remoteAircraftSituationsTimestampDifferenceMinMaxMean(
const aviation::CCallsign &callsign)
const override;
336 virtual int remoteAircraftSituationsCount(
const aviation::CCallsign &callsign)
const override;
339 virtual bool isRemoteAircraftSupportingParts(
const aviation::CCallsign &callsign)
const override;
340 virtual int getRemoteAircraftSupportingPartsCount()
const override;
344 virtual int remoteAircraftSituationChangesCount(
const aviation::CCallsign &callsign)
const override;
345 virtual bool updateAircraftEnabled(
const aviation::CCallsign &callsign,
bool enabledForRendering)
override;
347 bool enabledForRendering)
override;
349 bool enabledForRendering)
override;
355 bool enableFastPositonUpdates)
override;
356 virtual bool updateAircraftRendered(
const aviation::CCallsign &callsign,
bool rendered)
override;
357 virtual int updateMultipleAircraftRendered(
const aviation::CCallsignSet &callsigns,
bool rendered)
override;
361 bool *setForOnGroundPosition)
override;
364 const QString &modelString)
override;
372 const QString &modelString)
override;
373 virtual void updateMarkAllAsNotRendered()
override;
375 virtual bool isAircraftPartsHistoryEnabled()
const override;
376 virtual void enableAircraftPartsHistory(
bool enabled)
override;
377 virtual int aircraftSituationsAdded()
const override;
378 virtual int aircraftPartsAdded()
const override;
384 int sufficientValues = 2)
const override;
385 virtual QList<QMetaObject::Connection> connectRemoteAircraftProviderSignals(
391 virtual void enableReverseLookupMessages(ReverseLookupLogging enable)
override;
392 virtual ReverseLookupLogging isReverseLookupMessagesEnabled()
const override;
418 bool hasTestAltitudeOffsetGlobalValue()
const;
450 void removeAllAircraft();
463 const QString &airlineIcao,
const QString &livery,
470 bool skipEqualValues =
true);
484 bool allowTestAltitudeOffset =
true);
491 bool removeOutdated);
492 void storeAircraftParts(
const aviation::CCallsign &callsign,
const QJsonObject &jsonObject,
493 qint64 currentOffsetMs);
508 ReverseLookupLogging whatToReverseLog()
const;
517 bool *setForOnGroundPosition);
526 m_situationsByCallsign;
528 m_latestSituationByCallsign;
531 m_latestOnGroundProviderElevation;
538 int m_situationsAdded = 0;
539 int m_partsAdded = 0;
541 ReverseLookupLogging m_enableReverseLookupMsgs =
542 RevLogSimplifiedInfo;
552 bool m_enableAircraftPartsHistory =
true;
555 mutable QReadWriteLock m_lockSituations;
556 mutable QReadWriteLock m_lockParts;
557 mutable QReadWriteLock m_lockChanges;
558 mutable QReadWriteLock m_lockAircraft;
559 mutable QReadWriteLock m_lockMessages;
560 mutable QReadWriteLock m_lockPartsHistory;
580 int getAircraftInRangeCount()
const;
626 int getRemoteAircraftSupportingPartsCount()
const;
632 bool setAircraftEnabledFlag(
const aviation::CCallsign &callsign,
bool enabledForRendering);
654 bool *updateAircraftGroundElevation);
664 const QString &modelString);
667 void updateMarkAllAsNotRendered();
670 int aircraftSituationsAdded()
const;
673 int aircraftPartsAdded()
const;
684 int minValues = 1)
const;
689 this->setProvider(remoteAircraftProvider);
702 Q_ASSERT(remoteAircraftProvider);
Base class with a member CIdentifier to be inherited by a class which has an identity in the environm...
Value object encapsulating information identifying a component of a modular distributed swift process...
Specialized value object compliant map for variants, based on indexes.
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
Base class of provider aware classes.
Base class for providers.
Value object encapsulating information of aircraft's parts.
Value object encapsulating a list of aircraft parts.
Value object about changes in situations.
Value object encapsulating a list of aircraft parts.
Value object encapsulating information of an aircraft's situation.
GndElevationInfo
Where did we get elevation from?
List of aircraft situations.
Value object encapsulating information of a callsign.
Value object for a set of callsigns.
Plane of same elevation, can be a single point or larger area (e.g. airport)
Physical unit angle (radians, degrees)
Physical unit length (length)
Aircraft model (used by another pilot, my models on disk)
Current situation in the skies analyzed.
Class which can be directly used to access an.
CRemoteAircraftAware(IRemoteAircraftProvider *remoteAircraftProvider)
Constructor.
CRemoteAircraftAware()
Default constructor.
IRemoteAircraftProvider * getRemoteAircraftProvider() const
Get the aircraft provider.
void setRemoteAircraftProvider(IRemoteAircraftProvider *remoteAircraftProvider)
Set remote aircraft provider.
Implementaion of the interface, which can also be used for testing.
void changedAircraftInRange()
Aircraft were changed.
CSimulatedAircraft addOrUpdateAircraftInRange(const aviation::CCallsign &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery, const QString &modelString, CAircraftModel::ModelType modelType, CStatusMessageList *log=nullptr)
Init a new aircraft and add it or update model of existing aircraft.
void addedAircraftParts(const swift::misc::aviation::CCallsign &callsign, const swift::misc::aviation::CAircraftParts &parts)
Parts added.
void addedAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft)
A new aircraft appeared.
void airspaceAircraftSnapshot(const swift::misc::simulation::CAirspaceAircraftSnapshot &snapshot)
New aircraft snapshot.
void addedAircraftSituation(const swift::misc::aviation::CAircraftSituation &situation)
Situation added.
virtual QObject * asQObject()
Return as QObject.
void removedAircraft(const swift::misc::aviation::CCallsign &callsign)
An aircraft disappeared.
Comprehensive information of an aircraft.
Value object encapsulating a list of aircraft.
Direct thread safe in memory access to remote aircraft.
virtual bool isAircraftPartsHistoryEnabled() const =0
Is storing aircraft parts history enabled?
IRemoteAircraftProvider(const IRemoteAircraftProvider &)=delete
Copy constructor.
virtual int aircraftPartsAdded() const =0
Number of parts added.
virtual bool setAircraftEnabledFlag(const swift::misc::aviation::CCallsign &callsign, bool enabledForRendering)=0
Just set enable/disable aircraft flag, no further logic.
virtual bool isRemoteAircraftSupportingParts(const aviation::CCallsign &callsign) const =0
Is remote aircraft supporting parts?
virtual aviation::CAircraftSituation remoteAircraftSituation(const aviation::CCallsign &callsign, int index) const =0
Rendered aircraft situations (per callsign and index)
virtual bool updateCGAndModelString(const aviation::CCallsign &callsign, const physical_quantities::CLength &cg, const QString &modelString)=0
Update the CG and model string.
virtual bool updateAircraftEnabled(const aviation::CCallsign &callsign, bool enabledForRendering)=0
Enable/disable aircraft and follow up logic like sending signals.
virtual void updateMarkAllAsNotRendered()=0
Mark all as not rendered.
virtual geo::CElevationPlane averageElevationOfNonMovingAircraft(const aviation::CAircraftSituation &reference, const physical_quantities::CLength &range, int minValues=1, int sufficientValues=2) const =0
Average elevation of aircraft in given range, which are NOT moving.
virtual bool updateAircraftNetworkModel(const aviation::CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)=0
Change network model.
virtual bool updateFastPositionEnabled(const aviation::CCallsign &callsign, bool enableFastPositonUpdates)=0
Change fast position updates.
IRemoteAircraftProvider & operator=(const IRemoteAircraftProvider &)=delete
Copy assignment operator.
virtual aviation::CAircraftSituationList latestRemoteAircraftSituations() const =0
Latest aircraft situation for all callsigns.
virtual aviation::CCallsignSet getAircraftInRangeCallsigns() const =0
Unique callsigns for aircraft in range.
virtual CAircraftModel getAircraftInRangeModelForCallsign(const aviation::CCallsign &callsign) const =0
Aircraft model for callsign.
virtual int updateMultipleAircraftRendered(const aviation::CCallsignSet &callsigns, bool rendered)=0
Set aircraft rendered.
virtual physical_quantities::CLength getCGFromDB(const QString &modelString) const =0
CG values from DB.
virtual int remoteAircraftSituationsCount(const aviation::CCallsign &callsign) const =0
Number of remote aircraft situations for callsign.
virtual bool updateAircraftRendered(const aviation::CCallsign &callsign, bool rendered)=0
Set aircraft rendered.
virtual void rememberCGFromDB(const physical_quantities::CLength &cgFromDB, const QString &modelString)=0
CG values from DB.
virtual CStatusMessageList getReverseLookupMessages(const aviation::CCallsign &callsign) const =0
Get reverse lookup meesages.
virtual qint64 partsLastModified(const aviation::CCallsign &callsign) const =0
When last modified.
virtual void enableReverseLookupMessages(ReverseLookupLogging enable)=0
Enable reverse lookup logging.
virtual int getAircraftInRangeCount() const =0
Count remote aircraft.
virtual QList< QMetaObject::Connection > connectRemoteAircraftProviderSignals(QObject *receiver, std::function< void(const aviation::CAircraftSituation &)> addedSituationSlot, std::function< void(const aviation::CCallsign &, const aviation::CAircraftParts &)> addedPartsSlot, std::function< void(const aviation::CCallsign &)> removedAircraftSlot, std::function< void(const CAirspaceAircraftSnapshot &)> aircraftSnapshot)=0
Connect signals to slot receiver. As the interface is no QObject, slots can not be connected directly...
virtual aviation::CCallsignSet remoteAircraftSupportingParts() const =0
Remote aircraft supporting parts.
virtual aviation::CAircraftSituationList remoteAircraftSituations(const aviation::CCallsign &callsign) const =0
Rendered aircraft situations (per callsign, time history)
virtual ReverseLookupLogging isReverseLookupMessagesEnabled() const =0
Enabled reverse lookup logging?
virtual int updateMultipleAircraftEnabled(const aviation::CCallsignSet &callsigns, bool enabledForRendering)=0
Enable/disable aircraft.
virtual physical_quantities::CLength getCGFromDB(const aviation::CCallsign &callsign) const =0
CG values from DB.
virtual aviation::CAircraftSituationChangeList remoteAircraftSituationChanges(const aviation::CCallsign &callsign) const =0
Aircraft changes.
virtual CAirspaceAircraftSnapshot getLatestAirspaceAircraftSnapshot() const =0
Current snapshot.
virtual bool updateAircraftModel(const aviation::CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)=0
Change model.
virtual CSimulatedAircraftList getAircraftInRange() const =0
All remote aircraft.
virtual CStatusMessageList getAircraftPartsHistory(const aviation::CCallsign &callsign) const =0
Get aircraft parts history.
virtual int getRemoteAircraftSupportingPartsCount() const =0
Number of aircraft supporting parts.
virtual int remoteAircraftPartsCount(const aviation::CCallsign &callsign) const =0
All parts (per callsign, time history)
virtual int aircraftSituationsAdded() const =0
Number of situations added.
virtual bool isVtolAircraft(const aviation::CCallsign &callsign) const =0
Is VTOL aircraft?
virtual int updateAircraftGroundElevation(const aviation::CCallsign &callsign, const geo::CElevationPlane &elevation, aviation::CAircraftSituation::GndElevationInfo info, bool *updateAircraftGroundElevation)=0
Update the ground elevation.
virtual void enableAircraftPartsHistory(bool enabled)=0
Enable storing of aircraft parts history.
virtual qint64 situationsLastModified(const aviation::CCallsign &callsign) const =0
When last modified.
virtual aviation::CAircraftPartsList remoteAircraftParts(const aviation::CCallsign &callsign) const =0
All parts (per callsign, time history)
virtual CSimulatedAircraft getAircraftInRangeForCallsign(const aviation::CCallsign &callsign) const =0
Aircraft for callsign.
virtual aviation::CCallsignSet updateCGForModel(const QString &modelString, const physical_quantities::CLength &cg)=0
Update the CG for this model string.
virtual int remoteAircraftSituationChangesCount(const aviation::CCallsign &callsign) const =0
Aircraft changes count.
virtual void rememberCGFromDB(const physical_quantities::CLength &cgFromDB, const aviation::CCallsign &callsign)=0
CG values from DB.
virtual aviation::CAircraftSituationList latestOnGroundProviderElevations() const =0
Latest aircraft situation "on ground" having a provider elevation.
virtual bool updateCG(const aviation::CCallsign &callsign, const physical_quantities::CLength &cg)=0
Update the CG.
virtual MillisecondsMinMaxMean remoteAircraftSituationsTimestampDifferenceMinMaxMean(const aviation::CCallsign &callsign) const =0
Average update time.
virtual bool isAircraftInRange(const aviation::CCallsign &callsign) const =0
Is aircraft in range?
Free functions in swift::misc.
StatusSeverity
Status severities.
Milliseconds minimum/maximum/mean.
#define SWIFT_MISC_EXPORT
Export a class or function from the library.