mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-04 08:36:52 +08:00
* new signal sending all 3 states together (connected, running, paused) * renamed ISimulator::Status to ConnectionStatus * consolidated some member / signal names * for FS9/XPlane implemented stub functions
This commit is contained in:
committed by
Roland Winklmeier
parent
326ae96def
commit
a94bceddab
@@ -13,8 +13,8 @@ namespace BlackCore
|
||||
void registerMetadata()
|
||||
{
|
||||
// for some reasons (ask RW) these are registered twice
|
||||
qRegisterMetaType<ISimulator::Status>();
|
||||
qRegisterMetaType<ISimulator::Status>("Status");
|
||||
qRegisterMetaType<ISimulator::ConnectionStatus>();
|
||||
qRegisterMetaType<ISimulator::ConnectionStatus>("Status");
|
||||
qRegisterMetaType<IVoiceChannel::ConnectionStatus>();
|
||||
qRegisterMetaType<IVoiceChannel::ConnectionStatus>("ConnectionStatus");
|
||||
}
|
||||
|
||||
@@ -23,5 +23,4 @@ namespace BlackCore
|
||||
return nullptr; // simulator not mandatory
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@@ -70,7 +70,14 @@ namespace BlackCore
|
||||
//! Emitted when the simulator connection changes
|
||||
void connectionChanged(bool connected);
|
||||
|
||||
//! Emitted when own aircraft model changes (TODO move to own aircraft context?)
|
||||
//! Simulator started or stopped
|
||||
void startedChanged(bool startedChanged);
|
||||
|
||||
//! Simulator combined status
|
||||
void simulatorStatusChanged(bool connected, bool running, bool paused);
|
||||
|
||||
//! Emitted when own aircraft model changes
|
||||
//! \todo move to own aircraft context?
|
||||
void ownAircraftModelChanged(BlackMisc::Network::CAircraftModel model);
|
||||
|
||||
public slots:
|
||||
@@ -82,7 +89,7 @@ namespace BlackCore
|
||||
virtual bool isConnected() const = 0;
|
||||
|
||||
//! Can we connect?
|
||||
virtual bool canConnect() = 0;
|
||||
virtual bool canConnect() const = 0;
|
||||
|
||||
//! Connect to simulator
|
||||
virtual bool connectTo() = 0;
|
||||
@@ -93,6 +100,9 @@ namespace BlackCore
|
||||
//! Disconnect from simulator
|
||||
virtual bool disconnectFrom() = 0;
|
||||
|
||||
//! Returns true when simulator is running
|
||||
virtual bool isRunning() const = 0;
|
||||
|
||||
//! Simulator info
|
||||
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const = 0;
|
||||
|
||||
@@ -125,7 +135,7 @@ namespace BlackCore
|
||||
bool isSimulatorAvailable() const { return BlackMisc::CProject::isCompiledWithFlightSimulatorSupport() && !getSimulatorInfo().isUnspecified(); }
|
||||
|
||||
//! Simulator paused?
|
||||
virtual bool isSimulatorPaused() const = 0;
|
||||
virtual bool isPaused() const = 0;
|
||||
|
||||
//! Settings have been changed
|
||||
virtual void settingsChanged(uint type) = 0;
|
||||
|
||||
@@ -28,8 +28,7 @@ using namespace BlackSim::Settings;
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
CContextSimulator::CContextSimulator(CRuntimeConfig::ContextMode mode, CRuntime *runtime) : IContextSimulator(mode, runtime),
|
||||
m_simulator(nullptr), m_updateTimer(nullptr)
|
||||
CContextSimulator::CContextSimulator(CRuntimeConfig::ContextMode mode, CRuntime *runtime) : IContextSimulator(mode, runtime)
|
||||
{
|
||||
m_updateTimer = new QTimer(this);
|
||||
findSimulatorPlugins();
|
||||
@@ -63,7 +62,7 @@ namespace BlackCore
|
||||
return m_simulator->isConnected();
|
||||
}
|
||||
|
||||
bool CContextSimulator::canConnect()
|
||||
bool CContextSimulator::canConnect() const
|
||||
{
|
||||
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
|
||||
if (!m_simulator) return false;
|
||||
@@ -168,11 +167,15 @@ namespace BlackCore
|
||||
this->unloadSimulatorPlugin(); // old plugin unloaded
|
||||
m_simulator = newSimulator;
|
||||
|
||||
connect(m_simulator, &ISimulator::statusChanged, this, &CContextSimulator::ps_onConnectionStatusChanged);
|
||||
connect(m_simulator, &ISimulator::connectionStatusChanged, this, &CContextSimulator::ps_onConnectionStatusChanged);
|
||||
connect(m_simulator, &ISimulator::simulatorStatusChanged, this, &CContextSimulator::simulatorStatusChanged);
|
||||
connect(m_simulator, &ISimulator::aircraftModelChanged, this, &IContextSimulator::ownAircraftModelChanged);
|
||||
|
||||
// log
|
||||
connect(CLogHandler::instance(), &CLogHandler::localMessageLogged, m_simulator, &ISimulator::displayStatusMessage);
|
||||
connect(CLogHandler::instance(), &CLogHandler::remoteMessageLogged, m_simulator, &ISimulator::displayStatusMessage);
|
||||
|
||||
// connect with network
|
||||
CAirspaceMonitor *airspace = this->getRuntime()->getCContextNetwork()->getAirspaceMonitor();
|
||||
connect(airspace, &CAirspaceMonitor::addedAircraft, this, &CContextSimulator::ps_addRemoteAircraft);
|
||||
connect(airspace, &CAirspaceMonitor::changedAircraftSituation, this, &CContextSimulator::ps_addAircraftSituation);
|
||||
@@ -292,18 +295,20 @@ namespace BlackCore
|
||||
this->m_simulator->updateOwnSimulatorCockpit(ownAircraft);
|
||||
}
|
||||
|
||||
void CContextSimulator::ps_onConnectionStatusChanged(ISimulator::Status status)
|
||||
void CContextSimulator::ps_onConnectionStatusChanged(ISimulator::ConnectionStatus status)
|
||||
{
|
||||
bool connected;
|
||||
if (status == ISimulator::Connected)
|
||||
{
|
||||
connected = true;
|
||||
m_updateTimer->start(100);
|
||||
emit connectionChanged(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
connected = false;
|
||||
m_updateTimer->stop();
|
||||
emit connectionChanged(false);
|
||||
}
|
||||
emit connectionChanged(connected);
|
||||
}
|
||||
|
||||
void CContextSimulator::ps_statusMessageReceived(const CStatusMessage &statusMessage)
|
||||
@@ -319,7 +324,7 @@ namespace BlackCore
|
||||
|
||||
void CContextSimulator::ps_statusMessagesReceived(const CStatusMessageList &statusMessages)
|
||||
{
|
||||
for(const CStatusMessage &m : statusMessages)
|
||||
for (const CStatusMessage &m : statusMessages)
|
||||
{
|
||||
this->ps_statusMessageReceived(m);
|
||||
}
|
||||
@@ -363,10 +368,16 @@ namespace BlackCore
|
||||
this->m_simulator->setTimeSynchronization(timeSync, syncOffset);
|
||||
}
|
||||
|
||||
bool CContextSimulator::isSimulatorPaused() const
|
||||
bool CContextSimulator::isPaused() const
|
||||
{
|
||||
if (!this->m_simulator) return false;
|
||||
return this->m_simulator->isSimPaused();
|
||||
return this->m_simulator->isPaused();
|
||||
}
|
||||
|
||||
bool CContextSimulator::isRunning() const
|
||||
{
|
||||
if (!this->m_simulator) return false;
|
||||
return this->m_simulator->isRunning();
|
||||
}
|
||||
|
||||
void CContextSimulator::findSimulatorPlugins()
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace BlackCore
|
||||
virtual bool isConnected() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::canConnect
|
||||
virtual bool canConnect() override;
|
||||
virtual bool canConnect() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::connectTo
|
||||
virtual bool connectTo() override;
|
||||
@@ -59,6 +59,12 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::disconnectFrom
|
||||
virtual bool disconnectFrom() override;
|
||||
|
||||
//! \copydoc IContextSimulator::isPaused
|
||||
virtual bool isPaused() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::isRunning
|
||||
virtual bool isRunning() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::getSimulatorInfo()
|
||||
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
|
||||
|
||||
@@ -89,9 +95,6 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::settingsChanged
|
||||
virtual void settingsChanged(uint type) override;
|
||||
|
||||
//! \copydoc IContextSimulator::isSimulatorPaused
|
||||
virtual bool isSimulatorPaused() const override;
|
||||
|
||||
protected:
|
||||
//! \brief Constructor
|
||||
CContextSimulator(CRuntimeConfig::ContextMode, CRuntime *runtime);
|
||||
@@ -122,7 +125,7 @@ namespace BlackCore
|
||||
void ps_updateCockpitFromContext(const BlackMisc::Aviation::CAircraft &ownAircraft, const QString &originator);
|
||||
|
||||
//! Handle new connection status
|
||||
void ps_onConnectionStatusChanged(ISimulator::Status status);
|
||||
void ps_onConnectionStatusChanged(ISimulator::ConnectionStatus status);
|
||||
|
||||
//! Status message received
|
||||
void ps_statusMessageReceived(const BlackMisc::CStatusMessage &statusMessage);
|
||||
@@ -139,10 +142,10 @@ namespace BlackCore
|
||||
|
||||
BlackMisc::Network::CAircraftModel m_aircraftModel;
|
||||
BlackMisc::Aviation::CAircraft m_ownAircraft;
|
||||
BlackCore::ISimulator *m_simulator;
|
||||
BlackCore::ISimulator *m_simulator = nullptr;
|
||||
|
||||
QTimer *m_updateTimer;
|
||||
QDir m_pluginsDir;
|
||||
QTimer *m_updateTimer = nullptr;
|
||||
QDir m_pluginsDir = nullptr;
|
||||
QSet<ISimulatorFactory *> m_simulatorFactories;
|
||||
QFuture<bool> m_canConnectResult;
|
||||
};
|
||||
|
||||
@@ -25,8 +25,23 @@ namespace BlackCore
|
||||
this->relaySignals(serviceName, connection);
|
||||
}
|
||||
|
||||
void CContextSimulatorProxy::relaySignals(const QString &/*serviceName*/, QDBusConnection &/*connection*/)
|
||||
{ }
|
||||
void CContextSimulatorProxy::relaySignals(const QString &serviceName, QDBusConnection &connection)
|
||||
{
|
||||
bool s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
|
||||
"connectionChanged", this, SIGNAL(connectionChanged(bool)));
|
||||
Q_ASSERT(s);
|
||||
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
|
||||
"startedChanged", this, SIGNAL(startedChanged(bool)));
|
||||
|
||||
Q_ASSERT(s);
|
||||
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
|
||||
"simulatorStatusChanged", this, SIGNAL(simulatorStatusChanged(bool,bool,bool)));
|
||||
Q_ASSERT(s);
|
||||
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
|
||||
"ownAircraftModelChanged", this, SIGNAL(ownAircraftModelChanged(BlackMisc::Network::CAircraftModel)));
|
||||
Q_ASSERT(s);
|
||||
Q_UNUSED(s);
|
||||
}
|
||||
|
||||
CSimulatorInfoList CContextSimulatorProxy::getAvailableSimulatorPlugins() const
|
||||
{
|
||||
@@ -38,7 +53,7 @@ namespace BlackCore
|
||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isConnected"));
|
||||
}
|
||||
|
||||
bool CContextSimulatorProxy::canConnect()
|
||||
bool CContextSimulatorProxy::canConnect() const
|
||||
{
|
||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("canConnect"));
|
||||
}
|
||||
@@ -108,9 +123,14 @@ namespace BlackCore
|
||||
m_dBusInterface->callDBus(QLatin1Literal("settingsChanged"), type);
|
||||
}
|
||||
|
||||
bool CContextSimulatorProxy::isSimulatorPaused() const
|
||||
bool CContextSimulatorProxy::isPaused() const
|
||||
{
|
||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isSimulatorPaused"));
|
||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isPaused"));
|
||||
}
|
||||
|
||||
bool CContextSimulatorProxy::isRunning() const
|
||||
{
|
||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isRunning"));
|
||||
}
|
||||
|
||||
} // namespace BlackCore
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace BlackCore
|
||||
virtual bool isConnected() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::canConnect
|
||||
virtual bool canConnect() override;
|
||||
virtual bool canConnect() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::connectTo
|
||||
virtual bool connectTo() override;
|
||||
@@ -61,6 +61,12 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::disconnectFrom
|
||||
virtual bool disconnectFrom() override;
|
||||
|
||||
//! \copydoc IContextSimulator::isRunning
|
||||
virtual bool isRunning() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::isPaused
|
||||
virtual bool isPaused() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::getAircraftModel()
|
||||
virtual BlackMisc::Network::CAircraftModel getOwnAircraftModel() const override;
|
||||
|
||||
@@ -91,9 +97,6 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::settingsChanged
|
||||
virtual void settingsChanged(uint type) override;
|
||||
|
||||
//! \copydoc IContextSimulator::isSimulatorPaused
|
||||
virtual bool isSimulatorPaused() const override;
|
||||
|
||||
};
|
||||
|
||||
} // namespace BlackCore
|
||||
|
||||
@@ -13,4 +13,9 @@ namespace BlackCore
|
||||
{
|
||||
ISimulator::ISimulator(QObject *parent) : QObject(parent)
|
||||
{ }
|
||||
|
||||
void ISimulator::emitSimulatorCombinedStatus()
|
||||
{
|
||||
emit simulatorStatusChanged(isConnected(), isRunning(), isPaused());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,11 +28,11 @@ namespace BlackCore
|
||||
class ISimulator : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(Status)
|
||||
Q_ENUMS(ConnectionStatus)
|
||||
|
||||
public:
|
||||
//! ISimulator connection
|
||||
enum Status
|
||||
enum ConnectionStatus
|
||||
{
|
||||
Disconnected,
|
||||
Connected,
|
||||
@@ -49,7 +49,17 @@ namespace BlackCore
|
||||
virtual bool isConnected() const = 0;
|
||||
|
||||
//! Can we connect?
|
||||
virtual bool canConnect() = 0;
|
||||
//! \todo currently some code in XPlane implementation prevents to make the function const, can we fix this
|
||||
virtual bool canConnect() const = 0;
|
||||
|
||||
//! Is time synchronization on?
|
||||
virtual bool isTimeSynchronized() const = 0;
|
||||
|
||||
//! Simulator paused?
|
||||
virtual bool isPaused() const = 0;
|
||||
|
||||
//! Simulator running?
|
||||
virtual bool isRunning() const = 0;
|
||||
|
||||
public slots:
|
||||
|
||||
@@ -100,27 +110,31 @@ namespace BlackCore
|
||||
//! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature
|
||||
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) = 0;
|
||||
|
||||
//! Is time synchronization on?
|
||||
virtual bool isTimeSynchronized() const = 0;
|
||||
|
||||
//! Time synchronization offset
|
||||
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const = 0;
|
||||
|
||||
//! Simulator paused?
|
||||
virtual bool isSimPaused() const = 0;
|
||||
|
||||
signals:
|
||||
//! Emitted when the connection status has changed
|
||||
void statusChanged(ISimulator::Status status);
|
||||
void connectionStatusChanged(ISimulator::ConnectionStatus status);
|
||||
|
||||
//! Emitted when own aircraft model has changed
|
||||
void aircraftModelChanged(BlackMisc::Network::CAircraftModel model);
|
||||
|
||||
//! Simulator combined status
|
||||
void simulatorStatusChanged(bool connected, bool running, bool paused);
|
||||
|
||||
//! Simulator started
|
||||
void simulatorStarted();
|
||||
|
||||
//! Simulator stopped;
|
||||
void simulatorStopped();
|
||||
|
||||
|
||||
protected:
|
||||
//! Emit the combined status
|
||||
//! \sa simulatorStatusChanged;
|
||||
void emitSimulatorCombinedStatus();
|
||||
|
||||
};
|
||||
|
||||
//! Factory pattern class to create instances of ISimulator
|
||||
@@ -142,6 +156,6 @@ namespace BlackCore
|
||||
|
||||
// TODO: Use CProject to store this string
|
||||
Q_DECLARE_INTERFACE(BlackCore::ISimulatorFactory, "net.vatsim.PilotClient.BlackCore.SimulatorInterface")
|
||||
Q_DECLARE_METATYPE(BlackCore::ISimulator::Status)
|
||||
Q_DECLARE_METATYPE(BlackCore::ISimulator::ConnectionStatus)
|
||||
|
||||
#endif // guard
|
||||
|
||||
Reference in New Issue
Block a user