swift
simulatorfs9.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2014 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_SIMULATOR_FS9_H
7 #define SWIFT_SIMPLUGIN_SIMULATOR_FS9_H
8 
9 #include <QHash>
10 #include <QList>
11 #include <QObject>
12 #include <QThread>
13 #include <QtPlugin>
14 
15 #include "../fscommon/simulatorfscommon.h"
16 #include "fs9client.h"
17 #include "fs9host.h"
18 #include "lobbyclient.h"
19 
20 #include "core/simulator.h"
21 #include "misc/pixmap.h"
27 
28 namespace swift::simplugin::fs9
29 {
31  class CSimulatorFs9 : public FsCommon::CSimulatorFsCommon
32  {
33  Q_OBJECT
34 
35  public:
38  const QSharedPointer<CFs9Host> &fs9Host, const QSharedPointer<CLobbyClient> &lobbyClient,
41  swift::misc::network::IClientProvider *clientProvider, QObject *parent = nullptr);
42 
44  virtual ~CSimulatorFs9() override = default;
45 
48  virtual bool connectTo() override;
49  virtual bool disconnectFrom() override;
50  virtual bool
52  virtual bool physicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign) override;
53  virtual int physicallyRemoveAllRemoteAircraft() override;
55  virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const override;
57  const swift::misc::CIdentifier &originator) override;
59  const swift::misc::CIdentifier &originator) override;
60  virtual void displayStatusMessage(const swift::misc::CStatusMessage &message) const override;
61  virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const override;
63  getInterpolationMessages(const swift::misc::aviation::CCallsign &callsign) const override;
66  const swift::misc::aviation::CAircraftParts &parts) override;
68 
69  protected:
72  virtual bool isConnected() const override;
73  virtual bool isSimulating() const override { return isConnected(); }
75 
79  virtual void timerEvent(QTimerEvent *event) override;
80 
81  // remark: in FS9 there is no central updateRemoteAircraft() function, each FS9 client updates itself
82  // updateRemoteAircraft()
83 
84  private:
87  void dispatch();
88 
90  void processFs9Message(const QByteArray &message);
91 
93  void updateOwnAircraftFromSimulator(const swift::misc::simulation::CSimulatedAircraft &ownAircraft);
94 
96  void updateRenderStatus(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft,
98 
100  void disconnectAllClients();
101 
103  void synchronizeTime();
104 
105  swift::simplugin::fscommon::CFsuipc *m_fsuipc = nullptr;
107  QMetaObject::Connection m_connectionHostMessages;
108  bool m_simConnected = false;
109  QSharedPointer<CFs9Host> m_fs9Host;
110  QSharedPointer<CLobbyClient> m_lobbyClient;
111 
112  static constexpr int SkipUpdateCyclesForCockpit = 10;
113  };
114 
120  {
121  Q_OBJECT
122 
123  public:
126  const QSharedPointer<CFs9Host> &fs9Host, const QSharedPointer<CLobbyClient> &lobbyClient);
127 
128  protected:
130  virtual void startImpl() override;
131 
133  virtual void stopImpl() override;
134 
136  virtual void checkImpl() override;
137 
138  private:
140  bool checkConnection(bool canLobbyConnect);
141 
142  QTimer *m_timer = nullptr;
143  bool m_isConnecting = false;
144  bool m_isStarted = false;
145  QSharedPointer<CFs9Host> m_fs9Host;
146  QSharedPointer<CLobbyClient> m_lobbyClient;
147  FsCommon::CFsuipc *m_fsuipc = nullptr;
148  };
149 
152  {
153  Q_OBJECT
154  Q_PLUGIN_METADATA(IID "org.swift-project.blaswift_coreckcore.simulatorinterface" FILE "simulatorfs9.json")
155  Q_INTERFACES(swift::core::ISimulatorFactory)
156 
157  public:
159  CSimulatorFs9Factory(QObject *parent = nullptr);
160 
162  virtual ~CSimulatorFs9Factory() override;
163 
165  virtual swift::core::ISimulator *
168  swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider,
169  swift::misc::network::IClientProvider *clientProvider) override;
170 
174 
175  private:
176  QSharedPointer<CFs9Host> m_fs9Host;
177  QSharedPointer<CLobbyClient> m_lobbyClient;
178  };
179 } // namespace swift::simplugin::fs9
180 
181 #endif // SWIFT_SIMPLUGIN_SIMULATOR_FS9_H
Factory pattern class to create instances of ISimulator.
Definition: simulator.h:691
Interface to a simulator.
Definition: simulator.h:59
Interface to a simulator listener.
Definition: simulator.h:630
Value object encapsulating information identifying a component of a modular distributed swift process...
Definition: identifier.h:29
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
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
Value object for a set of callsigns.
Definition: callsignset.h:26
Value object for SELCAL.
Definition: selcal.h:31
Value object encapsulating information of a text message.
Definition: textmessage.h:31
Direct in memory access to client (network client) data.
Comprehensive information of an aircraft.
Direct threadsafe in memory access to own aircraft.
Direct thread safe in memory access to remote aircraft.
ClientStatus
Connection status.
Definition: fs9client.h:33
Factory implementation to create CSimulatorFs9 instances.
Definition: simulatorfs9.h:152
virtual swift::core::ISimulatorListener * createListener(const swift::misc::simulation::CSimulatorPluginInfo &info)
Simulator listener instance.
virtual swift::core::ISimulator * create(const swift::misc::simulation::CSimulatorPluginInfo &info, swift::misc::simulation::IOwnAircraftProvider *ownAircraftProvider, swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider, swift::misc::network::IClientProvider *clientProvider)
Create a new instance of a driver.
CSimulatorFs9Factory(QObject *parent=nullptr)
Constructor.
FS9 Simulator Implementation.
Definition: simulatorfs9.h:32
virtual ~CSimulatorFs9()=default
Destructor.
virtual bool physicallyAddRemoteAircraft(const swift::misc::simulation::CSimulatedAircraft &newRemoteAircraft)
virtual void timerEvent(QTimerEvent *event)
Timer event dispatching.
virtual swift::misc::CStatusMessageList getInterpolationMessages(const swift::misc::aviation::CCallsign &callsign) const
virtual swift::misc::aviation::CCallsignSet physicallyRenderedAircraft() const
virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const
virtual bool isSimulating() const
Definition: simulatorfs9.h:73
virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const
virtual bool physicallyRemoveRemoteAircraft(const swift::misc::aviation::CCallsign &callsign)
CSimulatorFs9(const swift::misc::simulation::CSimulatorPluginInfo &info, const QSharedPointer< CFs9Host > &fs9Host, const QSharedPointer< CLobbyClient > &lobbyClient, swift::misc::simulation::IOwnAircraftProvider *ownAircraftProvider, swift::misc::simulation::IRemoteAircraftProvider *remoteAircraftProvider, swift::misc::network::IClientProvider *clientProvider, QObject *parent=nullptr)
Constructor, parameters as in.
virtual void displayStatusMessage(const swift::misc::CStatusMessage &message) const
virtual bool updateOwnSimulatorCockpit(const swift::misc::simulation::CSimulatedAircraft &ownAircraft, const swift::misc::CIdentifier &originator)
virtual bool testSendSituationAndParts(const swift::misc::aviation::CCallsign &callsign, const swift::misc::aviation::CAircraftSituation &situation, const swift::misc::aviation::CAircraftParts &parts)
virtual bool updateOwnSimulatorSelcal(const swift::misc::aviation::CSelcal &selcal, const swift::misc::CIdentifier &originator)
Listener for FS9 Listener starts the FS9 multiplayer host and tries to make the running instance of s...
Definition: simulatorfs9.h:120
virtual void stopImpl()
Plugin specific implementation to stop listener.
CSimulatorFs9Listener(const swift::misc::simulation::CSimulatorPluginInfo &info, const QSharedPointer< CFs9Host > &fs9Host, const QSharedPointer< CLobbyClient > &lobbyClient)
Constructor.
virtual void startImpl()
Plugin specific implementation to start listener.
virtual void checkImpl()
Plugin specific implementation to check.
Class representing a FSUIPC "interface".
Definition: fsuipc.h:18