mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-02 15:15:39 +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()
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QtConcurrent/QtConcurrent>
|
||||||
|
|
||||||
namespace BlackCore
|
namespace BlackCore
|
||||||
{
|
{
|
||||||
@@ -39,13 +40,16 @@ namespace BlackCore
|
|||||||
//! \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()
|
||||||
@@ -88,6 +92,7 @@ namespace BlackCore
|
|||||||
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"));
|
||||||
|
|||||||
@@ -42,13 +42,16 @@ namespace BlackCore
|
|||||||
//! \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()
|
||||||
|
|||||||
Reference in New Issue
Block a user