swift
simulatoremulated.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_SIMPLUGIN_EMULATED_SIMULATOREMULATED_H
7 #define SWIFT_SIMPLUGIN_EMULATED_SIMULATOREMULATED_H
8 
9 #include <QMap>
10 #include <QPointer>
11 #include <QTimer>
12 
13 #include "../plugincommon/simulatorplugincommon.h"
15 
17 #include "misc/connectionguard.h"
18 #include "misc/pq/time.h"
24 
25 namespace swift::simplugin::emulated
26 {
29  {
30  Q_OBJECT
31  Q_INTERFACES(swift::core::ISimulator)
34 
37 
38  public:
40  CSimulatorEmulated(const swift::misc::simulation::CSimulatorPluginInfo &info,
41  swift::misc::simulation::IOwnAircraftProvider *ownAircraftProvider,
42  swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider,
43  swift::misc::network::IClientProvider *clientProvider, QObject *parent = nullptr);
44 
46  virtual ~CSimulatorEmulated() override;
47 
48  // functions implemented
49  virtual bool connectTo() override;
50  virtual bool disconnectFrom() override;
51  virtual void unload() override;
52  virtual bool isConnected() const override;
53  virtual bool isPaused() const override;
54  virtual bool isSimulating() const override;
55  virtual bool changeRemoteAircraftModel(const swift::misc::simulation::CSimulatedAircraft &aircraft) override;
56  virtual bool changeRemoteAircraftEnabled(const swift::misc::simulation::CSimulatedAircraft &aircraft) override;
57  virtual bool updateOwnSimulatorCockpit(const swift::misc::simulation::CSimulatedAircraft &aircraft,
58  const swift::misc::CIdentifier &originator) override;
59  virtual bool updateOwnSimulatorSelcal(const swift::misc::aviation::CSelcal &selcal,
60  const swift::misc::CIdentifier &originator) override;
61  virtual void displayStatusMessage(const swift::misc::CStatusMessage &message) const override;
62  virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const override;
63  virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const override;
64  virtual swift::misc::aviation::CCallsignSet physicallyRenderedAircraft() const override;
65  virtual swift::misc::CStatusMessageList
66  getInterpolationMessages(const swift::misc::aviation::CCallsign &callsign) const override;
67  virtual bool testSendSituationAndParts(const swift::misc::aviation::CCallsign &callsign,
68  const swift::misc::aviation::CAircraftSituation &situation,
69  const swift::misc::aviation::CAircraftParts &parts) override;
70  virtual bool requestElevation(const swift::misc::geo::ICoordinateGeodetic &reference,
71  const swift::misc::aviation::CCallsign &callsign) override;
72 
73  // ----- functions just logged -------
74  virtual bool
75  logicallyAddRemoteAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft) override;
76  virtual bool logicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign) override;
77  virtual int
78  physicallyRemoveMultipleRemoteAircraft(const swift::misc::aviation::CCallsignSet &callsigns) override;
79 
80  // functions logged and used
87  virtual bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator) override;
88 
90  void setCombinedStatus(bool connected, bool simulating, bool paused);
91 
93  swift::misc::simulation::CSimulatorInfo getEmulatedSimulator() const;
94 
97  const swift::misc::simulation::CSimulatedAircraft &getInternalOwnAircraft() const { return m_myAircraft; }
98 
102 
107 
111 
115 
119 
121  bool setInterpolatorFetchTime(int timeMs);
122 
124  bool isInterpolatorFetching() const;
125 
127  static void registerHelp();
128 
129  signals:
132 
133  protected:
134  virtual bool
136  virtual bool physicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign) override;
137  virtual int physicallyRemoveAllRemoteAircraft() override;
138 
140  virtual bool parseDetails(const swift::misc::CSimpleCommandParser &parser) override;
141 
142  private:
144  void setObjectName(const swift::misc::simulation::CSimulatorInfo &info);
145 
147  bool canLog() const;
148 
150  bool canDisplay() const;
151 
153  void closeMonitor();
154 
156  void onSettingsChanged();
157 
159  void onSimulatorStatusChanged();
160 
162  void connectOwnSignals();
163 
166  void updateRemoteAircraft();
167 
168  bool m_log = false;
169  bool m_paused = false;
170  bool m_connected = true;
171  bool m_simulating = true;
172  int m_countInterpolatedSituations = 0;
173  int m_countInterpolatedParts = 0;
174  QTimer m_interpolatorFetchTimer;
177  QPointer<CSimulatorEmulatedMonitorDialog>
178  m_monitorWidget;
179  swift::misc::CConnectionGuard m_connectionGuard;
181  this, &CSimulatorEmulated::onSettingsChanged
182  };
184  m_interpolators;
185  };
186 
189  {
190  Q_OBJECT
191 
192  public:
195 
196  protected:
198  virtual void startImpl() override;
199 
201  virtual void stopImpl() override;
202 
204  virtual void checkImpl() override;
205  };
206 } // namespace swift::simplugin::emulated
207 
208 #endif // SWIFT_SIMPLUGIN_EMULATED_SIMULATOREMULATED_H
Interface to a simulator.
Definition: simulator.h:59
Interface to a simulator listener.
Definition: simulator.h:630
List of QMetaObject::Connection.
Utility methods for simple line parsing used with the command line.
Value object encapsulating information of aircraft's parts.
Definition: aircraftparts.h:26
Value object encapsulating information of an aircraft's situation.
Value object encapsulating information of a callsign.
Definition: callsign.h:30
COM system (aka "radio")
Definition: comsystem.h:37
Value object for SELCAL.
Definition: selcal.h:31
Comprehensive information of an aircraft.
Value object encapsulating a list of aircraft.
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
Direct in memory access to interpolation setup, normally implemented by simulator.
Common base class for simulator plugins.
virtual bool updateOwnSimulatorSelcal(const swift::misc::aviation::CSelcal &selcal, const swift::misc::CIdentifier &originator)
Update own aircraft cockpit (usually from context)
bool isInterpolatorFetching() const
Is fetching from interpolator.
virtual bool testSendSituationAndParts(const swift::misc::aviation::CCallsign &callsign, const swift::misc::aviation::CAircraftSituation &situation, const swift::misc::aviation::CAircraftParts &parts)
Send situation/parts for testing.
virtual bool changeRemoteAircraftModel(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Change remote aircraft per property.
swift::misc::simulation::CSimulatorInfo getEmulatedSimulator() const
The emulated simulated simulator.
virtual bool disconnectFrom()
Disconnect from simulator.
virtual bool physicallyAddRemoteAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft)
Add new remote aircraft physically to the simulator.
void internalAircraftChanged()
Internal aircraft changed.
virtual swift::misc::aviation::CCallsignSet physicallyRenderedAircraft() const
Physically rendered (displayed in simulator) This shall only return aircraft handled in the simulator...
const swift::misc::simulation::CSimulatedAircraft & getInternalOwnAircraft() const
Internal own aircraft.
virtual bool connectTo()
Connect to simulator.
virtual bool updateOwnSimulatorCockpit(const swift::misc::simulation::CSimulatedAircraft &aircraft, const swift::misc::CIdentifier &originator)
Update own aircraft cockpit (usually from context)
virtual swift::misc::CStatusMessageList getInterpolationMessages(const swift::misc::aviation::CCallsign &callsign) const
Interpolation messages for callsign.
virtual bool logicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign)
Logically remove remote aircraft from simulator. Depending on max. aircraft, enabled status etc....
virtual bool requestElevation(const swift::misc::geo::ICoordinateGeodetic &reference, const swift::misc::aviation::CCallsign &callsign)
Request elevation, there is no guarantee the requested elevation will be available in the provider.
bool changeInternalSituation(const swift::misc::aviation::CAircraftSituation &situation)
Simulator internal change of situation.
virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const
Display a text message.
bool changeInternalCom(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Simulator internal change of COM values.
virtual bool isSimulating() const
Simulator running?
bool setInterpolatorFetchTime(int timeMs)
Interpolator fetch time, <=0 stops.
virtual void unload()
Driver will be unloaded.
virtual bool parseDetails(const swift::misc::CSimpleCommandParser &parser)
Parsed in derived classes.
bool changeInternalParts(const swift::misc::aviation::CAircraftParts &parts)
Simulator internal change of parts.
virtual int physicallyRemoveMultipleRemoteAircraft(const swift::misc::aviation::CCallsignSet &callsigns)
Remove remote aircraft from simulator.
bool changeInternalSelcal(const swift::misc::aviation::CSelcal &selcal)
Simulator internal change of SELCAL.
virtual bool changeRemoteAircraftEnabled(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Aircraft got enabled / disabled.
virtual bool logicallyAddRemoteAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft)
Logically add a new aircraft. Depending on max. aircraft, enabled status etc. it will physically adde...
virtual bool physicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign)
Remove remote aircraft from simulator.
virtual bool isConnected() const
Are we connected to the simulator?
virtual bool isPaused() const
Simulator paused?
virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const
Is the aircraft rendered (displayed in simulator)? This shall only return true if the aircraft is rea...
virtual void displayStatusMessage(const swift::misc::CStatusMessage &message) const
Display a status message in the simulator.
void setCombinedStatus(bool connected, bool simulating, bool paused)
UI setter.
virtual int physicallyRemoveAllRemoteAircraft()
Remove all remote aircraft and their data via ISimulator::clearAllRemoteAircraftData.
virtual void startImpl()
Plugin specific implementation to start listener.
CSimulatorEmulatedListener(const swift::misc::simulation::CSimulatorPluginInfo &info)
Constructor.
virtual void checkImpl()
Plugin specific implementation to stop listener.
virtual void stopImpl()
Plugin specific implementation to stop listener.
virtual bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator)