mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 04:25:35 +08:00
refs #187, asyncConnectTo method to avoid freeze when starting GUI/Core
* as discussed in https://dev.vatsim-germany.org/issues/187#change-1183 * using no longer connectTo() but asyncConnectTo() in constructor of simulator context * changed Interface doxygen comments to copydoc
This commit is contained in:
@@ -62,6 +62,9 @@ namespace BlackCore
|
||||
//! \brief Connect to simulator
|
||||
virtual bool connectTo() = 0;
|
||||
|
||||
//! \brief Connect to simulator (asynchronous version)
|
||||
virtual void asyncConnectTo() = 0;
|
||||
|
||||
//! \brief Disconnect from simulator
|
||||
virtual bool disconnectFrom() = 0;
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace BlackCore
|
||||
loadSimulatorPlugin(CSimulatorInfo::FSX());
|
||||
|
||||
connect(m_updateTimer, &QTimer::timeout, this, &CContextSimulator::updateOwnAircraft);
|
||||
connectTo();
|
||||
asyncConnectTo();
|
||||
}
|
||||
|
||||
CContextSimulator::~CContextSimulator()
|
||||
@@ -36,7 +36,7 @@ namespace BlackCore
|
||||
CSimulatorInfoList CContextSimulator::getAvailableSimulatorPlugins() const
|
||||
{
|
||||
CSimulatorInfoList simulatorPlugins;
|
||||
foreach(ISimulatorFactory *factory, m_simulatorFactories)
|
||||
foreach(ISimulatorFactory * factory, m_simulatorFactories)
|
||||
{
|
||||
simulatorPlugins.push_back(factory->getSimulatorInfo());
|
||||
}
|
||||
@@ -64,6 +64,13 @@ namespace BlackCore
|
||||
return m_simulator->connectTo();
|
||||
}
|
||||
|
||||
void CContextSimulator::asyncConnectTo()
|
||||
{
|
||||
if (this->getRuntime()->isSlotLogForSimulatorEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO);
|
||||
if (!m_simulator || m_canConnectResult.isRunning()) return; // already checking
|
||||
this->m_canConnectResult = QtConcurrent::run(this, &CContextSimulator::connectTo);
|
||||
}
|
||||
|
||||
bool CContextSimulator::disconnectFrom()
|
||||
{
|
||||
if (this->getRuntime()->isSlotLogForSimulatorEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO);
|
||||
@@ -87,12 +94,12 @@ namespace BlackCore
|
||||
bool CContextSimulator::loadSimulatorPlugin(const CSimulatorInfo &simulatorInfo)
|
||||
{
|
||||
ISimulatorFactory *factory = nullptr;
|
||||
QSet<ISimulatorFactory*>::iterator iterator = std::find_if(m_simulatorFactories.begin(), m_simulatorFactories.end(), [ = ](const ISimulatorFactory *factory)
|
||||
QSet<ISimulatorFactory *>::iterator iterator = std::find_if(m_simulatorFactories.begin(), m_simulatorFactories.end(), [ = ](const ISimulatorFactory * factory)
|
||||
{
|
||||
return factory->getSimulatorInfo() == simulatorInfo;
|
||||
});
|
||||
|
||||
if(iterator == m_simulatorFactories.end())
|
||||
if (iterator == m_simulatorFactories.end())
|
||||
return false;
|
||||
|
||||
factory = *iterator;
|
||||
@@ -107,7 +114,7 @@ namespace BlackCore
|
||||
|
||||
void CContextSimulator::unloadSimulatorPlugin()
|
||||
{
|
||||
if(m_simulator)
|
||||
if (m_simulator)
|
||||
m_simulator->deleteLater();
|
||||
|
||||
m_simulator = nullptr;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include <QTimer>
|
||||
#include <QDir>
|
||||
#include <QtConcurrent/QtConcurrent>
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
@@ -35,17 +36,20 @@ namespace BlackCore
|
||||
|
||||
//! \copydoc IContextSimulator::getSimulatorPluginList()
|
||||
virtual BlackSim::CSimulatorInfoList getAvailableSimulatorPlugins() const override;
|
||||
|
||||
|
||||
//! \copydoc IContextSimulator::isConnected()
|
||||
virtual bool isConnected() const override;
|
||||
|
||||
//! \brief Can we connect?
|
||||
//! \copydoc IContextSimulator::canConnect
|
||||
virtual bool canConnect() override;
|
||||
|
||||
//! \brief Connect to simulator
|
||||
//! \copydoc IContextSimulator::connectTo
|
||||
virtual bool connectTo() override;
|
||||
|
||||
//! \brief Disconnect from simulator
|
||||
//! \copydoc IContextSimulator::asyncConnectTo
|
||||
virtual void asyncConnectTo() override;
|
||||
|
||||
//! \copydoc IContextSimulator::disconnectFrom
|
||||
virtual bool disconnectFrom() override;
|
||||
|
||||
//! \copydoc IContextSimulator::getOwnAircraft()
|
||||
@@ -55,10 +59,10 @@ namespace BlackCore
|
||||
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::loadSimulatorPlugin()
|
||||
virtual bool loadSimulatorPlugin (const BlackSim::CSimulatorInfo &simulatorInfo) override;
|
||||
virtual bool loadSimulatorPlugin(const BlackSim::CSimulatorInfo &simulatorInfo) override;
|
||||
|
||||
//! \copydoc IContextSimulator::unloadSimulatorPlugin()
|
||||
virtual void unloadSimulatorPlugin () override;
|
||||
virtual void unloadSimulatorPlugin() override;
|
||||
|
||||
protected:
|
||||
//! \brief Constructor
|
||||
@@ -87,7 +91,8 @@ namespace BlackCore
|
||||
BlackCore::ISimulator *m_simulator;
|
||||
QTimer *m_updateTimer;
|
||||
QDir m_pluginsDir;
|
||||
QSet<ISimulatorFactory*> m_simulatorFactories;
|
||||
QSet<ISimulatorFactory *> m_simulatorFactories;
|
||||
QFuture<bool> m_canConnectResult;
|
||||
};
|
||||
|
||||
} // namespace BlackCore
|
||||
|
||||
@@ -48,6 +48,11 @@ namespace BlackCore
|
||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("connectTo"));
|
||||
}
|
||||
|
||||
void CContextSimulatorProxy::asyncConnectTo()
|
||||
{
|
||||
m_dBusInterface->callDBus(QLatin1Literal("asyncConnectTo"));
|
||||
}
|
||||
|
||||
bool CContextSimulatorProxy::disconnectFrom()
|
||||
{
|
||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("disconnectFrom"));
|
||||
|
||||
@@ -35,20 +35,23 @@ namespace BlackCore
|
||||
CContextSimulatorProxy(const QString &serviceName, QDBusConnection &connection, CRuntimeConfig::ContextMode mode, CRuntime *runtime);
|
||||
|
||||
public slots:
|
||||
|
||||
//! \copydoc IContextSimulator::getSimulatorPluginList()
|
||||
|
||||
//! \copydoc IContextSimulator::getSimulatorPluginList()
|
||||
virtual BlackSim::CSimulatorInfoList getAvailableSimulatorPlugins() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::isConnected()
|
||||
virtual bool isConnected() const override;
|
||||
|
||||
//! \brief Can we connect?
|
||||
//! \copydoc IContextSimulator::canConnect
|
||||
virtual bool canConnect() override;
|
||||
|
||||
//! \brief Connect to simulator
|
||||
//! \copydoc IContextSimulator::connectTo
|
||||
virtual bool connectTo() override;
|
||||
|
||||
//! \brief Disconnect from simulator
|
||||
//! \copydoc IContextSimulator::asyncConnectTo
|
||||
virtual void asyncConnectTo() override;
|
||||
|
||||
//! \copydoc IContextSimulator::disconnectFrom
|
||||
virtual bool disconnectFrom() override;
|
||||
|
||||
//! \copydoc IContextSimulator::getOwnAircraft()
|
||||
@@ -58,10 +61,10 @@ namespace BlackCore
|
||||
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
|
||||
|
||||
//! \copydoc IContextSimulator::loadSimulatorPlugin
|
||||
virtual bool loadSimulatorPlugin (const BlackSim::CSimulatorInfo &simulatorInfo) override;
|
||||
virtual bool loadSimulatorPlugin(const BlackSim::CSimulatorInfo &simulatorInfo) override;
|
||||
|
||||
//! \copydoc IContextSimulator::unloadSimulatorPlugin()
|
||||
virtual void unloadSimulatorPlugin () override;
|
||||
virtual void unloadSimulatorPlugin() override;
|
||||
};
|
||||
|
||||
} // namespace BlackCore
|
||||
|
||||
Reference in New Issue
Block a user