mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-28 11:45:40 +08:00
Ref T312, added checkImpl/check in simulator listeners
This commit is contained in:
@@ -342,7 +342,7 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
void CSimulatorEmulated::onSettingsChanged()
|
void CSimulatorEmulated::onSettingsChanged()
|
||||||
{
|
{
|
||||||
const CSwiftPluginSettings settings(m_settings.get());
|
const CSwiftPluginSettings settings(m_pluginSettings.get());
|
||||||
m_log = settings.isLoggingFunctionCalls();
|
m_log = settings.isLoggingFunctionCalls();
|
||||||
|
|
||||||
const CSimulatorInfo simulator = settings.getEmulatedSimulator();
|
const CSimulatorInfo simulator = settings.getEmulatedSimulator();
|
||||||
@@ -446,7 +446,7 @@ namespace BlackSimPlugin
|
|||||||
const QPointer<CSimulatorEmulatedListener> guard(this);
|
const QPointer<CSimulatorEmulatedListener> guard(this);
|
||||||
QTimer::singleShot(2000, this, [ = ]
|
QTimer::singleShot(2000, this, [ = ]
|
||||||
{
|
{
|
||||||
if (guard.isNull()) { return; }
|
if (!guard) { return; }
|
||||||
Q_ASSERT_X(this->getPluginInfo().isValid(), Q_FUNC_INFO, "Invalid plugin");
|
Q_ASSERT_X(this->getPluginInfo().isValid(), Q_FUNC_INFO, "Invalid plugin");
|
||||||
emit this->simulatorStarted(this->getPluginInfo());
|
emit this->simulatorStarted(this->getPluginInfo());
|
||||||
});
|
});
|
||||||
@@ -454,5 +454,10 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
void CSimulatorEmulatedListener::stopImpl()
|
void CSimulatorEmulatedListener::stopImpl()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
void CSimulatorEmulatedListener::checkImpl()
|
||||||
|
{
|
||||||
|
this->startImpl();
|
||||||
|
}
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ namespace BlackSimPlugin
|
|||||||
BlackMisc::Simulation::CSimulatedAircraftList m_renderedAircraft; //!< represents remote aircraft in simulator
|
BlackMisc::Simulation::CSimulatedAircraftList m_renderedAircraft; //!< represents remote aircraft in simulator
|
||||||
QScopedPointer<CSimulatorEmulatedMonitorDialog> m_monitorWidget; //!< parent will be main window, so we need to destroy widget when destroyed
|
QScopedPointer<CSimulatorEmulatedMonitorDialog> m_monitorWidget; //!< parent will be main window, so we need to destroy widget when destroyed
|
||||||
BlackMisc::CConnectionGuard m_connectionGuard; //!< connected with provider
|
BlackMisc::CConnectionGuard m_connectionGuard; //!< connected with provider
|
||||||
BlackMisc::CSettingReadOnly<BlackMisc::Simulation::Settings::TSwiftPlugin> m_settings { this, &CSimulatorEmulated::onSettingsChanged };
|
BlackMisc::CSettingReadOnly<BlackMisc::Simulation::Settings::TSwiftPlugin> m_pluginSettings { this, &CSimulatorEmulated::onSettingsChanged };
|
||||||
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Simulation::CInterpolatorMultiWrapper> m_interpolators; //!< interpolators per callsign
|
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Simulation::CInterpolatorMultiWrapper> m_interpolators; //!< interpolators per callsign
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -187,6 +187,9 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
||||||
virtual void stopImpl() override;
|
virtual void stopImpl() override;
|
||||||
|
|
||||||
|
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
||||||
|
virtual void checkImpl() override;
|
||||||
};
|
};
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ using namespace BlackMisc::Network;
|
|||||||
using namespace BlackMisc::Simulation;
|
using namespace BlackMisc::Simulation;
|
||||||
using namespace BlackMisc::Simulation::FsCommon;
|
using namespace BlackMisc::Simulation::FsCommon;
|
||||||
using namespace BlackMisc::Weather;
|
using namespace BlackMisc::Weather;
|
||||||
using namespace BlackSimPlugin::Fs9;
|
using namespace BlackCore;
|
||||||
using namespace BlackSimPlugin::FsCommon;
|
using namespace BlackSimPlugin::FsCommon;
|
||||||
|
|
||||||
namespace BlackSimPlugin
|
namespace BlackSimPlugin
|
||||||
@@ -86,9 +86,9 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
FS_PBH pbhstrct;
|
FS_PBH pbhstrct;
|
||||||
pbhstrct.pbh = positionVelocity.pbh;
|
pbhstrct.pbh = positionVelocity.pbh;
|
||||||
int pitch = std::floor(pbhstrct.pitch / CFs9Sdk::pitchMultiplier());
|
int pitch = qRound(std::floor(pbhstrct.pitch / CFs9Sdk::pitchMultiplier()));
|
||||||
if (pitch < -90 || pitch > 89) { CLogMessage().warning("FS9: Pitch value out of limits: %1") << pitch; }
|
if (pitch < -90 || pitch > 89) { CLogMessage().warning("FS9: Pitch value out of limits: %1") << pitch; }
|
||||||
int bank = std::floor(pbhstrct.bank / CFs9Sdk::bankMultiplier());
|
int bank = qRound(std::floor(pbhstrct.bank / CFs9Sdk::bankMultiplier()));
|
||||||
|
|
||||||
// MSFS has inverted pitch and bank angles
|
// MSFS has inverted pitch and bank angles
|
||||||
pitch = ~pitch;
|
pitch = ~pitch;
|
||||||
@@ -260,21 +260,21 @@ namespace BlackSimPlugin
|
|||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorFs9::displayStatusMessage(const BlackMisc::CStatusMessage &message) const
|
void CSimulatorFs9::displayStatusMessage(const CStatusMessage &message) const
|
||||||
{
|
{
|
||||||
// Avoid errors from CDirectPlayPeer as it may end in infinite loop
|
// Avoid errors from CDirectPlayPeer as it may end in infinite loop
|
||||||
if (message.getSeverity() == BlackMisc::CStatusMessage::SeverityError && message.isFromClass<CDirectPlayPeer>())
|
if (message.getSeverity() == CStatusMessage::SeverityError && message.isFromClass<CDirectPlayPeer>())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.getSeverity() != BlackMisc::CStatusMessage::SeverityDebug)
|
if (message.getSeverity() != CStatusMessage::SeverityDebug)
|
||||||
{
|
{
|
||||||
QMetaObject::invokeMethod(m_fs9Host.data(), "sendTextMessage", Q_ARG(QString, message.toQString()));
|
QMetaObject::invokeMethod(m_fs9Host.data(), "sendTextMessage", Q_ARG(QString, message.toQString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorFs9::displayTextMessage(const BlackMisc::Network::CTextMessage &message) const
|
void CSimulatorFs9::displayTextMessage(const CTextMessage &message) const
|
||||||
{
|
{
|
||||||
this->displayStatusMessage(message.asStatusMessage(true, true));
|
this->displayStatusMessage(message.asStatusMessage(true, true));
|
||||||
}
|
}
|
||||||
@@ -385,7 +385,7 @@ namespace BlackSimPlugin
|
|||||||
CSimulatorFs9Listener::CSimulatorFs9Listener(const CSimulatorPluginInfo &info,
|
CSimulatorFs9Listener::CSimulatorFs9Listener(const CSimulatorPluginInfo &info,
|
||||||
const QSharedPointer<CFs9Host> &fs9Host,
|
const QSharedPointer<CFs9Host> &fs9Host,
|
||||||
const QSharedPointer<CLobbyClient> &lobbyClient) :
|
const QSharedPointer<CLobbyClient> &lobbyClient) :
|
||||||
BlackCore::ISimulatorListener(info),
|
ISimulatorListener(info),
|
||||||
m_timer(new QTimer(this)),
|
m_timer(new QTimer(this)),
|
||||||
m_fs9Host(fs9Host),
|
m_fs9Host(fs9Host),
|
||||||
m_lobbyClient(lobbyClient)
|
m_lobbyClient(lobbyClient)
|
||||||
@@ -395,26 +395,12 @@ namespace BlackSimPlugin
|
|||||||
m_timer->setObjectName(this->objectName() + ":m_timer");
|
m_timer->setObjectName(this->objectName() + ":m_timer");
|
||||||
|
|
||||||
// Test whether we can lobby connect at all.
|
// Test whether we can lobby connect at all.
|
||||||
bool canLobbyConnect = m_lobbyClient->canLobbyConnect();
|
const bool canLobbyConnect = m_lobbyClient->canLobbyConnect();
|
||||||
|
|
||||||
connect(m_timer, &QTimer::timeout, [this, canLobbyConnect]()
|
// check connection
|
||||||
|
connect(m_timer, &QTimer::timeout, [ = ]()
|
||||||
{
|
{
|
||||||
if (m_fs9Host->getHostAddress().isEmpty()) { return; } // host not yet set up
|
this->checkConnection(canLobbyConnect);
|
||||||
if (canLobbyConnect)
|
|
||||||
{
|
|
||||||
if (m_isConnecting || m_lobbyClient->connectFs9ToHost(m_fs9Host->getHostAddress()) == S_OK)
|
|
||||||
{
|
|
||||||
m_isConnecting = true;
|
|
||||||
CLogMessage(this).info("swift is joining FS9 to the multiplayer session...");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_isStarted && m_fs9Host->isConnected())
|
|
||||||
{
|
|
||||||
emit simulatorStarted(getPluginInfo());
|
|
||||||
m_isStarted = true;
|
|
||||||
m_isConnecting = false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -429,6 +415,42 @@ namespace BlackSimPlugin
|
|||||||
m_timer->stop();
|
m_timer->stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSimulatorFs9Listener::checkImpl()
|
||||||
|
{
|
||||||
|
if (m_timer) { m_timer->start(); }
|
||||||
|
if (this->isShuttingDown()) { return; }
|
||||||
|
|
||||||
|
QPointer<CSimulatorFs9Listener> myself(this);
|
||||||
|
QTimer::singleShot(0, this, [ = ]
|
||||||
|
{
|
||||||
|
if (!myself) { return; }
|
||||||
|
const bool canLobbyConnect = m_lobbyClient->canLobbyConnect();
|
||||||
|
this->checkConnection(canLobbyConnect);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CSimulatorFs9Listener::checkConnection(bool canLobbyConnect)
|
||||||
|
{
|
||||||
|
if (m_fs9Host->getHostAddress().isEmpty()) { return false; } // host not yet set up
|
||||||
|
if (canLobbyConnect)
|
||||||
|
{
|
||||||
|
if (m_isConnecting || m_lobbyClient->connectFs9ToHost(m_fs9Host->getHostAddress()) == S_OK)
|
||||||
|
{
|
||||||
|
m_isConnecting = true;
|
||||||
|
CLogMessage(this).info("swift is joining FS9 to the multiplayer session...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_isStarted && m_fs9Host->isConnected())
|
||||||
|
{
|
||||||
|
m_isStarted = true;
|
||||||
|
m_isConnecting = false;
|
||||||
|
emit this->simulatorStarted(this->getPluginInfo());
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_isConnecting;
|
||||||
|
}
|
||||||
|
|
||||||
static void cleanupFs9Host(CFs9Host *host)
|
static void cleanupFs9Host(CFs9Host *host)
|
||||||
{
|
{
|
||||||
host->quitAndWait();
|
host->quitAndWait();
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ namespace BlackSimPlugin
|
|||||||
QObject *parent = nullptr);
|
QObject *parent = nullptr);
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~CSimulatorFs9() = default;
|
virtual ~CSimulatorFs9() override = default;
|
||||||
|
|
||||||
//! \name Interface implementations
|
//! \name Interface implementations
|
||||||
//! \@{
|
//! \@{
|
||||||
@@ -125,7 +125,13 @@ namespace BlackSimPlugin
|
|||||||
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
||||||
virtual void stopImpl() override;
|
virtual void stopImpl() override;
|
||||||
|
|
||||||
|
//! \copydoc BlackCore::ISimulatorListener::checkImpl
|
||||||
|
virtual void checkImpl() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
//! Check connection to FS9
|
||||||
|
bool checkConnection(bool canLobbyConnect);
|
||||||
|
|
||||||
QTimer *m_timer = nullptr;
|
QTimer *m_timer = nullptr;
|
||||||
bool m_isConnecting = false;
|
bool m_isConnecting = false;
|
||||||
bool m_isStarted = false;
|
bool m_isStarted = false;
|
||||||
@@ -145,7 +151,7 @@ namespace BlackSimPlugin
|
|||||||
CSimulatorFs9Factory(QObject *parent = nullptr);
|
CSimulatorFs9Factory(QObject *parent = nullptr);
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~CSimulatorFs9Factory();
|
virtual ~CSimulatorFs9Factory() override;
|
||||||
|
|
||||||
//! \copydoc BlackCore::ISimulatorFactory::create
|
//! \copydoc BlackCore::ISimulatorFactory::create
|
||||||
virtual BlackCore::ISimulator *create(
|
virtual BlackCore::ISimulator *create(
|
||||||
|
|||||||
@@ -2101,6 +2101,20 @@ namespace BlackSimPlugin
|
|||||||
m_timer.stop();
|
m_timer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSimulatorFsxCommonListener::checkImpl()
|
||||||
|
{
|
||||||
|
if (!m_timer.isActive()) { return; }
|
||||||
|
if (this->isShuttingDown()) { return; }
|
||||||
|
|
||||||
|
m_timer.start(); // restart because we will check just now
|
||||||
|
QPointer<CSimulatorFsxCommonListener> myself(this);
|
||||||
|
QTimer::singleShot(0, this, [ = ]
|
||||||
|
{
|
||||||
|
if (!myself) { return; }
|
||||||
|
this->checkConnection();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
QString CSimulatorFsxCommonListener::backendInfo() const
|
QString CSimulatorFsxCommonListener::backendInfo() const
|
||||||
{
|
{
|
||||||
if (m_simulatorName.isEmpty()) { return ISimulatorListener::backendInfo(); }
|
if (m_simulatorName.isEmpty()) { return ISimulatorListener::backendInfo(); }
|
||||||
|
|||||||
@@ -521,6 +521,9 @@ namespace BlackSimPlugin
|
|||||||
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
||||||
virtual void stopImpl() override;
|
virtual void stopImpl() override;
|
||||||
|
|
||||||
|
//! \copydoc BlackCore::ISimulatorListener::checkImpl
|
||||||
|
virtual void checkImpl() override;
|
||||||
|
|
||||||
//! Test if connection can be established
|
//! Test if connection can be established
|
||||||
void checkConnection();
|
void checkConnection();
|
||||||
|
|
||||||
@@ -531,7 +534,7 @@ namespace BlackSimPlugin
|
|||||||
bool checkSimConnectDll() const;
|
bool checkSimConnectDll() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTimer m_timer { this }; //!< timer, "this" is needed otherwise warnings when move to new thread
|
QTimer m_timer { this }; //!< timer, "this" is needed otherwise I get warnings when move to new thread
|
||||||
QString m_simulatorVersion;
|
QString m_simulatorVersion;
|
||||||
QString m_simConnectVersion;
|
QString m_simConnectVersion;
|
||||||
QString m_simulatorName;
|
QString m_simulatorName;
|
||||||
|
|||||||
@@ -1096,11 +1096,11 @@ namespace BlackSimPlugin
|
|||||||
{
|
{
|
||||||
QString dbusAddress = m_xswiftbusServerSetting.getThreadLocal();
|
QString dbusAddress = m_xswiftbusServerSetting.getThreadLocal();
|
||||||
|
|
||||||
if (BlackMisc::CDBusServer::isSessionOrSystemAddress(dbusAddress))
|
if (CDBusServer::isSessionOrSystemAddress(dbusAddress))
|
||||||
{
|
{
|
||||||
checkConnectionViaBus(dbusAddress);
|
checkConnectionViaBus(dbusAddress);
|
||||||
}
|
}
|
||||||
else if (BlackMisc::CDBusServer::isQtDBusAddress(dbusAddress))
|
else if (CDBusServer::isQtDBusAddress(dbusAddress))
|
||||||
{
|
{
|
||||||
m_timer.start();
|
m_timer.start();
|
||||||
}
|
}
|
||||||
@@ -1121,6 +1121,20 @@ namespace BlackSimPlugin
|
|||||||
m_timer.stop();
|
m_timer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSimulatorXPlaneListener::checkImpl()
|
||||||
|
{
|
||||||
|
if (!m_timer.isActive()) { return; }
|
||||||
|
if (this->isShuttingDown()) { return; }
|
||||||
|
|
||||||
|
m_timer.start(); // restart because we will check just now
|
||||||
|
QPointer<CSimulatorXPlaneListener> myself(this);
|
||||||
|
QTimer::singleShot(0, this, [ = ]
|
||||||
|
{
|
||||||
|
if (!myself) { return; }
|
||||||
|
this->checkConnectionViaPeer();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void CSimulatorXPlaneListener::checkConnectionViaBus(const QString &address)
|
void CSimulatorXPlaneListener::checkConnectionViaBus(const QString &address)
|
||||||
{
|
{
|
||||||
if (m_watcher) { return; }
|
if (m_watcher) { return; }
|
||||||
@@ -1148,7 +1162,7 @@ namespace BlackSimPlugin
|
|||||||
void CSimulatorXPlaneListener::checkConnectionViaPeer()
|
void CSimulatorXPlaneListener::checkConnectionViaPeer()
|
||||||
{
|
{
|
||||||
m_conn = QDBusConnection::connectToPeer(m_xswiftbusServerSetting.getThreadLocal(), "xswiftbus");
|
m_conn = QDBusConnection::connectToPeer(m_xswiftbusServerSetting.getThreadLocal(), "xswiftbus");
|
||||||
if (! m_conn.isConnected())
|
if (!m_conn.isConnected())
|
||||||
{
|
{
|
||||||
// This is required to cleanup the connection in QtDBus
|
// This is required to cleanup the connection in QtDBus
|
||||||
m_conn.disconnectFromPeer(m_conn.name());
|
m_conn.disconnectFromPeer(m_conn.name());
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ namespace BlackSimPlugin
|
|||||||
QObject *parent = nullptr);
|
QObject *parent = nullptr);
|
||||||
|
|
||||||
//! Dtor
|
//! Dtor
|
||||||
virtual ~CSimulatorXPlane();
|
virtual ~CSimulatorXPlane() override;
|
||||||
|
|
||||||
//! \name ISimulator implementations
|
//! \name ISimulator implementations
|
||||||
//! @{
|
//! @{
|
||||||
@@ -273,6 +273,9 @@ namespace BlackSimPlugin
|
|||||||
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
//! \copydoc BlackCore::ISimulatorListener::stopImpl
|
||||||
virtual void stopImpl() override;
|
virtual void stopImpl() override;
|
||||||
|
|
||||||
|
//! \copydoc BlackCore::ISimulatorListener::checkImpl
|
||||||
|
virtual void checkImpl() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Check if XSwiftBus service is already registered on the bus
|
//! Check if XSwiftBus service is already registered on the bus
|
||||||
void checkConnectionViaBus(const QString &address);
|
void checkConnectionViaBus(const QString &address);
|
||||||
|
|||||||
Reference in New Issue
Block a user