mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 20:15:35 +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
@@ -97,17 +97,12 @@ namespace BlackSimPlugin
|
||||
|
||||
// We tell the host to terminate and stop the thread afterwards
|
||||
QMetaObject::invokeMethod(m_fs9Host, "stopHosting");
|
||||
emit statusChanged(ISimulator::Disconnected);
|
||||
emit connectionStatusChanged(ISimulator::Disconnected);
|
||||
m_fsuipc->disconnect();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CSimulatorFs9::canConnect()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void CSimulatorFs9::addRemoteAircraft(const CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation)
|
||||
{
|
||||
|
||||
@@ -289,7 +284,7 @@ namespace BlackSimPlugin
|
||||
{
|
||||
m_isHosting = true;
|
||||
startTimer(50);
|
||||
emit statusChanged(Connected);
|
||||
emit connectionStatusChanged(Connected);
|
||||
if (m_startedLobbyConnection)
|
||||
{
|
||||
m_lobbyClient->connectFs9ToHost(m_fs9Host->getHostAddress());
|
||||
@@ -304,7 +299,7 @@ namespace BlackSimPlugin
|
||||
connect(&m_hostThread, &QThread::finished, &m_hostThread, &QThread::deleteLater);
|
||||
m_hostThread.quit();
|
||||
m_isHosting = false;
|
||||
emit statusChanged(Disconnected);
|
||||
emit connectionStatusChanged(Disconnected);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
||||
@@ -60,7 +60,17 @@ namespace BlackSimPlugin
|
||||
virtual bool isConnected() const override;
|
||||
|
||||
//! \copydoc ISimulator::canConnect()
|
||||
virtual bool canConnect() override;
|
||||
virtual bool canConnect() const override { return true; }
|
||||
|
||||
//! \copydoc ISimulator::isPaused
|
||||
virtual bool isPaused() const override { return m_simPaused; }
|
||||
|
||||
//! \copydoc ISimulator::isRunning
|
||||
//! \todo RW fix, set better state here
|
||||
virtual bool isRunning() const override { return true; }
|
||||
|
||||
//! Is time synchronization on?
|
||||
virtual bool isTimeSynchronized() const override { return m_syncTime; }
|
||||
|
||||
public slots:
|
||||
|
||||
@@ -111,15 +121,9 @@ namespace BlackSimPlugin
|
||||
//! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature
|
||||
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override;
|
||||
|
||||
//! Is time synchronization on?
|
||||
virtual bool isTimeSynchronized() const override { return m_syncTime; }
|
||||
|
||||
//! Time synchronization offset
|
||||
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override { return m_syncTimeOffset; }
|
||||
|
||||
//! Simulator paused?
|
||||
virtual bool isSimPaused() const override { return m_simPaused; }
|
||||
|
||||
protected:
|
||||
//! Timer event
|
||||
virtual void timerEvent(QTimerEvent *event);
|
||||
@@ -138,6 +142,7 @@ namespace BlackSimPlugin
|
||||
//! Change DirectPlay host status
|
||||
void ps_changeHostStatus(BlackSimPlugin::Fs9::CFs9Host::HostStatus status);
|
||||
|
||||
//! Change client status for callsign
|
||||
void ps_changeClientStatus(const QString &callsign, BlackSimPlugin::Fs9::CFs9Client::ClientStatus status);
|
||||
|
||||
private:
|
||||
@@ -150,11 +155,11 @@ namespace BlackSimPlugin
|
||||
// DirectPlay object handling
|
||||
CFs9Host *m_fs9Host = nullptr;
|
||||
QThread m_hostThread;
|
||||
bool m_isHosting = false; //!< Is sim connected
|
||||
bool m_isHosting = false; //!< Is sim connected
|
||||
bool m_startedLobbyConnection = false;
|
||||
bool m_syncTime = false; //!< Time synchronized?
|
||||
int m_syncDeferredCounter = 0; //!< Set when synchronized, used to wait some time
|
||||
bool m_simPaused = false; //!< Simulator paused?
|
||||
bool m_syncTime = false; //!< Time synchronized?
|
||||
int m_syncDeferredCounter = 0; //!< Set when synchronized, used to wait some time
|
||||
bool m_simPaused = false; //!< Simulator paused?
|
||||
|
||||
QHash<BlackMisc::Aviation::CCallsign, CFs9Client *> m_hashFs9Clients;
|
||||
QHash<CFs9Client *, QThread *> m_fs9ClientThreads;
|
||||
|
||||
@@ -45,9 +45,9 @@ namespace BlackSimPlugin
|
||||
|
||||
CSimulatorFsx::CSimulatorFsx(QObject *parent) :
|
||||
ISimulator(parent),
|
||||
m_isConnected(false),
|
||||
m_simConnected(false),
|
||||
m_simRunning(false),
|
||||
m_syncTime(false),
|
||||
m_simTimeSynced(false),
|
||||
m_hSimConnect(nullptr),
|
||||
m_nextObjID(1),
|
||||
m_simulatorInfo(CSimulatorInfo::FSX()),
|
||||
@@ -67,7 +67,12 @@ namespace BlackSimPlugin
|
||||
|
||||
bool CSimulatorFsx::isConnected() const
|
||||
{
|
||||
return m_isConnected;
|
||||
return m_simConnected;
|
||||
}
|
||||
|
||||
bool CSimulatorFsx::isRunning() const
|
||||
{
|
||||
return m_simRunning;
|
||||
}
|
||||
|
||||
bool CSimulatorFsx::isFsuipcConnected() const
|
||||
@@ -77,11 +82,12 @@ namespace BlackSimPlugin
|
||||
|
||||
bool CSimulatorFsx::connectTo()
|
||||
{
|
||||
if (m_isConnected) return true;
|
||||
if (m_simConnected) return true;
|
||||
|
||||
if (FAILED(SimConnect_Open(&m_hSimConnect, BlackMisc::CProject::systemNameAndVersionChar(), nullptr, 0, 0, 0)))
|
||||
{
|
||||
emit statusChanged(ConnectionFailed);
|
||||
emit connectionStatusChanged(ConnectionFailed);
|
||||
emitSimulatorCombinedStatus();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
@@ -92,9 +98,10 @@ namespace BlackSimPlugin
|
||||
initEvents();
|
||||
initDataDefinitions();
|
||||
m_simconnectTimerId = startTimer(10);
|
||||
m_isConnected = true;
|
||||
m_simConnected = true;
|
||||
|
||||
emit statusChanged(Connected);
|
||||
emit connectionStatusChanged(Connected);
|
||||
emitSimulatorCombinedStatus();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -116,9 +123,8 @@ namespace BlackSimPlugin
|
||||
|
||||
bool CSimulatorFsx::disconnectFrom()
|
||||
{
|
||||
if (!m_isConnected) { return true; }
|
||||
if (!m_simConnected) { return true; }
|
||||
|
||||
emit statusChanged(Disconnected);
|
||||
if (m_hSimConnect)
|
||||
{
|
||||
SimConnect_Close(m_hSimConnect);
|
||||
@@ -126,26 +132,34 @@ namespace BlackSimPlugin
|
||||
}
|
||||
|
||||
if (m_simconnectTimerId)
|
||||
{
|
||||
killTimer(m_simconnectTimerId);
|
||||
}
|
||||
|
||||
m_hSimConnect = nullptr;
|
||||
m_simconnectTimerId = -1;
|
||||
m_isConnected = false;
|
||||
m_simConnected = false;
|
||||
|
||||
emit connectionStatusChanged(Disconnected);
|
||||
emitSimulatorCombinedStatus();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSimulatorFsx::canConnect()
|
||||
bool CSimulatorFsx::canConnect() const
|
||||
{
|
||||
if (m_isConnected)
|
||||
return true;
|
||||
|
||||
if (FAILED(SimConnect_Open(&m_hSimConnect, BlackMisc::CProject::systemNameAndVersionChar(), nullptr, 0, 0, 0)))
|
||||
if (m_simConnected) { return true; }
|
||||
HANDLE hSimConnect; // temporary handle
|
||||
bool connect = false;
|
||||
if (FAILED(SimConnect_Open(&hSimConnect, BlackMisc::CProject::systemNameAndVersionChar(), nullptr, 0, 0, 0)))
|
||||
{
|
||||
return false;
|
||||
connect = false;
|
||||
}
|
||||
SimConnect_Close(m_hSimConnect);
|
||||
return true;
|
||||
else
|
||||
{
|
||||
connect = true;
|
||||
}
|
||||
SimConnect_Close(hSimConnect);
|
||||
return connect;
|
||||
}
|
||||
|
||||
void CSimulatorFsx::addRemoteAircraft(const CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation)
|
||||
@@ -291,7 +305,7 @@ namespace BlackSimPlugin
|
||||
|
||||
void CSimulatorFsx::setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset)
|
||||
{
|
||||
this->m_syncTime = enable;
|
||||
this->m_simTimeSynced = enable;
|
||||
this->m_syncTimeOffset = offset;
|
||||
}
|
||||
|
||||
@@ -314,6 +328,7 @@ namespace BlackSimPlugin
|
||||
SIMCONNECT_DATA_REQUEST_FLAG_CHANGED);
|
||||
|
||||
emit simulatorStarted();
|
||||
emitSimulatorCombinedStatus();
|
||||
}
|
||||
|
||||
void CSimulatorFsx::onSimStopped()
|
||||
@@ -321,6 +336,7 @@ namespace BlackSimPlugin
|
||||
if (!m_simRunning) return;
|
||||
m_simRunning = false;
|
||||
emit simulatorStopped();
|
||||
emitSimulatorCombinedStatus();
|
||||
}
|
||||
|
||||
void CSimulatorFsx::onSimFrame()
|
||||
@@ -414,12 +430,17 @@ namespace BlackSimPlugin
|
||||
initEvents();
|
||||
initDataDefinitions();
|
||||
m_simconnectTimerId = startTimer(50);
|
||||
m_isConnected = true;
|
||||
m_simConnected = true;
|
||||
|
||||
emit statusChanged(Connected);
|
||||
emit connectionStatusChanged(Connected);
|
||||
emitSimulatorCombinedStatus();
|
||||
}
|
||||
else
|
||||
emit statusChanged(ConnectionFailed);
|
||||
{
|
||||
m_simConnected = false;
|
||||
emit connectionStatusChanged(ConnectionFailed);
|
||||
emitSimulatorCombinedStatus();
|
||||
}
|
||||
}
|
||||
|
||||
void CSimulatorFsx::removeRemoteAircraft(const CSimConnectObject &simObject)
|
||||
@@ -515,7 +536,7 @@ namespace BlackSimPlugin
|
||||
|
||||
void CSimulatorFsx::synchronizeTime(const CTime &zuluTimeSim, const CTime &localTimeSim)
|
||||
{
|
||||
if (!this->m_syncTime) return;
|
||||
if (!this->m_simTimeSynced) return;
|
||||
if (!this->isConnected()) return;
|
||||
if (m_syncDeferredCounter > 0)
|
||||
{
|
||||
|
||||
@@ -92,11 +92,14 @@ namespace BlackSimPlugin
|
||||
//! \copydoc ISimulator::isConnected()
|
||||
virtual bool isConnected() const override;
|
||||
|
||||
//! \copydoc ISimulator::isRunning
|
||||
virtual bool isRunning() const override;
|
||||
|
||||
//! FSUIPC connected?
|
||||
bool isFsuipcConnected() const;
|
||||
|
||||
//! \copydoc ISimulator::canConnect()
|
||||
virtual bool canConnect() override;
|
||||
virtual bool canConnect() const override;
|
||||
|
||||
//! SimConnect Callback
|
||||
static void CALLBACK SimConnectProc(SIMCONNECT_RECV *pData, DWORD cbData, void *pContext);
|
||||
@@ -150,13 +153,13 @@ namespace BlackSimPlugin
|
||||
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override;
|
||||
|
||||
//! \copydoc ISimulator::isTimeSynchronized
|
||||
virtual bool isTimeSynchronized() const override { return m_syncTime; }
|
||||
virtual bool isTimeSynchronized() const override { return m_simTimeSynced; }
|
||||
|
||||
//! \copydoc ISimulator::getTimeSynchronizationOffset
|
||||
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override { return m_syncTimeOffset; }
|
||||
|
||||
//! \copydoc ISimulator::isSimPaused
|
||||
virtual bool isSimPaused() const override { return m_simPaused; }
|
||||
virtual bool isPaused() const override { return m_simPaused; }
|
||||
|
||||
//! Called when sim has started
|
||||
void onSimRunning();
|
||||
@@ -213,10 +216,10 @@ namespace BlackSimPlugin
|
||||
void synchronizeTime(const BlackMisc::PhysicalQuantities::CTime &zuluTimeSim, const BlackMisc::PhysicalQuantities::CTime &localTimeSim);
|
||||
|
||||
static const int SkipUpdateCyclesForCockpit = 10; //!< skip x cycles before updating cockpit again
|
||||
bool m_isConnected = false; //!< Is simulator connected?
|
||||
bool m_simRunning = false; //!< Simulator running?
|
||||
bool m_simPaused = false; //!< Simulator paused?
|
||||
bool m_syncTime = false; //!< Time synchronized?
|
||||
bool m_simConnected = false; //!< Is simulator connected?
|
||||
bool m_simRunning = false; //!< Simulator running?
|
||||
bool m_simPaused = false; //!< Simulator paused?
|
||||
bool m_simTimeSynced = false; //!< Time synchronized?
|
||||
int m_syncDeferredCounter = 0; //!< Set when synchronized, used to wait some time
|
||||
BlackMisc::PhysicalQuantities::CTime m_syncTimeOffset;
|
||||
HANDLE m_hSimConnect; //!< Handle to SimConnect object
|
||||
|
||||
@@ -71,14 +71,12 @@ namespace BlackSimPlugin
|
||||
return m_service && m_traffic;
|
||||
}
|
||||
|
||||
bool CSimulatorXPlane::canConnect()
|
||||
bool CSimulatorXPlane::canConnect() const
|
||||
{
|
||||
if (isConnected()) { return true; }
|
||||
auto conn = QDBusConnection::sessionBus(); // TODO make this configurable
|
||||
auto dummy = new CXBusServiceProxy(conn, this, true);
|
||||
bool ok = dummy->isValid();
|
||||
delete dummy;
|
||||
return ok;
|
||||
CXBusServiceProxy dummy(conn, nullptr, true);
|
||||
return dummy.isValid();
|
||||
}
|
||||
|
||||
bool CSimulatorXPlane::connectTo()
|
||||
@@ -94,7 +92,7 @@ namespace BlackSimPlugin
|
||||
connect(m_service, &CXBusServiceProxy::airportsInRangeUpdated, this, &CSimulatorXPlane::ps_setAirportsInRange);
|
||||
m_service->updateAirportsInRange();
|
||||
m_watcher->setConnection(m_conn);
|
||||
emit statusChanged(ISimulator::Connected);
|
||||
emit connectionStatusChanged(ISimulator::Connected);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
@@ -116,7 +114,7 @@ namespace BlackSimPlugin
|
||||
{
|
||||
m_traffic->cleanup();
|
||||
}
|
||||
emit statusChanged(ISimulator::Disconnected);
|
||||
emit connectionStatusChanged(ISimulator::Disconnected);
|
||||
m_conn = QDBusConnection { "default" };
|
||||
m_watcher->setConnection(m_conn);
|
||||
delete m_service;
|
||||
@@ -144,7 +142,7 @@ namespace BlackSimPlugin
|
||||
}
|
||||
if (m_service && m_traffic)
|
||||
{
|
||||
emit statusChanged(ISimulator::Connected);
|
||||
emit connectionStatusChanged(ISimulator::Connected);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,7 +152,7 @@ namespace BlackSimPlugin
|
||||
delete m_traffic;
|
||||
m_service = nullptr;
|
||||
m_traffic = nullptr;
|
||||
emit statusChanged(ISimulator::Disconnected);
|
||||
emit connectionStatusChanged(ISimulator::Disconnected);
|
||||
}
|
||||
|
||||
void CSimulatorXPlane::ps_emitAircraftModelChanged(const QString &path, const QString &filename, const QString &livery, const QString &icao)
|
||||
|
||||
@@ -36,7 +36,16 @@ namespace BlackSimPlugin
|
||||
virtual bool isConnected() const override;
|
||||
|
||||
//! \copydoc BlackCore::ISimulator::canConnect
|
||||
virtual bool canConnect() override;
|
||||
virtual bool canConnect() const override;
|
||||
|
||||
//! \copydoc ISimulator::isTimeSynchronized
|
||||
virtual bool isTimeSynchronized() const override { return false; } // TODO: Can we query the XP intrinisc feature?
|
||||
|
||||
//! \copydoc ISimulator::isSimPaused
|
||||
virtual bool isPaused() const override { return false; }
|
||||
|
||||
//! \copydoc ISimulator::isRunning
|
||||
virtual bool isRunning() const override { return isConnected(); }
|
||||
|
||||
public slots:
|
||||
//! \copydoc BlackCore::ISimulator::connectTo
|
||||
@@ -86,15 +95,9 @@ namespace BlackSimPlugin
|
||||
//! \copydoc ISimulator::setTimeSynchronization
|
||||
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override;
|
||||
|
||||
//! \copydoc ISimulator::isTimeSynchronized
|
||||
virtual bool isTimeSynchronized() const override { return false; } // TODO: Can we query the XP intrinisc feature?
|
||||
|
||||
//! \copydoc ISimulator::getTimeSynchronizationOffset
|
||||
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override { return BlackMisc::PhysicalQuantities::CTime(0, BlackMisc::PhysicalQuantities::CTimeUnit::hrmin()); }
|
||||
|
||||
//! \copydoc ISimulator::isSimPaused
|
||||
virtual bool isSimPaused() const override { return false; }
|
||||
|
||||
private slots:
|
||||
void ps_serviceRegistered(const QString &serviceName);
|
||||
void ps_serviceUnregistered();
|
||||
|
||||
Reference in New Issue
Block a user