From 0b0a7783a0f6a69313b054a2ddc03ea0e1c55d42 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 27 Aug 2018 16:41:19 +0200 Subject: [PATCH] Ref T312, added check listener function in contexts --- src/blackcore/context/contextsimulator.h | 3 +++ src/blackcore/context/contextsimulatorempty.h | 14 ++++++++++---- src/blackcore/context/contextsimulatorimpl.cpp | 13 ++++++++++--- src/blackcore/context/contextsimulatorimpl.h | 1 + src/blackcore/context/contextsimulatorproxy.cpp | 5 +++++ src/blackcore/context/contextsimulatorproxy.h | 2 +- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index 5707f935c..1c6ec23b9 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -135,6 +135,9 @@ namespace BlackCore //! Return list of available simulator plugins virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const = 0; + //! Check all listeners enabled if simulator is connected + virtual int checkListeners() = 0; + //! Load and start specific simulator plugin virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) = 0; diff --git a/src/blackcore/context/contextsimulatorempty.h b/src/blackcore/context/contextsimulatorempty.h index 044b17174..81b3f2418 100644 --- a/src/blackcore/context/contextsimulatorempty.h +++ b/src/blackcore/context/contextsimulatorempty.h @@ -30,21 +30,21 @@ namespace BlackCore CContextSimulatorEmpty(CCoreFacade *runtime) : IContextSimulator(CCoreFacadeConfig::NotUsed, runtime) {} public slots: - //! \copydoc IContextSimulator::getSimulatorPluginInfo() + //! \copydoc IContextSimulator::getSimulatorPluginInfo virtual BlackMisc::Simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const override { logEmptyContextWarning(Q_FUNC_INFO); return BlackMisc::Simulation::CSimulatorPluginInfo(); } - //! \copydoc IContextSimulator::getAvailableSimulatorPlugins() + //! \copydoc IContextSimulator::getAvailableSimulatorPlugins virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const override { logEmptyContextWarning(Q_FUNC_INFO); return BlackMisc::Simulation::CSimulatorPluginInfoList(); } - //! \copydoc IContextSimulator::startSimulatorPlugin() + //! \copydoc IContextSimulator::startSimulatorPlugin virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override { Q_UNUSED(simulatorInfo); @@ -52,7 +52,13 @@ namespace BlackCore return false; } - //! \copydoc IContextSimulator::getSimulatorStatus() + //! \copydoc IContextSimulator::checkListeners + virtual int checkListeners() override + { + return 0; + } + + //! \copydoc IContextSimulator::getSimulatorStatus virtual int getSimulatorStatus() const override { logEmptyContextWarning(Q_FUNC_INFO); diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index 3c55c3f5a..bb2b69f6c 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -125,7 +125,14 @@ namespace BlackCore ISimulatorListener *listener = m_plugins->getListener(simulatorInfo.getIdentifier()); Q_ASSERT(listener); - QMetaObject::invokeMethod(listener, "stop"); + QMetaObject::invokeMethod(listener, "stop", Qt::QueuedConnection); + } + + int CContextSimulator::checkListeners() + { + if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } + if (!m_plugins) { return 0; } + return m_plugins->checkAvailableListeners(); } int CContextSimulator::getSimulatorStatus() const @@ -461,7 +468,7 @@ namespace BlackCore { Q_ASSERT_X(!listener->parent(), Q_FUNC_INFO, "Objects with parent cannot be moved to thread"); - const bool c = connect(listener, &ISimulatorListener::simulatorStarted, this, &CContextSimulator::onSimulatorStarted); + const bool c = connect(listener, &ISimulatorListener::simulatorStarted, this, &CContextSimulator::onSimulatorStarted, Qt::QueuedConnection); if (!c) { CLogMessage(this).error("Unable to use '%1'") << simulatorInfo.toQString(); @@ -487,7 +494,7 @@ namespace BlackCore Q_ASSERT(!p.isUnspecified()); if (p.isValid()) { - listenForSimulator(p); + this->listenForSimulator(p); } } } diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index ffc008d75..418ade92e 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -75,6 +75,7 @@ namespace BlackCore virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const override; virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; + virtual int checkListeners() override; virtual int getSimulatorStatus() const override; virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; diff --git a/src/blackcore/context/contextsimulatorproxy.cpp b/src/blackcore/context/contextsimulatorproxy.cpp index e944dc847..adf1d4d44 100644 --- a/src/blackcore/context/contextsimulatorproxy.cpp +++ b/src/blackcore/context/contextsimulatorproxy.cpp @@ -211,6 +211,11 @@ namespace BlackCore m_dBusInterface->callDBus(QLatin1String("stopSimulatorPlugin"), simulatorInfo); } + int CContextSimulatorProxy::checkListeners() + { + return m_dBusInterface->callDBusRet(QLatin1String("checkListeners")); + } + CPixmap CContextSimulatorProxy::iconForModel(const QString &modelString) const { return m_dBusInterface->callDBusRet(QLatin1String("iconForModel"), modelString); diff --git a/src/blackcore/context/contextsimulatorproxy.h b/src/blackcore/context/contextsimulatorproxy.h index 56bf6a6fd..1cc3f3f09 100644 --- a/src/blackcore/context/contextsimulatorproxy.h +++ b/src/blackcore/context/contextsimulatorproxy.h @@ -20,7 +20,6 @@ #include "blackmisc/pq/length.h" #include "blackmisc/pq/time.h" #include "blackmisc/simulation/aircraftmodellist.h" -#include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/simulation/simulatorplugininfolist.h" #include "blackmisc/simulation/simulatorinternals.h" @@ -61,6 +60,7 @@ namespace BlackCore virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const override; virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; + virtual int checkListeners() override; virtual int getSimulatorStatus() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override;