mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-01 22:55:41 +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
|
//! \brief Connect to simulator
|
||||||
virtual bool connectTo() = 0;
|
virtual bool connectTo() = 0;
|
||||||
|
|
||||||
|
//! \brief Connect to simulator (asynchronous version)
|
||||||
|
virtual void asyncConnectTo() = 0;
|
||||||
|
|
||||||
//! \brief Disconnect from simulator
|
//! \brief Disconnect from simulator
|
||||||
virtual bool disconnectFrom() = 0;
|
virtual bool disconnectFrom() = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace BlackCore
|
|||||||
loadSimulatorPlugin(CSimulatorInfo::FSX());
|
loadSimulatorPlugin(CSimulatorInfo::FSX());
|
||||||
|
|
||||||
connect(m_updateTimer, &QTimer::timeout, this, &CContextSimulator::updateOwnAircraft);
|
connect(m_updateTimer, &QTimer::timeout, this, &CContextSimulator::updateOwnAircraft);
|
||||||
connectTo();
|
asyncConnectTo();
|
||||||
}
|
}
|
||||||
|
|
||||||
CContextSimulator::~CContextSimulator()
|
CContextSimulator::~CContextSimulator()
|
||||||
@@ -36,7 +36,7 @@ namespace BlackCore
|
|||||||
CSimulatorInfoList CContextSimulator::getAvailableSimulatorPlugins() const
|
CSimulatorInfoList CContextSimulator::getAvailableSimulatorPlugins() const
|
||||||
{
|
{
|
||||||
CSimulatorInfoList simulatorPlugins;
|
CSimulatorInfoList simulatorPlugins;
|
||||||
foreach(ISimulatorFactory *factory, m_simulatorFactories)
|
foreach(ISimulatorFactory * factory, m_simulatorFactories)
|
||||||
{
|
{
|
||||||
simulatorPlugins.push_back(factory->getSimulatorInfo());
|
simulatorPlugins.push_back(factory->getSimulatorInfo());
|
||||||
}
|
}
|
||||||
@@ -64,6 +64,13 @@ namespace BlackCore
|
|||||||
return m_simulator->connectTo();
|
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()
|
bool CContextSimulator::disconnectFrom()
|
||||||
{
|
{
|
||||||
if (this->getRuntime()->isSlotLogForSimulatorEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO);
|
if (this->getRuntime()->isSlotLogForSimulatorEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO);
|
||||||
@@ -87,12 +94,12 @@ namespace BlackCore
|
|||||||
bool CContextSimulator::loadSimulatorPlugin(const CSimulatorInfo &simulatorInfo)
|
bool CContextSimulator::loadSimulatorPlugin(const CSimulatorInfo &simulatorInfo)
|
||||||
{
|
{
|
||||||
ISimulatorFactory *factory = nullptr;
|
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;
|
return factory->getSimulatorInfo() == simulatorInfo;
|
||||||
});
|
});
|
||||||
|
|
||||||
if(iterator == m_simulatorFactories.end())
|
if (iterator == m_simulatorFactories.end())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
factory = *iterator;
|
factory = *iterator;
|
||||||
@@ -107,7 +114,7 @@ namespace BlackCore
|
|||||||
|
|
||||||
void CContextSimulator::unloadSimulatorPlugin()
|
void CContextSimulator::unloadSimulatorPlugin()
|
||||||
{
|
{
|
||||||
if(m_simulator)
|
if (m_simulator)
|
||||||
m_simulator->deleteLater();
|
m_simulator->deleteLater();
|
||||||
|
|
||||||
m_simulator = nullptr;
|
m_simulator = nullptr;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QtConcurrent/QtConcurrent>
|
||||||
|
|
||||||
namespace BlackCore
|
namespace BlackCore
|
||||||
{
|
{
|
||||||
@@ -35,17 +36,20 @@ namespace BlackCore
|
|||||||
|
|
||||||
//! \copydoc IContextSimulator::getSimulatorPluginList()
|
//! \copydoc IContextSimulator::getSimulatorPluginList()
|
||||||
virtual BlackSim::CSimulatorInfoList getAvailableSimulatorPlugins() const override;
|
virtual BlackSim::CSimulatorInfoList getAvailableSimulatorPlugins() const override;
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::isConnected()
|
//! \copydoc IContextSimulator::isConnected()
|
||||||
virtual bool isConnected() const override;
|
virtual bool isConnected() const override;
|
||||||
|
|
||||||
//! \brief Can we connect?
|
//! \copydoc IContextSimulator::canConnect
|
||||||
virtual bool canConnect() override;
|
virtual bool canConnect() override;
|
||||||
|
|
||||||
//! \brief Connect to simulator
|
//! \copydoc IContextSimulator::connectTo
|
||||||
virtual bool connectTo() override;
|
virtual bool connectTo() override;
|
||||||
|
|
||||||
//! \brief Disconnect from simulator
|
//! \copydoc IContextSimulator::asyncConnectTo
|
||||||
|
virtual void asyncConnectTo() override;
|
||||||
|
|
||||||
|
//! \copydoc IContextSimulator::disconnectFrom
|
||||||
virtual bool disconnectFrom() override;
|
virtual bool disconnectFrom() override;
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::getOwnAircraft()
|
//! \copydoc IContextSimulator::getOwnAircraft()
|
||||||
@@ -55,10 +59,10 @@ namespace BlackCore
|
|||||||
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
|
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::loadSimulatorPlugin()
|
//! \copydoc IContextSimulator::loadSimulatorPlugin()
|
||||||
virtual bool loadSimulatorPlugin (const BlackSim::CSimulatorInfo &simulatorInfo) override;
|
virtual bool loadSimulatorPlugin(const BlackSim::CSimulatorInfo &simulatorInfo) override;
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::unloadSimulatorPlugin()
|
//! \copydoc IContextSimulator::unloadSimulatorPlugin()
|
||||||
virtual void unloadSimulatorPlugin () override;
|
virtual void unloadSimulatorPlugin() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! \brief Constructor
|
//! \brief Constructor
|
||||||
@@ -87,7 +91,8 @@ namespace BlackCore
|
|||||||
BlackCore::ISimulator *m_simulator;
|
BlackCore::ISimulator *m_simulator;
|
||||||
QTimer *m_updateTimer;
|
QTimer *m_updateTimer;
|
||||||
QDir m_pluginsDir;
|
QDir m_pluginsDir;
|
||||||
QSet<ISimulatorFactory*> m_simulatorFactories;
|
QSet<ISimulatorFactory *> m_simulatorFactories;
|
||||||
|
QFuture<bool> m_canConnectResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace BlackCore
|
} // namespace BlackCore
|
||||||
|
|||||||
@@ -48,6 +48,11 @@ namespace BlackCore
|
|||||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("connectTo"));
|
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("connectTo"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CContextSimulatorProxy::asyncConnectTo()
|
||||||
|
{
|
||||||
|
m_dBusInterface->callDBus(QLatin1Literal("asyncConnectTo"));
|
||||||
|
}
|
||||||
|
|
||||||
bool CContextSimulatorProxy::disconnectFrom()
|
bool CContextSimulatorProxy::disconnectFrom()
|
||||||
{
|
{
|
||||||
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("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);
|
CContextSimulatorProxy(const QString &serviceName, QDBusConnection &connection, CRuntimeConfig::ContextMode mode, CRuntime *runtime);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::getSimulatorPluginList()
|
//! \copydoc IContextSimulator::getSimulatorPluginList()
|
||||||
virtual BlackSim::CSimulatorInfoList getAvailableSimulatorPlugins() const override;
|
virtual BlackSim::CSimulatorInfoList getAvailableSimulatorPlugins() const override;
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::isConnected()
|
//! \copydoc IContextSimulator::isConnected()
|
||||||
virtual bool isConnected() const override;
|
virtual bool isConnected() const override;
|
||||||
|
|
||||||
//! \brief Can we connect?
|
//! \copydoc IContextSimulator::canConnect
|
||||||
virtual bool canConnect() override;
|
virtual bool canConnect() override;
|
||||||
|
|
||||||
//! \brief Connect to simulator
|
//! \copydoc IContextSimulator::connectTo
|
||||||
virtual bool connectTo() override;
|
virtual bool connectTo() override;
|
||||||
|
|
||||||
//! \brief Disconnect from simulator
|
//! \copydoc IContextSimulator::asyncConnectTo
|
||||||
|
virtual void asyncConnectTo() override;
|
||||||
|
|
||||||
|
//! \copydoc IContextSimulator::disconnectFrom
|
||||||
virtual bool disconnectFrom() override;
|
virtual bool disconnectFrom() override;
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::getOwnAircraft()
|
//! \copydoc IContextSimulator::getOwnAircraft()
|
||||||
@@ -58,10 +61,10 @@ namespace BlackCore
|
|||||||
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
|
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::loadSimulatorPlugin
|
//! \copydoc IContextSimulator::loadSimulatorPlugin
|
||||||
virtual bool loadSimulatorPlugin (const BlackSim::CSimulatorInfo &simulatorInfo) override;
|
virtual bool loadSimulatorPlugin(const BlackSim::CSimulatorInfo &simulatorInfo) override;
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::unloadSimulatorPlugin()
|
//! \copydoc IContextSimulator::unloadSimulatorPlugin()
|
||||||
virtual void unloadSimulatorPlugin () override;
|
virtual void unloadSimulatorPlugin() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace BlackCore
|
} // namespace BlackCore
|
||||||
|
|||||||
Reference in New Issue
Block a user