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  virtual void setOwnCallsign(const swift::misc::aviation::CCallsign &callsign);
157 
159  bool isFlightNetworkConnected() const { return m_networkConnected; }
160 
163  {
164  return m_multiSettings.getSpecializedSettings(this->getSimulatorInfo());
165  }
166 
168  virtual void unload();
169 
171  virtual bool isConnected() const = 0;
172 
174  virtual bool isPaused() const = 0;
175 
177  virtual bool isSimulating() const { return this->isConnected(); }
178 
180  void setTestMode(bool test) { m_test = test; }
181 
183  bool isTestMode() const { return m_test; }
184 
186  double getAverageFPS() const { return m_averageFps; }
187 
189  double getSimTimeRatio() const { return m_simTimeRatio; }
190 
192  double getTrackMilesShort() const { return m_trackMilesShort; }
193 
195  double getMinutesLate() const { return m_minutesLate; }
196 
200  const swift::misc::aviation::CAircraftParts &parts) = 0;
201 
203  void setTestEnablePseudoElevation(bool enable) { m_enablePseudoElevation = enable; }
204 
206  void setTestElevation(const swift::misc::aviation::CAltitude &altitude) { m_pseudoElevation = altitude; }
207 
210  virtual swift::misc::CStatusMessageList debugVerifyStateAfterAllAircraftRemoved() const;
211 
214  virtual bool isShuttingDown() const { return (!sApp || sApp->isShuttingDown()); }
215 
217  virtual bool isShuttingDownOrDisconnected() const { return (this->isShuttingDown() || !this->isConnected()); }
218 
221  {
222  return (this->isShuttingDownOrDisconnected() || this->getAircraftInRangeCount() < 1);
223  }
224 
226  virtual bool isShuttingDownDisconnectedOrNoAircraft(bool isProbe) const
227  {
228  return isProbe ? this->isShuttingDownOrDisconnected() :
229  (this->isShuttingDownOrDisconnected() || this->getAircraftInRangeCount() < 1);
230  }
231 
235  bool requestElevation(const swift::misc::geo::ICoordinateGeodetic &reference,
236  const swift::misc::aviation::CCallsign &callsign) override;
237 
240  {
241  return this->requestElevation(situation, situation.getCallsign());
242  }
243 
246  virtual void callbackReceivedRequestedElevation(const swift::misc::geo::CElevationPlane &plane,
247  const swift::misc::aviation::CCallsign &callsign, bool isWater);
248 
250  virtual QString getStatisticsSimulatorSpecific() const { return {}; }
251 
253  virtual void resetAircraftStatistics();
254 
256  QObject *asQObject() override { return this; }
257 
259  bool isEmulatedDriver() const;
260 
280  virtual bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator);
281 
285  getInterpolationSetupConsolidated(const swift::misc::aviation::CCallsign &callsign, bool forceFullUpdate) const;
286 
288  bool setInterpolationSetupGlobal(
290 
294 
296  const swift::misc::simulation::CAutoPublishData &getPublishData() const { return m_autoPublishing; }
297 
299  int getStatisticsPhysicallyAddedAircraft() const { return m_statsPhysicallyAddedAircraft; }
300 
302  int getStatisticsPhysicallyRemovedAircraft() const { return m_statsPhysicallyRemovedAircraft; }
303 
305  qint64 getStatisticsCurrentUpdateTimeMs() const { return m_statsCurrentUpdateTimeMs; }
306 
308  double getStatisticsAverageUpdateTimeMs() const { return m_statsUpdateAircraftTimeAvgMs; }
309 
311  qint64 getStatisticsTotalUpdateTimeMs() const { return m_statsUpdateAircraftTimeTotalMs; }
312 
314  qint64 getStatisticsMaxUpdateTimeMs() const { return m_statsMaxUpdateTimeMs; }
315 
317  int getStatisticsUpdateRuns() const { return m_statsUpdateAircraftRuns; }
318 
320  qint64 getStatisticsAircraftUpdatedRequestedDeltaMs() const { return m_statsUpdateAircraftRequestedDeltaMs; }
321 
324  getLoopbackSituations(const swift::misc::aviation::CCallsign &callsign) const;
325 
328  {
329  return m_interpolationLogger;
330  }
331 
334  QString latestLoggedDataFormatted(const swift::misc::aviation::CCallsign &cs) const;
335 
337  QString updateAircraftLimitationInfo() const;
338 
340  void resetLastSentValues();
341 
343  void resetLastSentValues(const swift::misc::aviation::CCallsign &callsign);
344 
346  static void registerHelp();
347 
349  static QString statusToString(SimulatorStatus status);
350 
352  static bool isAnyConnectedStatus(SimulatorStatus status);
353 
355  static const swift::misc::aviation::CCallsign &getTestCallsign();
356 
357  signals:
360  swift::core::ISimulator::SimulatorStatus status); // use emitSimulatorCombinedStatus to emit
361 
364 
366  void renderRestrictionsChanged(bool restricted, bool enabled, int maxAircraft,
367  const swift::misc::physical_quantities::CLength &maxRenderedDistance);
368 
371 
374 
377  bool disabled, bool requestFailover,
378  const swift::misc::CStatusMessage &message);
379 
382 
385 
388 
391  const swift::misc::aviation::CCallsign &callsign);
392 
395 
398 
399  protected:
403  swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider,
404  swift::misc::network::IClientProvider *clientProvider, QObject *parent = nullptr);
405 
408  virtual void onSwiftDbAllDataRead();
409  virtual void onSwiftDbModelMatchingEntitiesRead();
411 
413  virtual void initSimulatorInternals();
414 
416  virtual bool parseDetails(const swift::misc::CSimpleCommandParser &parser) = 0;
417 
419  virtual void onRecalculatedRenderedAircraft(const swift::misc::simulation::CAirspaceAircraftSnapshot &snapshot);
420 
424 
426  virtual bool physicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign) = 0;
427 
429  virtual int physicallyRemoveMultipleRemoteAircraft(const swift::misc::aviation::CCallsignSet &callsigns);
430 
432  virtual void clearAllRemoteAircraftData();
433 
437  virtual int physicallyRemoveAllRemoteAircraft();
438 
441  void rememberElevationAndSimulatorCG(const swift::misc::aviation::CCallsign &callsign,
443  bool likelyOnGroundElevation,
444  const swift::misc::geo::CElevationPlane &elevation,
445  const swift::misc::physical_quantities::CLength &simulatorCG);
446 
450  void emitSimulatorCombinedStatus(SimulatorStatus oldStatus = Unspecified);
451 
453  void emitInterpolationSetupChanged() override;
454 
457  void debugLogMessage(const QString &msg);
458 
461  void debugLogMessage(const QString &funcInfo, const QString &msg);
462 
464  bool showDebugLogMessage() const;
465 
467  void resetAircraftFromProvider(const swift::misc::aviation::CCallsign &callsign);
468 
470  virtual void clearData(const swift::misc::aviation::CCallsign &callsign);
471 
473  bool addLoopbackSituation(const swift::misc::aviation::CAircraftSituation &situation);
474 
476  bool addLoopbackSituation(const swift::misc::aviation::CCallsign &callsign,
477  const swift::misc::geo::CElevationPlane &elevationPlane,
479 
483  virtual void reset();
484 
486  bool isUpdateAllRemoteAircraft(qint64 currentTimestamp = -1) const;
487 
489  void setUpdateAllRemoteAircraft(qint64 currentTimestamp = -1, qint64 forMs = -1);
490 
492  void resetUpdateAllRemoteAircraft();
493 
495  void safeKillTimer();
496 
498  bool isEqualLastSent(const swift::misc::aviation::CAircraftSituation &compare) const;
499 
501  bool isEqualLastSent(const swift::misc::aviation::CAircraftParts &compare,
502  const swift::misc::aviation::CCallsign &callsign) const;
503 
505  void rememberLastSent(const swift::misc::aviation::CAircraftSituation &sent);
506 
508  void rememberLastSent(const swift::misc::aviation::CAircraftParts &sent,
509  const swift::misc::aviation::CCallsign &callsign);
510 
512  swift::misc::aviation::CAircraftSituationList getLastSentCanLikelySkipNearGroundInterpolation() const;
513 
515  bool isUpdateAircraftLimited(qint64 timestamp = -1);
516 
518  bool isUpdateAircraftLimitedWithStats(qint64 startTime = -1);
519 
521  bool limitToUpdatesPerSecond(int numberPerSecond);
522 
524  void reverseLookupAndUpdateOwnAircraftModel(const swift::misc::simulation::CAircraftModel &model);
525 
527  void reverseLookupAndUpdateOwnAircraftModel(const QString &modelString);
528 
530  QString getInvalidSituationLogMessage(const swift::misc::aviation::CCallsign &callsign,
532  const QString &details = {}) const;
533 
535  void finishUpdateRemoteAircraftAndSetStatistics(qint64 startTime, bool limited = false);
536 
538  virtual void onOwnModelChanged(const swift::misc::simulation::CAircraftModel &newModel);
539 
541  bool updateOwnSituationAndGroundElevation(const swift::misc::aviation::CAircraftSituation &situation);
542 
545 
547  bool validateModelOfAircraft(const swift::misc::simulation::CSimulatedAircraft &aircraft) const;
548 
550  void logAddingAircraftModel(const swift::misc::simulation::CSimulatedAircraft &aircraft) const;
551 
553  bool isAircraftInRangeOrTestMode(const swift::misc::aviation::CCallsign &callsign) const;
554 
557  reverseLookupModel(const swift::misc::simulation::CAircraftModel &model);
558 
559  bool m_updateRemoteAircraftInProgress = false;
560  bool m_enablePseudoElevation = false;
561  int m_timerId = -1;
562  int m_statsUpdateAircraftRuns = 0;
563  int m_statsUpdateAircraftLimited = 0;
564  double m_statsUpdateAircraftTimeAvgMs = 0;
565  double m_averageFps = -1.0;
566  double m_simTimeRatio = 1.0;
567  double m_trackMilesShort = 0.0;
568  double m_minutesLate = 0.0;
569  qint64 m_updateAllRemoteAircraftUntil = 0;
571  qint64 m_statsUpdateAircraftTimeTotalMs = 0;
572  qint64 m_statsCurrentUpdateTimeMs = 0;
573  qint64 m_statsMaxUpdateTimeMs = 0;
574  qint64 m_lastRecordedGndElevationMs = 0;
575  qint64 m_statsLastUpdateAircraftRequestedMs = 0;
576  qint64 m_statsUpdateAircraftRequestedDeltaMs = 0;
577 
580  };
587 
588  // some optional functionality which can be used by the simulators as needed
591 
592  // loopback situations, situations which are received from simulator for remote aircraft
594 
595  // limit the update aircraft to a maximum per second
596  swift::misc::CTokenBucket m_limitUpdateAircraftBucket { 5, 100, 5 };
597  bool m_limitUpdateAircraft = false;
598 
599  // general settings
601  this
602  };
603 
604  private:
605  // remote aircraft provider ("rap") bound
606  void rapOnRecalculatedRenderedAircraft(const swift::misc::simulation::CAirspaceAircraftSnapshot &snapshot);
607 
608  // call with counters updated
609  void callPhysicallyAddRemoteAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft);
610  void callPhysicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &remoteCallsign);
611 
613  void displayLoggedSituationInSimulator(const swift::misc::aviation::CCallsign &cs, bool stopLogging,
614  int times = 40);
615 
616  // statistics values of how often those functions are called
617  // those are the added counters, overflow will not be an issue here (discussed in T171 review)
618  int m_statsPhysicallyAddedAircraft = 0;
619  int m_statsPhysicallyRemovedAircraft = 0;
620 
621  // misc.
622  bool m_networkConnected = false;
623  bool m_test = false;
624  swift::misc::aviation::CCallsignSet m_callsignsToBeRendered;
625  swift::misc::CConnectionGuard m_remoteAircraftProviderConnections;
626  };
627 
633  {
634  Q_OBJECT
635 
636  public:
638  ~ISimulatorListener() override = default;
639 
642 
644  virtual QString backendInfo() const;
645 
647  bool isRunning() const { return m_isRunning; }
648 
649  public slots:
652  void start();
653 
656  void stop();
657 
660  void check();
661 
662  signals:
665 
666  protected:
670 
672  virtual bool isShuttingDown() const;
673 
675  virtual void startImpl() = 0;
676 
678  virtual void stopImpl() = 0;
679 
681  virtual void checkImpl() = 0;
682 
683  private:
685  void onAboutToShutdown();
686 
688  std::atomic_bool m_isRunning { false };
689  std::atomic_bool m_aboutToShutdown { false }; // swift will shutdown
690  };
691 
694  {
695  public:
697  virtual ~ISimulatorFactory() = default;
698 
704 
713  swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider,
714  swift::misc::network::IClientProvider *clientProvider) = 0;
715 
718 
719  protected:
721  ISimulatorFactory() {} // NOLINT(modernize-use-equals-default)
722  };
723 } // namespace swift::core
724 
726 Q_DECLARE_METATYPE(swift::core::ISimulator::SimulatorStatus)
727 Q_DECLARE_INTERFACE(swift::core::ISimulator, "org.swift-project.swift_core.simulator")
728 Q_DECLARE_INTERFACE(swift::core::ISimulatorFactory, "org.swift-project.swift_core.simulatorfactory")
729 Q_DECLARE_OPERATORS_FOR_FLAGS(swift::core::ISimulator::SimulatorStatus)
730 
731 #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:694
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:721
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:256
double getStatisticsAverageUpdateTimeMs() const
Average update time in ms.
Definition: simulator.h:308
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:192
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:239
double getSimTimeRatio() const
Ratio of simulation time to real time, due to low FPS.
Definition: simulator.h:189
virtual bool isShuttingDown() const
Is overall (swift) application shutting down.
Definition: simulator.h:214
int getStatisticsPhysicallyAddedAircraft() const
Counter added aircraft.
Definition: simulator.h:299
void setTestMode(bool test)
Set test mode (driver can skip code parts etc., driver dependent)
Definition: simulator.h:180
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:220
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:250
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:586
int getStatisticsUpdateRuns() const
Number of update runs.
Definition: simulator.h:317
swift::misc::simulation::CAutoPublishData m_autoPublishing
for the DB
Definition: simulator.h:583
qint64 getStatisticsTotalUpdateTimeMs() const
Total update time in ms.
Definition: simulator.h:311
double getAverageFPS() const
Average FPS (frames per second)
Definition: simulator.h:186
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:183
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:590
void setTestEnablePseudoElevation(bool enable)
Enable pseudo elevations (testing)
Definition: simulator.h:203
swift::misc::simulation::CSimulatorInternals m_simulatorInternals
setup read from the sim
Definition: simulator.h:581
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:320
swift::misc::simulation::settings::CSpecializedSimulatorSettings getSimulatorSettings() const
Settings for current simulator.
Definition: simulator.h:162
swift::misc::simulation::CInterpolationLogger m_interpolationLogger
log.interpolation
Definition: simulator.h:582
void aircraftRenderingChanged(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Aircraft rendering changed.
swift::misc::aviation::CAircraftSituationListPerCallsign m_loopbackSituations
traced loopback situations
Definition: simulator.h:593
bool isFlightNetworkConnected() const
Is the flight network connected.
Definition: simulator.h:159
virtual bool isShuttingDownOrDisconnected() const
Shutting down or disconnected?
Definition: simulator.h:217
void setTestElevation(const swift::misc::aviation::CAltitude &altitude)
Set an elevation for testing.
Definition: simulator.h:206
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:296
qint64 getStatisticsMaxUpdateTimeMs() const
Max.update time in ms.
Definition: simulator.h:314
qint64 getStatisticsCurrentUpdateTimeMs() const
Current update time in ms.
Definition: simulator.h:305
const swift::misc::simulation::CInterpolationLogger & interpolationLogger() const
Access to logger.
Definition: simulator.h:327
virtual bool isSimulating() const
Simulator running?
Definition: simulator.h:177
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:302
swift::misc::aviation::CAircraftSituationPerCallsign m_lastSentSituations
last situations sent to simulator
Definition: simulator.h:585
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:226
double getMinutesLate() const
Number of minutes behind schedule, due to low FPS.
Definition: simulator.h:195
Interface to a simulator listener.
Definition: simulator.h:633
virtual void startImpl()=0
Plugin specific implementation to start listener.
const swift::misc::simulation::CSimulatorPluginInfo & getPluginInfo() const
Corresponding info.
Definition: simulator.h:641
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:647
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.