From f56a401505a21929f811ab90e0e92ce2634fa0d7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 6 Feb 2015 00:21:35 +0100 Subject: [PATCH] refs #369, adjusted contexts * using CSimulatedAircraft / CSimulatedAircraftList * new functions as getAircraftForCallsign or getInstalledModelsStartingWith * fixes such as override missing fixed * return values (success/failed) for member functions (e.g. setTimeSynchronization) * getMaxRenderedAircraft / setMaxRenderedAircraft --- src/blackcore/context_network.h | 24 +++++--- src/blackcore/context_network_empty.h | 32 +++++++++- src/blackcore/context_network_impl.cpp | 71 +++++++++++++++++++--- src/blackcore/context_network_impl.h | 35 ++++++++--- src/blackcore/context_network_proxy.cpp | 21 +++++++ src/blackcore/context_network_proxy.h | 11 +++- src/blackcore/context_simulator.h | 20 +++---- src/blackcore/context_simulator_impl.cpp | 72 ++++++++++++----------- src/blackcore/context_simulator_impl.h | 18 +++--- src/blackcore/context_simulator_proxy.cpp | 21 +++---- src/blackcore/context_simulator_proxy.h | 16 ++--- 11 files changed, 239 insertions(+), 102 deletions(-) diff --git a/src/blackcore/context_network.h b/src/blackcore/context_network.h index 88aaa06dc..ccfb3a50f 100644 --- a/src/blackcore/context_network.h +++ b/src/blackcore/context_network.h @@ -72,7 +72,7 @@ namespace BlackCore void removedAircraft(const BlackMisc::Aviation::CCallsign &callsign); //! Read for model matching - void readyForModelMatching(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft); + void readyForModelMatching(const BlackMisc::Simulation::CSimulatedAircraft &renderedAircraft); //! ATC station (online) list has been changed void changedAtcStationsOnline(); @@ -92,8 +92,11 @@ namespace BlackCore //! Digest signal changedAircraftInRange() void changedAircraftInRangeDigest(); - //! Aircraft situation update - void changedAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation); + //! Aircraft model was changed + void changedRenderedAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator); + + //! Aircraft enabled / disabled + void changedAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator); //! Connection status changed for online station void changedAtcStationOnlineConnectionStatus(const BlackMisc::Aviation::CAtcStation &atcStation, bool connected); @@ -133,6 +136,9 @@ namespace BlackCore //! Aircraft list virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const = 0; + //! Aircraft for given callsign + virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const = 0; + //! Get all users virtual BlackMisc::Network::CUserList getUsers() const = 0; @@ -182,11 +188,7 @@ namespace BlackCore //! Command line was entered virtual bool parseCommandLine(const QString &commandLine) = 0; - /*! - * Get METAR, if not available request it - * \param airportIcaoCode such as EDDF, KLAX - * \return - */ + //! Get METAR, if not available request it (code such as EDDF, KLAX) virtual BlackMisc::Aviation::CInformationMessage getMetar(const BlackMisc::Aviation::CAirportIcao &airportIcaoCode) = 0; //! Use the selected COM1/2 frequencies, and get the corresponding voice room for it @@ -201,6 +203,12 @@ namespace BlackCore //! Request ATIS updates (for all stations) virtual void requestAtisUpdates() = 0; + //! Enable/disable rendering + virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator) = 0; + + //! Change model string + virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) = 0; + //! Create dummy ATC stations for performance tests etc. virtual void testCreateDummyOnlineAtcStations(int number) = 0; diff --git a/src/blackcore/context_network_empty.h b/src/blackcore/context_network_empty.h index 403190709..efc7087de 100644 --- a/src/blackcore/context_network_empty.h +++ b/src/blackcore/context_network_empty.h @@ -60,6 +60,14 @@ namespace BlackCore return BlackMisc::Simulation::CSimulatedAircraftList(); } + //! \copydoc IContextNetwork::getAircraftForCallsign + virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override + { + Q_UNUSED(callsign); + logEmptyContextWarning(Q_FUNC_INFO); + return BlackMisc::Simulation::CSimulatedAircraft(); + } + //! \copydoc IContextNetwork::connectToNetwork virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override { @@ -194,18 +202,38 @@ namespace BlackCore } //! \copydoc IContextNetwork::getVatsimVoiceServers - virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const + virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const override { logEmptyContextWarning(Q_FUNC_INFO); return BlackMisc::Network::CServerList(); } //! \copydoc IContextNetwork::getVatsimFsdServers - virtual BlackMisc::Network::CServerList getVatsimFsdServers() const + virtual BlackMisc::Network::CServerList getVatsimFsdServers() const override { logEmptyContextWarning(Q_FUNC_INFO); return BlackMisc::Network::CServerList(); } + + //! \copydoc IContextNetwork::updateAircraftEnabled + virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator) override + { + Q_UNUSED(callsign); + Q_UNUSED(originator); + Q_UNUSED(enabledForRedering); + logEmptyContextWarning(Q_FUNC_INFO); + return false; + } + + //! \copydoc IContextNetwork::updateAircraftModel + virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override + { + Q_UNUSED(callsign); + Q_UNUSED(originator); + Q_UNUSED(model); + logEmptyContextWarning(Q_FUNC_INFO); + return false; + } }; } // namespace diff --git a/src/blackcore/context_network_impl.cpp b/src/blackcore/context_network_impl.cpp index 8c82b42cc..bec9e7bf4 100644 --- a/src/blackcore/context_network_impl.cpp +++ b/src/blackcore/context_network_impl.cpp @@ -76,13 +76,8 @@ namespace BlackCore connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationsBooked, this, &CContextNetwork::changedAtcStationsBooked); connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationOnlineConnectionStatus, this, &CContextNetwork::changedAtcStationOnlineConnectionStatus); connect(this->m_airspace, &CAirspaceMonitor::changedAircraftInRange, this, &CContextNetwork::changedAircraftInRange); - connect(this->m_airspace, &CAirspaceMonitor::changedAircraftSituation, this, &CContextNetwork::changedAircraftSituation); connect(this->m_airspace, &CAirspaceMonitor::removedAircraft, this, &CContextNetwork::removedAircraft); connect(this->m_airspace, &CAirspaceMonitor::readyForModelMatching, this, &CContextNetwork::readyForModelMatching); - - //! \todo Should be set in runtime, but this would require airspace to be a context - // connect(this->getIContextOwnAircraft(), &IContextOwnAircraft::changedAircraft, this->m_airspace, &CAirspaceMonitor::setOwnAircraft); - // connect(this->getIContextSimulator(), &IContextSimulator::ownAircraftModelChanged, this->m_airspace, &CAirspaceMonitor::setOwnAircraftModel); } CContextNetwork::~CContextNetwork() @@ -90,6 +85,30 @@ namespace BlackCore this->gracefulShutdown(); } + const CSimulatedAircraftList &CContextNetwork::renderedAircraft() const + { + Q_ASSERT(this->m_airspace); + return m_airspace->renderedAircraft(); + } + + CSimulatedAircraftList &CContextNetwork::renderedAircraft() + { + Q_ASSERT(this->m_airspace); + return m_airspace->renderedAircraft(); + } + + CAircraftSituationList &CContextNetwork::renderedAircraftSituations() + { + Q_ASSERT(this->m_airspace); + return m_airspace->renderedAircraftSituations(); + } + + const CAircraftSituationList &CContextNetwork::renderedAircraftSituations() const + { + Q_ASSERT(this->m_airspace); + return m_airspace->renderedAircraftSituations(); + } + void CContextNetwork::gracefulShutdown() { if (this->m_vatsimBookingReader) { this->m_vatsimBookingReader->quit(); } @@ -297,9 +316,22 @@ namespace BlackCore void CContextNetwork::readAtcBookingsFromSource() const { Q_ASSERT(this->m_vatsimBookingReader); + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; this->m_vatsimBookingReader->read(); } + CSimulatedAircraftList CContextNetwork::getAircraftInRange() const + { + BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; + return this->m_airspace->renderedAircraft(); + } + + CSimulatedAircraft CContextNetwork::getAircraftForCallsign(const CCallsign &callsign) const + { + BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; + return this->m_airspace->renderedAircraft().findFirstByCallsign(callsign); + } + void CContextNetwork::ps_receivedBookings(const CAtcStationList &) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; @@ -310,7 +342,8 @@ namespace BlackCore void CContextNetwork::requestDataUpdates() { Q_ASSERT(this->m_network); - if (!this->isConnected()) return; + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; + if (!this->isConnected()) { return; } this->requestAtisUpdates(); this->m_airspace->requestDataUpdates(); @@ -319,13 +352,37 @@ namespace BlackCore void CContextNetwork::requestAtisUpdates() { Q_ASSERT(this->m_network); - if (!this->isConnected()) return; + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; + if (!this->isConnected()) { return; } this->m_airspace->requestAtisUpdates(); } + bool CContextNetwork::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRedering, const QString &originator) + { + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << enabledForRedering << originator; + bool c = this->m_airspace->updateAircraftEnabled(callsign, enabledForRedering, originator); + if (c) + { + emit this->changedAircraftEnabled(this->renderedAircraft().findFirstByCallsign(callsign), originator); + } + return c; + } + + bool CContextNetwork::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model, const QString &originator) + { + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << model << originator; + bool c = this->m_airspace->updateAircraftModel(callsign, model, originator); + if (c) + { + emit this->changedRenderedAircraftModel(this->renderedAircraft().findFirstByCallsign(callsign), originator); + } + return c; + } + void CContextNetwork::testCreateDummyOnlineAtcStations(int number) { + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << number; this->m_airspace->testCreateDummyOnlineAtcStations(number); } diff --git a/src/blackcore/context_network_impl.h b/src/blackcore/context_network_impl.h index 0b6c6668e..23e740c62 100644 --- a/src/blackcore/context_network_impl.h +++ b/src/blackcore/context_network_impl.h @@ -15,6 +15,7 @@ #include "blackcore/context_network.h" #include "blackcore/context_settings.h" #include "blackcore/context_runtime.h" +#include "blackmisc/simulation/simdirectaccessrenderedaircraft.h" #include "blackcore/dbus_server.h" #include "blackcore/network.h" #include "blackcore/airspace_monitor.h" @@ -26,8 +27,7 @@ #include "blackmisc/avaircraftsituationlist.h" #include - -class QTimer; +#include namespace BlackCore { @@ -35,7 +35,9 @@ namespace BlackCore class CVatsimDataFileReader; //! Network context implementation - class CContextNetwork : public IContextNetwork + class CContextNetwork : + public IContextNetwork, + public BlackMisc::Simulation::IRenderedAircraftProvider { Q_OBJECT Q_CLASSINFO("D-Bus Interface", BLACKCORE_CONTEXTNETWORK_INTERFACENAME) @@ -46,6 +48,18 @@ namespace BlackCore //! Destructor virtual ~CContextNetwork(); + //! \copydoc IRenderedAircraftProviderReadOnly::renderedAircraft + virtual const BlackMisc::Simulation::CSimulatedAircraftList &renderedAircraft() const override; + + //! \copydoc IRenderedAircraftProvider::renderedAircraft + virtual BlackMisc::Simulation::CSimulatedAircraftList &renderedAircraft() override; + + //! \copydoc IRenderedAircraftProviderReadOnly::renderedAircraftSituations + virtual const BlackMisc::Aviation::CAircraftSituationList &renderedAircraftSituations() const override; + + //! \copydoc IRenderedAircraftProviderReadOnly::renderedAircraftSituations + virtual BlackMisc::Aviation::CAircraftSituationList &renderedAircraftSituations() override; + public slots: //! \copydoc IContextNetwork::readAtcBookingsFromSource() @@ -66,11 +80,10 @@ namespace BlackCore } //! \copydoc IContextNetwork::getAircraftInRange() - virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override - { - BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; - return this->m_airspace->renderedAircraft(); - } + virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override; + + //! \copydoc IContextNetwork::getAircraftForCallsign + virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; //! \copydoc IContextNetwork::connectToNetwork() virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override; @@ -136,6 +149,12 @@ namespace BlackCore //! \copydoc IContextNetwork::requestAtisUpdates virtual void requestAtisUpdates() override; + //! \copydoc IContextNetwork::updateAircraftEnabled + virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator) override; + + //! \copydoc IContextNetwork::updateAircraftModel + virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override; + //! \copydoc IContextNetwork::testCreateDummyOnlineAtcStations virtual void testCreateDummyOnlineAtcStations(int number) override; diff --git a/src/blackcore/context_network_proxy.cpp b/src/blackcore/context_network_proxy.cpp index d6da499a8..3db9126e9 100644 --- a/src/blackcore/context_network_proxy.cpp +++ b/src/blackcore/context_network_proxy.cpp @@ -72,6 +72,12 @@ namespace BlackCore s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), "vatsimBookingsRead", this, SIGNAL(vatsimBookingsRead())); Q_ASSERT(s); + s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), + "changedRenderedAircraftModel", this, SIGNAL(changedRenderedAircraftModel(BlackMisc::Simulation::CSimulatedAircraft,QString))); + Q_ASSERT(s); + s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), + "changedAircraftEnabled", this, SIGNAL(changedAircraftEnabled(BlackMisc::Simulation::CSimulatedAircraft,QString))); + Q_ASSERT(s); Q_UNUSED(s); } @@ -95,6 +101,11 @@ namespace BlackCore return this->m_dBusInterface->callDBusRet(QLatin1Literal("getAircraftInRange")); } + Simulation::CSimulatedAircraft CContextNetworkProxy::getAircraftForCallsign(const CCallsign &callsign) const + { + return this->m_dBusInterface->callDBusRet(QLatin1Literal("getAircraftForCallsign"), callsign); + } + BlackMisc::Network::CUserList CContextNetworkProxy::getUsers() const { return this->m_dBusInterface->callDBusRet(QLatin1Literal("getUsers")); @@ -150,6 +161,16 @@ namespace BlackCore this->m_dBusInterface->callDBus(QLatin1Literal("requestAtisUpdates")); } + bool CContextNetworkProxy::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRedering, const QString &originator) + { + return this->m_dBusInterface->callDBusRet(QLatin1Literal("updateAircraftEnabled"), callsign, enabledForRedering, originator); + } + + bool CContextNetworkProxy::updateAircraftModel(const CCallsign &callsign, const Simulation::CAircraftModel &model, const QString &originator) + { + return this->m_dBusInterface->callDBusRet(QLatin1Literal("updateAircraftModel"), callsign, model, originator); + } + void CContextNetworkProxy::testCreateDummyOnlineAtcStations(int number) { this->m_dBusInterface->callDBus(QLatin1Literal("testCreateDummyOnlineAtcStations"), number); diff --git a/src/blackcore/context_network_proxy.h b/src/blackcore/context_network_proxy.h index 0e4f28d7a..476853dd5 100644 --- a/src/blackcore/context_network_proxy.h +++ b/src/blackcore/context_network_proxy.h @@ -26,7 +26,7 @@ namespace BlackCore { - //! \brief Network context proxy + //! Network context proxy //! \ingroup dbus class CContextNetworkProxy : public IContextNetwork { @@ -65,6 +65,9 @@ namespace BlackCore //! \copydoc IContextNetwork::getAircraftInRange() virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override; + //! \copydoc IContextNetwork::getAircraftForCallsign + virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; + //! \copydoc IContextNetwork::connectToNetwork virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override; @@ -122,6 +125,12 @@ namespace BlackCore //! \copydoc IContextNetwork::requestAtisUpdates virtual void requestAtisUpdates() override; + //! \copydoc IContextNetwork::updateAircraftEnabled + virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator) override; + + //! \copydoc IContextNetwork::updateAircraftModel + virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override; + //! \copydoc IContextNetwork::testCreateDummyOnlineAtcStations virtual void testCreateDummyOnlineAtcStations(int number) override; diff --git a/src/blackcore/context_simulator.h b/src/blackcore/context_simulator.h index 14d527063..04c870cdb 100644 --- a/src/blackcore/context_simulator.h +++ b/src/blackcore/context_simulator.h @@ -81,12 +81,9 @@ namespace BlackCore //! Installed aircraft models ready or changed void installedAircraftModelsChanged(); - //! A single model has been matched for given Aircraft + //! A single model has been matched for given aircraft void modelMatchingCompleted(BlackMisc::Simulation::CSimulatedAircraft aircraft); - //! A remote aircraft got changed - void remoteAircraftChanged(BlackMisc::Simulation::CSimulatedAircraft aircraft); - //! Emitted when own aircraft model changes //! \todo move to own aircraft context? void ownAircraftModelChanged(BlackMisc::Simulation::CSimulatedAircraft aircraft); @@ -124,25 +121,24 @@ namespace BlackCore //! Installed models in simulator eco system virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const = 0; - //! Simulated other aircraft in range - virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const = 0; + //! Model for model string + virtual BlackMisc::Simulation::CAircraftModelList getInstalledModelsStartingWith(const QString modelString) const = 0; - //! Changed remote aircraft (e.g. by disabling aircraft) - //! \todo tbd No add/remove remote aircraft function as those are added implicitly by accessing airspace monitor - virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &toChangeAircraft, const BlackMisc::CPropertyIndexVariantMap &changeValues) = 0; + //! ICAO data for model string + virtual BlackMisc::Aviation::CAircraftIcao getIcaoForModelString(const QString &modelString) const = 0; //! Set time synchronization between simulator and user's computer time //! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature - virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) = 0; + virtual bool setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) = 0; //! Is time synchronization on? virtual bool isTimeSynchronized() const = 0; //! Max. number of remote aircraft rendered - virtual int getMaxRenderedRemoteAircraft() const = 0; + virtual int getMaxRenderedAircraft() const = 0; //! Max. number of remote aircraft rendered - virtual void setMaxRenderedRemoteAircraft(int number) = 0; + virtual void setMaxRenderedAircraft(int number) = 0; //! Time synchronization offset virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const = 0; diff --git a/src/blackcore/context_simulator_impl.cpp b/src/blackcore/context_simulator_impl.cpp index 201e0bffc..73db1866c 100644 --- a/src/blackcore/context_simulator_impl.cpp +++ b/src/blackcore/context_simulator_impl.cpp @@ -116,33 +116,35 @@ namespace BlackCore return this->m_simulator->getInstalledModels(); } - CSimulatedAircraftList CContextSimulator::getRemoteAircraft() const + CAircraftModelList CContextSimulator::getInstalledModelsStartingWith(const QString modelString) const { - CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; - // If no ISimulator object is available, return a dummy. - if (!m_simulator) { return CSimulatedAircraftList(); } - - return this->m_simulator->getRemoteAircraft(); + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << modelString; + if (!m_simulator) { return CAircraftModelList(); } + return this->m_simulator->getInstalledModels().findModelsStartingWith(modelString); } - int CContextSimulator::changeRemoteAircraft(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues) + CAircraftIcao CContextSimulator::getIcaoForModelString(const QString &modelString) const + { + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << modelString; + if (!m_simulator) { return CAircraftIcao(); } + return this->m_simulator->getIcaoForModelString(modelString); + } + + bool CContextSimulator::setTimeSynchronization(bool enable, CTime offset) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; - if (!m_simulator) { return 0; } - int c = this->m_simulator->changeRemoteAircraft(changedAircraft, changedValues); - if (c > 0) + if (!m_simulator) { return false; } + bool c = this->m_simulator->setTimeSynchronization(enable, offset); + if (!c) { return false; } + if (enable) { - // really changed something - emit this->remoteAircraftChanged(this->getRemoteAircraft().findFirstByCallsign(changedAircraft.getCallsign())); + CLogMessage(this).info("Set time syncronization to %1") << offset.toQString(); } - return c; - } - - void CContextSimulator::setTimeSynchronization(bool enable, CTime offset) - { - CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; - if (!m_simulator) return; - this->m_simulator->setTimeSynchronization(enable, offset); + else + { + CLogMessage(this).info("Disabled time syncronization %1"); + } + return true; } bool CContextSimulator::isTimeSynchronized() const @@ -152,18 +154,17 @@ namespace BlackCore return this->m_simulator->isTimeSynchronized(); } - int CContextSimulator::getMaxRenderedRemoteAircraft() const + int CContextSimulator::getMaxRenderedAircraft() const { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; if (!m_simulator) return 0; return 13; } - void CContextSimulator::setMaxRenderedRemoteAircraft(int number) + void CContextSimulator::setMaxRenderedAircraft(int number) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; - //! \todo implement - Q_UNUSED(number); + if (m_simulator) { this->m_simulator->setMaxRenderedAircraft(number); } } CTime CContextSimulator::getTimeSynchronizationOffset() const @@ -200,7 +201,6 @@ namespace BlackCore return false; } - // Factory for driver ISimulatorFactory *factory = *factoryIterator; Q_ASSERT(factory); @@ -208,8 +208,10 @@ namespace BlackCore // We assume we run in the same process as the own aircraft context // Hence we pass in memory refernce to own aircraft object Q_ASSERT(this->getIContextOwnAircraft()->isUsingImplementingObject()); - IOwnAircraftProvider *ownAircraft = this->getRuntime()->getCContextOwnAircraft(); - ISimulator *newSimulator = factory->create(ownAircraft, this); + Q_ASSERT(this->getIContextNetwork()->isUsingImplementingObject()); + IOwnAircraftProvider *ownAircraftProvider = this->getRuntime()->getCContextOwnAircraft(); + IRenderedAircraftProvider *renderedAircraftProvider = this->getRuntime()->getCContextNetwork(); + ISimulator *newSimulator = factory->create(ownAircraftProvider, renderedAircraftProvider, this); Q_ASSERT(newSimulator); this->unloadSimulatorPlugin(); // old plugin unloaded @@ -233,16 +235,16 @@ namespace BlackCore // use readyForModelMatching instead of CAirspaceMonitor::addedAircraft, as it contains client information bool c = connect(networkContext, &IContextNetwork::readyForModelMatching, this, &CContextSimulator::ps_addRemoteAircraft); Q_ASSERT(c); - c = connect(networkContext, &IContextNetwork::changedAircraftSituation, this, &CContextSimulator::ps_addAircraftSituation); - Q_ASSERT(c); c = connect(networkContext, &IContextNetwork::removedAircraft, this, &CContextSimulator::ps_removeRemoteAircraft); Q_ASSERT(c); - for (const auto &aircraft : networkContext->getAircraftInRange()) + c = connect(networkContext, &IContextNetwork::changedRenderedAircraftModel, this->m_simulator, &ISimulator::changeRenderedAircraftModel); + Q_ASSERT(c); + c = connect(networkContext, &IContextNetwork::changedAircraftEnabled, this->m_simulator, &ISimulator::changeAircraftEnabled); + Q_ASSERT(c); + + for (const CSimulatedAircraft &simAircraft : networkContext->getAircraftInRange()) { - Q_ASSERT(!aircraft.getCallsign().isEmpty()); - CClient client = networkContext->getOtherClients().findFirstByCallsign(aircraft.getCallsign()); - CSimulatedAircraft simAircraft(aircraft); - simAircraft.setClient(client); + Q_ASSERT(!simAircraft.getCallsign().isEmpty()); m_simulator->addRemoteAircraft(simAircraft); } @@ -321,7 +323,7 @@ namespace BlackCore { Q_ASSERT(this->m_simulator); if (!this->m_simulator) return; - this->m_simulator->removeRemoteAircraft(callsign); + this->m_simulator->removeRenderedAircraft(callsign); } void CContextSimulator::ps_onConnectionStatusChanged(ISimulator::ConnectionStatus status) diff --git a/src/blackcore/context_simulator_impl.h b/src/blackcore/context_simulator_impl.h index ecdb71da7..4a6c9f111 100644 --- a/src/blackcore/context_simulator_impl.h +++ b/src/blackcore/context_simulator_impl.h @@ -74,23 +74,23 @@ namespace BlackCore //! \copydoc IContextSimulator::getInstalledModels virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override; - //! \copydoc IContextSimulator::getRemoteAircraft - virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const override; + //! \copydoc IContextSimulator::getInstalledModelsStartingWith + virtual BlackMisc::Simulation::CAircraftModelList getInstalledModelsStartingWith(const QString modelString) const override; - //! \copydoc IContextSimulator::changeRemoteAircraft - virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changedValues) override; + //! \copydoc IContextSimulator::getIcaoForModelString + virtual BlackMisc::Aviation::CAircraftIcao getIcaoForModelString(const QString &modelString) const override; //! \copydoc IContextSimulator::setTimeSynchronization - virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override; + virtual bool setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override; //! \copydoc IContextSimulator::isTimeSynchronized virtual bool isTimeSynchronized() const override; - //! \copydoc IContextSimulator::getMaxRenderedRemoteAircraft - virtual int getMaxRenderedRemoteAircraft() const override; + //! \copydoc IContextSimulator::getMaxRenderedAircraft + virtual int getMaxRenderedAircraft() const override; - //! \copydoc IContextSimulator::setMaxRenderedRemoteAircraft - virtual void setMaxRenderedRemoteAircraft(int number) override; + //! \copydoc IContextSimulator::setMaxRenderedAircraft + virtual void setMaxRenderedAircraft(int number) override; //! \copydoc IContextSimulator::getTimeSynchronizationOffset virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; diff --git a/src/blackcore/context_simulator_proxy.cpp b/src/blackcore/context_simulator_proxy.cpp index 9689c6401..c5b4fe590 100644 --- a/src/blackcore/context_simulator_proxy.cpp +++ b/src/blackcore/context_simulator_proxy.cpp @@ -51,9 +51,6 @@ namespace BlackCore s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "modelMatchingCompleted", this, SIGNAL(modelMatchingCompleted(BlackMisc::Simulation::CSimulatedAircraft))); Q_ASSERT(s); - s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), - "remoteAircraftChanged", this, SIGNAL(remoteAircraftChanged(BlackMisc::Simulation::CSimulatedAircraft))); - Q_ASSERT(s); Q_UNUSED(s); } @@ -97,14 +94,14 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1Literal("getInstalledModels")); } - CSimulatedAircraftList CContextSimulatorProxy::getRemoteAircraft() const + CAircraftModelList CContextSimulatorProxy::getInstalledModelsStartingWith(const QString modelString) const { - return m_dBusInterface->callDBusRet(QLatin1Literal("getRemoteAircraft")); + return m_dBusInterface->callDBusRet(QLatin1Literal("getInstalledModelsStartingWith")); } - int CContextSimulatorProxy::changeRemoteAircraft(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues) + CAircraftIcao CContextSimulatorProxy::getIcaoForModelString(const QString &modelString) const { - return m_dBusInterface->callDBusRet(QLatin1Literal("changeRemoteAircraft"), changedAircraft, changedValues); + return m_dBusInterface->callDBusRet(QLatin1Literal("getIcaoForModelString"), modelString); } BlackSim::CSimulatorInfo CContextSimulatorProxy::getSimulatorInfo() const @@ -112,9 +109,9 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1Literal("getSimulatorInfo")); } - void CContextSimulatorProxy::setTimeSynchronization(bool enable, CTime offset) + bool CContextSimulatorProxy::setTimeSynchronization(bool enable, CTime offset) { - m_dBusInterface->callDBus(QLatin1Literal("setTimeSynchronization"), enable, offset); + return m_dBusInterface->callDBusRet(QLatin1Literal("setTimeSynchronization"), enable, offset); } bool CContextSimulatorProxy::isTimeSynchronized() const @@ -122,14 +119,14 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1Literal("isTimeSynchronized")); } - void CContextSimulatorProxy::setMaxRenderedRemoteAircraft(int number) + void CContextSimulatorProxy::setMaxRenderedAircraft(int number) { m_dBusInterface->callDBus(QLatin1Literal("setMaxRenderedRemoteAircraft"), number); } - int CContextSimulatorProxy::getMaxRenderedRemoteAircraft() const + int CContextSimulatorProxy::getMaxRenderedAircraft() const { - return m_dBusInterface->callDBusRet(QLatin1Literal("getMaxRenderedRemoteAircraft")); + return m_dBusInterface->callDBusRet(QLatin1Literal("getMaxRenderedAircraft")); } CTime CContextSimulatorProxy::getTimeSynchronizationOffset() const diff --git a/src/blackcore/context_simulator_proxy.h b/src/blackcore/context_simulator_proxy.h index 595e99b90..c7508b625 100644 --- a/src/blackcore/context_simulator_proxy.h +++ b/src/blackcore/context_simulator_proxy.h @@ -74,26 +74,26 @@ namespace BlackCore //! \copydoc IContextSimulator::getInstalledModels() virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override; - //! \copydoc IContextSimulator::getRemoteAircraft - virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const override; + //! \copydoc IContextSimulator::getInstalledModelsStartingWith + virtual BlackMisc::Simulation::CAircraftModelList getInstalledModelsStartingWith(const QString modelString) const override; - //! \copydoc IContextSimulator::changeRemoteAircraft - virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changedValues) override; + //! \copydoc IContextSimulator::getIcaoForModelString + virtual BlackMisc::Aviation::CAircraftIcao getIcaoForModelString(const QString &modelString) const override; //! \copydoc IContextSimulator::getSimulatorInfo virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override; //! \copydoc IContextSimulator::setTimeSynchronization - virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override; + virtual bool setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override; //! \copydoc IContextSimulator::isTimeSynchronized virtual bool isTimeSynchronized() const override; - //! \copydoc IContextSimulator::getMaxRenderedRemoteAircraft - virtual int getMaxRenderedRemoteAircraft() const override; + //! \copydoc IContextSimulator::getMaxRenderedAircraft + virtual int getMaxRenderedAircraft() const override; //! \copydoc IContextSimulator::setMaxRenderedRemoteAircraft - virtual void setMaxRenderedRemoteAircraft(int number) override; + virtual void setMaxRenderedAircraft(int number) override; //! \copydoc IContextSimulator::getTimeSynchronizationOffset virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override;