diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index 3be6aa204..e31118bf9 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -144,6 +144,16 @@ namespace BlackCore //! Driver will be unloaded virtual void unload() = 0; + //! \addtogroup commandline + //! @{ + //!
+ //! .drv unload unload driver CSimulatorCommon + //! .drv fsuipc on|off enable/disable FSUIPC (if applicable) BlackSimPlugin::FsCommon::CSimulatorFsCommon + //!+ //! @} + //! Parse command line + virtual bool parseCommandLine(const QString &commandLine, const BlackMisc::CIdentifier &originator) = 0; + //! Status to string static QString statusToString(int status); diff --git a/src/blackcore/simulatorcommon.cpp b/src/blackcore/simulatorcommon.cpp index 7a477685f..5db2a1a50 100644 --- a/src/blackcore/simulatorcommon.cpp +++ b/src/blackcore/simulatorcommon.cpp @@ -201,6 +201,12 @@ namespace BlackCore this->reverseLookupAndUpdateOwnAircraftModel(model); } + bool CSimulatorCommon::parseDetails(const CSimpleCommandParser &parser) + { + Q_UNUSED(parser); + return false; + } + void CSimulatorCommon::reverseLookupAndUpdateOwnAircraftModel(const BlackMisc::Simulation::CAircraftModel &model) { Q_ASSERT_X(sApp, Q_FUNC_INFO, "Missing sApp"); @@ -323,6 +329,25 @@ namespace BlackCore return removed; } + bool CSimulatorCommon::parseCommandLine(const QString &commandLine, const CIdentifier &originator) + { + if (this->isMyIdentifier(originator)) { return false; } + if (commandLine.isEmpty()) { return false; } + CSimpleCommandParser parser( + { + ".plugin", ".drv", ".driver" + }); + parser.parse(commandLine); + if (!parser.isKnownCommand()) { return false; } + + if (parser.matchesPart(1, "unload")) + { + this->unload(); + return true; + } + return this->parseDetails(parser); + } + void CSimulatorCommon::ps_oneSecondTimer() { blinkHighlightedAircraft(); diff --git a/src/blackcore/simulatorcommon.h b/src/blackcore/simulatorcommon.h index f9fa8b6ef..43efa3241 100644 --- a/src/blackcore/simulatorcommon.h +++ b/src/blackcore/simulatorcommon.h @@ -37,6 +37,8 @@ namespace BlackMisc { + class CSimpleCommandParser; + namespace Aviation { class CAircraftParts; @@ -69,8 +71,7 @@ namespace BlackCore //! Destructor virtual ~CSimulatorCommon(); - //! \name ISimulator implementations - //! @{ + // --------- ISimulator implementations ------------ virtual BlackMisc::Simulation::CAircraftModel getDefaultModel() const override; virtual void setInterpolationAndRenderingSetup(const BlackMisc::Simulation::CInterpolationAndRenderingSetup &setup) override; virtual BlackMisc::Simulation::CInterpolationAndRenderingSetup getInterpolationAndRenderingSetup() const override; @@ -80,7 +81,8 @@ namespace BlackCore virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual void unload() override; virtual int physicallyRemoveMultipleRemoteAircraft(const BlackMisc::Aviation::CCallsignSet &callsigns) override; - //! @} + virtual bool parseCommandLine(const QString &commandLine, const BlackMisc::CIdentifier &originator) override; + // --------- ISimulator implementations ------------ protected slots: //! \name Connected with remote aircraft provider signals @@ -154,6 +156,9 @@ namespace BlackCore //! Set own model void reverseLookupAndUpdateOwnAircraftModel(const QString &modelString); + //! Parse driver specific details for ISimulator::parseCommandLine + virtual bool parseDetails(const BlackMisc::CSimpleCommandParser &parser); + BlackMisc::Simulation::IInterpolator *m_interpolator = nullptr; //!< interpolator instance bool m_pausedSimFreezesInterpolation = false; //!< paused simulator will also pause interpolation (so AI aircraft will hold) BlackMisc::Simulation::CAircraftModel m_defaultModel; //!< default model diff --git a/src/plugins/simulator/fscommon/simulatorfscommon.cpp b/src/plugins/simulator/fscommon/simulatorfscommon.cpp index f669365ae..16a72b046 100644 --- a/src/plugins/simulator/fscommon/simulatorfscommon.cpp +++ b/src/plugins/simulator/fscommon/simulatorfscommon.cpp @@ -9,6 +9,7 @@ #include "simulatorfscommon.h" #include "blackcore/webdataservices.h" +#include "blackmisc/simplecommandparser.h" #include "blackmisc/logmessage.h" #include "blackmisc/stringutils.h" @@ -52,6 +53,17 @@ namespace BlackSimPlugin this->m_simulatorInternals = s; } + bool CSimulatorFsCommon::parseDetails(const CSimpleCommandParser &parser) + { + if (parser.matchesPart(1, "fsuipc") && parser.hasPart(2)) + { + const bool on = parser.toBool(2); + const bool s = useFsuipc(on); + return s; + } + return false; + } + bool CSimulatorFsCommon::disconnectFrom() { if (this->m_fsuipc) { this->m_fsuipc->disconnect(); } @@ -67,6 +79,21 @@ namespace BlackSimPlugin return !m_fsuipc.isNull() && m_fsuipc->isConnected(); } + bool CSimulatorFsCommon::useFsuipc(bool on) + { + if (!m_fsuipc) { return false; } // no FSUIPC available + m_useFsuipc = on; + if (on) + { + m_useFsuipc = m_fsuipc->connect(); + } + else + { + m_fsuipc->disconnect(); + } + return m_useFsuipc; + } + CTime CSimulatorFsCommon::getTimeSynchronizationOffset() const { return m_syncTimeOffset; diff --git a/src/plugins/simulator/fscommon/simulatorfscommon.h b/src/plugins/simulator/fscommon/simulatorfscommon.h index 8ddfd5a45..3ba2c4a17 100644 --- a/src/plugins/simulator/fscommon/simulatorfscommon.h +++ b/src/plugins/simulator/fscommon/simulatorfscommon.h @@ -33,8 +33,10 @@ namespace BlackSimPlugin //! FSUIPC connected? bool isFsuipcConnected() const; - //! \name ISimulator interface implementations - //! @{ + //! FSUIPC on/off, correctly disconnecting/connecting + bool useFsuipc(bool on); + + // ---------------------- ISimulator ------------------ virtual bool disconnectFrom() override; virtual bool isPaused() const override { return m_simPaused; } virtual bool isTimeSynchronized() const override { return m_simTimeSynced; } @@ -43,7 +45,7 @@ namespace BlackSimPlugin virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual bool changeRemoteAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) override; virtual bool changeRemoteAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) override; - //! @} + // ---------------------- ISimulator ------------------ protected slots: //! \copydoc BlackCore::CSimulatorCommon::ps_allSwiftDataRead @@ -60,6 +62,9 @@ namespace BlackSimPlugin //! Init the internals objects virtual void initInternalsObject(); + //! \copydoc BlackCore::CSimulatorCommon::parseDetails + virtual bool parseDetails(const BlackMisc::CSimpleCommandParser &parser) override; + QString m_simulatorName; //!< name of simulator QString m_simulatorDetails; //!< describes version etc. QString m_simulatorVersion; //!< Simulator version