swift
simulator.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_CORE_SIMULATOR_H
7 #define SWIFT_CORE_SIMULATOR_H
8 
9 #include <atomic>
10 
11 #include <QFlags>
12 #include <QObject>
13 #include <QString>
14 
15 #include "config/buildconfig.h"
16 #include "core/application.h"
17 #include "core/swiftcoreexport.h"
21 #include "misc/identifiable.h"
22 #include "misc/identifier.h"
24 #include "misc/pixmap.h"
25 #include "misc/pq/length.h"
26 #include "misc/pq/time.h"
40 #include "misc/statusmessage.h"
41 #include "misc/tokenbucket.h"
42 
43 namespace swift::misc::network
44 {
45  class CTextMessage;
46 }
47 
48 namespace swift::core
49 {
52  public QObject,
53  public swift::misc::simulation::COwnAircraftAware, // access to in memory own aircraft data
54  public swift::misc::simulation::CRemoteAircraftAware, // access to in memory remote aircraft data
55  public swift::misc::network::CClientAware, // the network client with its capabilities
56  public swift::misc::simulation::ISimulationEnvironmentProvider, // give access to elevation etc.
59  {
60  Q_OBJECT
63 
64  public:
67  {
68  Unspecified = 0,
69  Disconnected = 1 << 0,
70  Connected = 1 << 1,
71  Simulating = 1 << 2,
72  Paused = 1 << 3,
73  };
74  Q_DECLARE_FLAGS(SimulatorStatus, SimulatorStatusFlag)
75  Q_FLAG(SimulatorStatus)
76 
77 
78  static const QStringList &getLogCategories();
79 
81  ~ISimulator() override;
82 
84  virtual SimulatorStatus getSimulatorStatus() const;
85 
88  {
89  return m_simulatorInternals;
90  }
91 
93  virtual bool connectTo() = 0;
94 
96  virtual bool disconnectFrom();
97 
101  virtual bool logicallyAddRemoteAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft);
102 
105  virtual bool logicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign);
106 
110  virtual bool logicallyReAddRemoteAircraft(const swift::misc::aviation::CCallsign &callsign);
111 
114  int removeAllRemoteAircraft() { return this->physicallyRemoveAllRemoteAircraft(); }
115 
117  virtual bool changeRemoteAircraftModel(const swift::misc::simulation::CSimulatedAircraft &aircraft);
118 
120  virtual bool changeRemoteAircraftEnabled(const swift::misc::simulation::CSimulatedAircraft &aircraft);
121 
124  const swift::misc::CIdentifier &originator) = 0;
125 
128  const swift::misc::CIdentifier &originator) = 0;
129 
131  virtual void displayStatusMessage(const swift::misc::CStatusMessage &message) const = 0;
132 
134  virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const = 0;
135 
138  virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const = 0;
139 
143 
145  virtual bool followAircraft(const swift::misc::aviation::CCallsign &callsign);
146 
148  virtual void recalculateAllAircraft();
149 
153  virtual void setFlightNetworkConnected(bool connected);
154 
156  bool isFlightNetworkConnected() const { return m_networkConnected; }
157 
160  {
161  return m_multiSettings.getSpecializedSettings(this->getSimulatorInfo());
162  }
163 
165  virtual void unload();
166 
168  virtual bool isConnected() const = 0;
169 
171  virtual bool isPaused() const = 0;
172 
174  virtual bool isSimulating() const { return this->isConnected(); }
175 
177  void setTestMode(bool test) { m_test = test; }
178 
180  bool isTestMode() const { return m_test; }
181 
183  double getAverageFPS() const { return m_averageFps; }
184 
186  double getSimTimeRatio() const { return m_simTimeRatio; }
187 
189  double getTrackMilesShort() const { return m_trackMilesShort; }
190 
192  double getMinutesLate() const { return m_minutesLate; }
193 
197  const swift::misc::aviation::CAircraftParts &parts) = 0;
198 
200  void setTestEnablePseudoElevation(bool enable) { m_enablePseudoElevation = enable; }
201 
203  void setTestElevation(const swift::misc::aviation::CAltitude &altitude) { m_pseudoElevation = altitude; }
204 
207  virtual swift::misc::CStatusMessageList debugVerifyStateAfterAllAircraftRemoved() const;
208 
211  virtual bool isShuttingDown() const { return (!sApp || sApp->isShuttingDown()); }
212 
214  virtual bool isShuttingDownOrDisconnected() const { return (this->isShuttingDown() || !this->isConnected()); }
215 
218  {
219  return (this->isShuttingDownOrDisconnected() || this->getAircraftInRangeCount() < 1);
220  }
221 
223  virtual bool isShuttingDownDisconnectedOrNoAircraft(bool isProbe) const
224  {
225  return isProbe ? this->isShuttingDownOrDisconnected() :
226  (this->isShuttingDownOrDisconnected() || this->getAircraftInRangeCount() < 1);
227  }
228 
232  bool requestElevation(const swift::misc::geo::ICoordinateGeodetic &reference,
233  const swift::misc::aviation::CCallsign &callsign) override;
234 
237  {
238  return this->requestElevation(situation, situation.getCallsign());
239  }
240 
243  virtual void callbackReceivedRequestedElevation(const swift::misc::geo::CElevationPlane &plane,
244  const swift::misc::aviation::CCallsign &callsign, bool isWater);
245 
247  virtual QString getStatisticsSimulatorSpecific() const { return {}; }
248 
250  virtual void resetAircraftStatistics();
251 
253  QObject *asQObject() override { return this; }
254 
256  bool isEmulatedDriver() const;
257 
277  virtual bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator);
278 
282  getInterpolationSetupConsolidated(const swift::misc::aviation::CCallsign &callsign, bool forceFullUpdate) const;
283 
285  bool setInterpolationSetupGlobal(
287 
291 
293  const swift::misc::simulation::CAutoPublishData &getPublishData() const { return m_autoPublishing; }
294 
296  int getStatisticsPhysicallyAddedAircraft() const { return m_statsPhysicallyAddedAircraft; }
297 
299  int getStatisticsPhysicallyRemovedAircraft() const { return m_statsPhysicallyRemovedAircraft; }
300 
302  qint64 getStatisticsCurrentUpdateTimeMs() const { return m_statsCurrentUpdateTimeMs; }
303 
305  double getStatisticsAverageUpdateTimeMs() const { return m_statsUpdateAircraftTimeAvgMs; }
306 
308  qint64 getStatisticsTotalUpdateTimeMs() const { return m_statsUpdateAircraftTimeTotalMs; }
309 
311  qint64 getStatisticsMaxUpdateTimeMs() const { return m_statsMaxUpdateTimeMs; }
312 
314  int getStatisticsUpdateRuns() const { return m_statsUpdateAircraftRuns; }
315 
317  qint64 getStatisticsAircraftUpdatedRequestedDeltaMs() const { return m_statsUpdateAircraftRequestedDeltaMs; }
318 
321  getLoopbackSituations(const swift::misc::aviation::CCallsign &callsign) const;
322 
325  {
326  return m_interpolationLogger;
327  }
328 
331  QString latestLoggedDataFormatted(const swift::misc::aviation::CCallsign &cs) const;
332 
334  QString updateAircraftLimitationInfo() const;
335 
337  void resetLastSentValues();
338 
340  void resetLastSentValues(const swift::misc::aviation::CCallsign &callsign);
341 
343  static void registerHelp();
344 
346  static QString statusToString(SimulatorStatus status);
347 
349  static bool isAnyConnectedStatus(SimulatorStatus status);
350 
352  static const swift::misc::aviation::CCallsign &getTestCallsign();
353 
354  signals:
357  swift::core::ISimulator::SimulatorStatus status); // use emitSimulatorCombinedStatus to emit
358 
361 
363  void renderRestrictionsChanged(bool restricted, bool enabled, int maxAircraft,
364  const swift::misc::physical_quantities::CLength &maxRenderedDistance);
365 
368 
371 
374  bool disabled, bool requestFailover,
375  const swift::misc::CStatusMessage &message);
376 
379 
382 
385 
388  const swift::misc::aviation::CCallsign &callsign);
389 
392 
395 
396  protected:
400  swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider,
401  swift::misc::network::IClientProvider *clientProvider, QObject *parent = nullptr);
402 
405  virtual void onSwiftDbAllDataRead();
406  virtual void onSwiftDbModelMatchingEntitiesRead();
408 
410  virtual void initSimulatorInternals();
411 
413  virtual bool parseDetails(const swift::misc::CSimpleCommandParser &parser) = 0;
414 
416  virtual void onRecalculatedRenderedAircraft(const swift::misc::simulation::CAirspaceAircraftSnapshot &snapshot);
417 
421 
423  virtual bool physicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign) = 0;
424 
426  virtual int physicallyRemoveMultipleRemoteAircraft(const swift::misc::aviation::CCallsignSet &callsigns);
427 
429  virtual void clearAllRemoteAircraftData();
430 
434  virtual int physicallyRemoveAllRemoteAircraft();
435 
438  void rememberElevationAndSimulatorCG(const swift::misc::aviation::CCallsign &callsign,
440  bool likelyOnGroundElevation,
441  const swift::misc::geo::CElevationPlane &elevation,
442  const swift::misc::physical_quantities::CLength &simulatorCG);
443 
447  void emitSimulatorCombinedStatus(SimulatorStatus oldStatus = Unspecified);
448 
450  void emitInterpolationSetupChanged() override;
451 
454  void debugLogMessage(const QString &msg);
455 
458  void debugLogMessage(const QString &funcInfo, const QString &msg);
459 
461  bool showDebugLogMessage() const;
462 
464  void resetAircraftFromProvider(const swift::misc::aviation::CCallsign &callsign);
465 
467  virtual void clearData(const swift::misc::aviation::CCallsign &callsign);
468 
470  bool addLoopbackSituation(const swift::misc::aviation::CAircraftSituation &situation);
471 
473  bool addLoopbackSituation(const swift::misc::aviation::CCallsign &callsign,
474  const swift::misc::geo::CElevationPlane &elevationPlane,
476 
480  virtual void reset();
481 
483  bool isUpdateAllRemoteAircraft(qint64 currentTimestamp = -1) const;
484 
486  void setUpdateAllRemoteAircraft(qint64 currentTimestamp = -1, qint64 forMs = -1);
487 
489  void resetUpdateAllRemoteAircraft();
490 
492  void safeKillTimer();
493 
495  bool isEqualLastSent(const swift::misc::aviation::CAircraftSituation &compare) const;
496 
498  bool isEqualLastSent(const swift::misc::aviation::CAircraftParts &compare,
499  const swift::misc::aviation::CCallsign &callsign) const;
500 
502  void rememberLastSent(const swift::misc::aviation::CAircraftSituation &sent);
503 
505  void rememberLastSent(const swift::misc::aviation::CAircraftParts &sent,
506  const swift::misc::aviation::CCallsign &callsign);
507 
509  swift::misc::aviation::CAircraftSituationList getLastSentCanLikelySkipNearGroundInterpolation() const;
510 
512  bool isUpdateAircraftLimited(qint64 timestamp = -1);
513 
515  bool isUpdateAircraftLimitedWithStats(qint64 startTime = -1);
516 
518  bool limitToUpdatesPerSecond(int numberPerSecond);
519 
521  void reverseLookupAndUpdateOwnAircraftModel(const swift::misc::simulation::CAircraftModel &model);
522 
524  void reverseLookupAndUpdateOwnAircraftModel(const QString &modelString);
525 
527  QString getInvalidSituationLogMessage(const swift::misc::aviation::CCallsign &callsign,
529  const QString &details = {}) const;
530 
532  void finishUpdateRemoteAircraftAndSetStatistics(qint64 startTime, bool limited = false);
533 
535  virtual void onOwnModelChanged(const swift::misc::simulation::CAircraftModel &newModel);
536 
538  bool updateOwnSituationAndGroundElevation(const swift::misc::aviation::CAircraftSituation &situation);
539 
542 
544  bool validateModelOfAircraft(const swift::misc::simulation::CSimulatedAircraft &aircraft) const;
545 
547  void logAddingAircraftModel(const swift::misc::simulation::CSimulatedAircraft &aircraft) const;
548 
550  bool isAircraftInRangeOrTestMode(const swift::misc::aviation::CCallsign &callsign) const;
551 
554  reverseLookupModel(const swift::misc::simulation::CAircraftModel &model);
555 
556  bool m_updateRemoteAircraftInProgress = false;
557  bool m_enablePseudoElevation = false;
558  int m_timerId = -1;
559  int m_statsUpdateAircraftRuns = 0;
560  int m_statsUpdateAircraftLimited = 0;
561  double m_statsUpdateAircraftTimeAvgMs = 0;
562  double m_averageFps = -1.0;
563  double m_simTimeRatio = 1.0;
564  double m_trackMilesShort = 0.0;
565  double m_minutesLate = 0.0;
566  qint64 m_updateAllRemoteAircraftUntil = 0;
568  qint64 m_statsUpdateAircraftTimeTotalMs = 0;
569  qint64 m_statsCurrentUpdateTimeMs = 0;
570  qint64 m_statsMaxUpdateTimeMs = 0;
571  qint64 m_lastRecordedGndElevationMs = 0;
572  qint64 m_statsLastUpdateAircraftRequestedMs = 0;
573  qint64 m_statsUpdateAircraftRequestedDeltaMs = 0;
574 
577  };
584 
585  // some optional functionality which can be used by the simulators as needed
588 
589  // loopback situations, situations which are received from simulator for remote aircraft
591 
592  // limit the update aircraft to a maximum per second
593  swift::misc::CTokenBucket m_limitUpdateAircraftBucket { 5, 100, 5 };
594  bool m_limitUpdateAircraft = false;
595 
596  // general settings
598  this
599  };
600 
601  private:
602  // remote aircraft provider ("rap") bound
603  void rapOnRecalculatedRenderedAircraft(const swift::misc::simulation::CAirspaceAircraftSnapshot &snapshot);
604 
605  // call with counters updated
606  void callPhysicallyAddRemoteAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft);
607  void callPhysicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &remoteCallsign);
608 
610  void displayLoggedSituationInSimulator(const swift::misc::aviation::CCallsign &cs, bool stopLogging,
611  int times = 40);
612 
613  // statistics values of how often those functions are called
614  // those are the added counters, overflow will not be an issue here (discussed in T171 review)
615  int m_statsPhysicallyAddedAircraft = 0;
616  int m_statsPhysicallyRemovedAircraft = 0;
617 
618  // misc.
619  bool m_networkConnected = false;
620  bool m_test = false;
621  swift::misc::aviation::CCallsignSet m_callsignsToBeRendered;
622  swift::misc::CConnectionGuard m_remoteAircraftProviderConnections;
623  };
624 
629  class SWIFT_CORE_EXPORT ISimulatorListener : public QObject
630  {
631  Q_OBJECT
632 
633  public:
635  ~ISimulatorListener() override = default;
636 
639 
641  virtual QString backendInfo() const;
642 
644  bool isRunning() const { return m_isRunning; }
645 
646  public slots:
649  void start();
650 
653  void stop();
654 
657  void check();
658 
659  signals:
662 
663  protected:
667 
669  virtual bool isShuttingDown() const;
670 
672  virtual void startImpl() = 0;
673 
675  virtual void stopImpl() = 0;
676 
678  virtual void checkImpl() = 0;
679 
680  private:
682  void onAboutToShutdown();
683 
685  std::atomic_bool m_isRunning { false };
686  std::atomic_bool m_aboutToShutdown { false }; // swift will shutdown
687  };
688 
691  {
692  public:
694  virtual ~ISimulatorFactory() = default;
695 
701 
710  swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider,
711  swift::misc::network::IClientProvider *clientProvider) = 0;
712 
715 
716  protected:
719  };
720 } // namespace swift::core
721 
723 Q_DECLARE_METATYPE(swift::core::ISimulator::SimulatorStatus)
724 Q_DECLARE_INTERFACE(swift::core::ISimulator, "org.swift-project.swift_core.simulator")
725 Q_DECLARE_INTERFACE(swift::core::ISimulatorFactory, "org.swift-project.swift_core.simulatorfactory")
726 Q_DECLARE_OPERATORS_FOR_FLAGS(swift::core::ISimulator::SimulatorStatus)
727 
728 #endif // SWIFT_CORE_SIMULATOR_H
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
Definition: application.cpp:71
bool isShuttingDown() const
Is application shutting down?
Factory pattern class to create instances of ISimulator.
Definition: simulator.h:691
ISimulatorFactory & operator=(const ISimulatorFactory &)=delete
Not copyable.
virtual ISimulator * create(const swift::misc::simulation::CSimulatorPluginInfo &info, swift::misc::simulation::IOwnAircraftProvider *ownAircraftProvider, swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider, swift::misc::network::IClientProvider *clientProvider)=0
Create a new instance of a driver.
ISimulatorFactory()
Default ctor.
Definition: simulator.h:718
virtual ISimulatorListener * createListener(const swift::misc::simulation::CSimulatorPluginInfo &info)=0
Simulator listener instance.
virtual ~ISimulatorFactory()=default
ISimulatorVirtual destructor.
ISimulatorFactory(const ISimulatorFactory &)=delete
Not copyable.
Interface to a simulator.
Definition: simulator.h:59
QObject * asQObject()
Return as QObject.
Definition: simulator.h:253
double getStatisticsAverageUpdateTimeMs() const
Average update time in ms.
Definition: simulator.h:305
virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const =0
Is the aircraft rendered (displayed in simulator)? This shall only return true if the aircraft is rea...
double getTrackMilesShort() const
Number of track miles over-reported, due to low FPS.
Definition: simulator.h:189
virtual bool connectTo()=0
Connect to simulator.
virtual bool updateOwnSimulatorCockpit(const swift::misc::simulation::CSimulatedAircraft &aircraft, const swift::misc::CIdentifier &originator)=0
Update own aircraft cockpit (usually from context)
void renderRestrictionsChanged(bool restricted, bool enabled, int maxAircraft, const swift::misc::physical_quantities::CLength &maxRenderedDistance)
Render restrictions have been changed.
virtual bool updateOwnSimulatorSelcal(const swift::misc::aviation::CSelcal &selcal, const swift::misc::CIdentifier &originator)=0
Update own aircraft cockpit (usually from context)
bool requestElevation(const swift::misc::aviation::CAircraftSituation &situation)
Request elevation, there is no guarantee the requested elevation will be available in the provider.
Definition: simulator.h:236
double getSimTimeRatio() const
Ratio of simulation time to real time, due to low FPS.
Definition: simulator.h:186
virtual bool isShuttingDown() const
Is overall (swift) application shutting down.
Definition: simulator.h:211
int getStatisticsPhysicallyAddedAircraft() const
Counter added aircraft.
Definition: simulator.h:296
void setTestMode(bool test)
Set test mode (driver can skip code parts etc., driver dependent)
Definition: simulator.h:177
virtual swift::misc::CStatusMessageList getInterpolationMessages(const swift::misc::aviation::CCallsign &callsign) const =0
Interpolation messages for callsign.
virtual bool isPaused() const =0
Simulator paused?
void requestedElevation(const swift::misc::aviation::CCallsign &callsign)
Requested elevation, call pending.
virtual swift::misc::aviation::CCallsignSet physicallyRenderedAircraft() const =0
Physically rendered (displayed in simulator) This shall only return aircraft handled in the simulator...
virtual bool isShuttingDownDisconnectedOrNoAircraft() const
Shutting down, disconnected, or no remote aircraft.
Definition: simulator.h:217
void physicallyAddingRemoteModelFailed(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft, bool disabled, bool requestFailover, const swift::misc::CStatusMessage &message)
Adding the remote model failed.
virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const =0
Display a text message.
virtual QString getStatisticsSimulatorSpecific() const
Allows to print out simulator specific statistics.
Definition: simulator.h:247
void ownAircraftModelChanged(const swift::misc::simulation::CAircraftModel &model)
Emitted when own aircraft model has changed.
void simulatorStatusChanged(swift::core::ISimulator::SimulatorStatus status)
Simulator combined status.
void insufficientFrameRateDetected(bool fatal)
Frame rate has fallen too far below the threshold to maintain consistent sim rate.
virtual bool physicallyAddRemoteAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft)=0
Add new remote aircraft physically to the simulator.
swift::misc::aviation::CAircraftPartsPerCallsign m_lastSentParts
last parts sent to simulator
Definition: simulator.h:583
int getStatisticsUpdateRuns() const
Number of update runs.
Definition: simulator.h:314
swift::misc::simulation::CAutoPublishData m_autoPublishing
for the DB
Definition: simulator.h:580
qint64 getStatisticsTotalUpdateTimeMs() const
Total update time in ms.
Definition: simulator.h:308
double getAverageFPS() const
Average FPS (frames per second)
Definition: simulator.h:183
virtual void displayStatusMessage(const swift::misc::CStatusMessage &message) const =0
Display a status message in the simulator.
bool isTestMode() const
Test mode? (driver can skip code parts etc., driver dependent)
Definition: simulator.h:180
void receivedRequestedElevation(const swift::misc::geo::CElevationPlane &plane, const swift::misc::aviation::CCallsign &callsign)
A requested elevation has been received.
swift::misc::simulation::CSimulatedAircraftList m_addAgainAircraftWhenRemoved
add this model again when removed, normally used to change model
Definition: simulator.h:587
void setTestEnablePseudoElevation(bool enable)
Enable pseudo elevations (testing)
Definition: simulator.h:200
swift::misc::simulation::CSimulatorInternals m_simulatorInternals
setup read from the sim
Definition: simulator.h:578
void autoPublishDataWritten(const swift::misc::simulation::CSimulatorInfo &simulator)
Auto publish data written for simulator.
int removeAllRemoteAircraft()
Public version to remove all aircraft.
Definition: simulator.h:114
void airspaceSnapshotHandled()
An airspace snapshot was handled.
SimulatorStatusFlag
ISimulator status.
Definition: simulator.h:67
qint64 getStatisticsAircraftUpdatedRequestedDeltaMs() const
Time between two update requests.
Definition: simulator.h:317
swift::misc::simulation::settings::CSpecializedSimulatorSettings getSimulatorSettings() const
Settings for current simulator.
Definition: simulator.h:159
swift::misc::simulation::CInterpolationLogger m_interpolationLogger
log.interpolation
Definition: simulator.h:579
void aircraftRenderingChanged(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Aircraft rendering changed.
swift::misc::aviation::CAircraftSituationListPerCallsign m_loopbackSituations
traced loopback situations
Definition: simulator.h:590
bool isFlightNetworkConnected() const
Is the flight network connected.
Definition: simulator.h:156
virtual bool isShuttingDownOrDisconnected() const
Shutting down or disconnected?
Definition: simulator.h:214
void setTestElevation(const swift::misc::aviation::CAltitude &altitude)
Set an elevation for testing.
Definition: simulator.h:203
void driverMessages(const swift::misc::CStatusMessageList &messages)
Relevant simulator messages to be explicitly displayed.
const swift::misc::simulation::CAutoPublishData & getPublishData() const
Get the data for auto publishing.
Definition: simulator.h:293
qint64 getStatisticsMaxUpdateTimeMs() const
Max.update time in ms.
Definition: simulator.h:311
qint64 getStatisticsCurrentUpdateTimeMs() const
Current update time in ms.
Definition: simulator.h:302
const swift::misc::simulation::CInterpolationLogger & interpolationLogger() const
Access to logger.
Definition: simulator.h:324
virtual bool isSimulating() const
Simulator running?
Definition: simulator.h:174
virtual bool isConnected() const =0
Are we connected to the simulator?
virtual bool parseDetails(const swift::misc::CSimpleCommandParser &parser)=0
Parsed in derived classes.
virtual bool testSendSituationAndParts(const swift::misc::aviation::CCallsign &callsign, const swift::misc::aviation::CAircraftSituation &situation, const swift::misc::aviation::CAircraftParts &parts)=0
Send situation/parts for testing.
int getStatisticsPhysicallyRemovedAircraft() const
Counter removed aircraft.
Definition: simulator.h:299
swift::misc::aviation::CAircraftSituationPerCallsign m_lastSentSituations
last situations sent to simulator
Definition: simulator.h:582
void interpolationAndRenderingSetupChanged()
Interpolation or rendering setup changed.
virtual const swift::misc::simulation::CSimulatorInternals & getSimulatorInternals() const
Get the simulator current internal state.
Definition: simulator.h:87
virtual bool isShuttingDownDisconnectedOrNoAircraft(bool isProbe) const
Shutting down, disconnected, or no remote aircraft.
Definition: simulator.h:223
double getMinutesLate() const
Number of minutes behind schedule, due to low FPS.
Definition: simulator.h:192
Interface to a simulator listener.
Definition: simulator.h:630
virtual void startImpl()=0
Plugin specific implementation to start listener.
const swift::misc::simulation::CSimulatorPluginInfo & getPluginInfo() const
Corresponding info.
Definition: simulator.h:638
void simulatorStarted(const swift::misc::simulation::CSimulatorPluginInfo &info)
Emitted when the listener discovers the simulator running.
~ISimulatorListener()=default
Destructor.
virtual void checkImpl()=0
Plugin specific implementation to check.
virtual void stopImpl()=0
Plugin specific implementation to stop listener.
bool isRunning() const
Running?
Definition: simulator.h:644
List of QMetaObject::Connection.
Base class with a member CIdentifier to be inherited by a class which has an identity in the environm...
Definition: identifiable.h:24
Value object encapsulating information identifying a component of a modular distributed swift process...
Definition: identifier.h:29
Utility methods for simple line parsing used with the command line.
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
Token bucket algorithm.
Definition: tokenbucket.h:21
Value object encapsulating information of aircraft's parts.
Definition: aircraftparts.h:26
Value object encapsulating information of an aircraft's situation.
const CCallsign & getCallsign() const
Corresponding callsign.
Altitude as used in aviation, can be AGL or MSL altitude.
Definition: altitude.h:52
static const CAltitude & null()
Null altitude (MSL)
Definition: altitude.cpp:439
Value object encapsulating information of a callsign.
Definition: callsign.h:30
Value object for a set of callsigns.
Definition: callsignset.h:26
Value object for SELCAL.
Definition: selcal.h:31
Plane of same elevation, can be a single point or larger area (e.g. airport)
Geodetic coordinate, a position in 3D space relative to the reference geoid.
Class which can be directly used to access an.
Value object encapsulating information of a text message.
Definition: textmessage.h:31
Direct in memory access to client (network client) data.
Physical unit length (length)
Definition: length.h:18
Aircraft model (used by another pilot, my models on disk)
Definition: aircraftmodel.h:71
Value object encapsulating a list of aircraft models.
Objects that can be use for auto-publishing. Auto publishing means we sent those data to the DB.
Value object for interpolator and rendering per callsign.
Record internal state of interpolator for debugging.
Delegating class which can be directly used to access an.
Class which can be directly used to access an.
Comprehensive information of an aircraft.
Value object encapsulating a list of aircraft.
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
Simulator internals for flight simulators. Those are obtained from a running simulator and represent ...
Direct in memory access to interpolation setup, normally implemented by simulator.
Direct threadsafe in memory access to own aircraft.
Direct thread safe in memory access to remote aircraft.
Allows to have specific utility functions for each simulator.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
#define SWIFT_CORE_EXPORT
Export a class or function from the library.