diff --git a/samples/cli_client/client.cpp b/samples/cli_client/client.cpp index fd07bef12..64b6cfbd8 100644 --- a/samples/cli_client/client.cpp +++ b/samples/cli_client/client.cpp @@ -52,7 +52,7 @@ Client::Client(QObject *parent) connect(this, &Client::setOwnAircraft, m_net, &INetwork::setOwnAircraft); connect(this, &Client::setOwnAircraftPosition, m_net, &INetwork::setOwnAircraftPosition); connect(this, &Client::setOwnAircraftSituation, m_net, &INetwork::setOwnAircraftSituation); - connect(this, &Client::setOwnAircraftAvionics, m_net, &INetwork::setOwnAircraftAvionics); + connect(this, &Client::setOwnAircraftCockpit, m_net, &INetwork::setOwnCockpit); connect(this, &Client::sendPing, m_net, &INetwork::sendPing); connect(this, &Client::sendMetarQuery, m_net, &INetwork::sendMetarQuery); connect(this, &Client::sendWeatherDataQuery, m_net, &INetwork::sendWeatherDataQuery); @@ -85,7 +85,7 @@ Client::Client(QObject *parent) m_commands["setaircraft"] = std::bind(&Client::setOwnAircraftCmd, this, _1); m_commands["setposition"] = std::bind(&Client::setOwnAircraftPositionCmd, this, _1); m_commands["setsituation"] = std::bind(&Client::setOwnAircraftSituationCmd, this, _1); - m_commands["setavionics"] = std::bind(&Client::setOwnAircraftAvionicsCmd, this, _1); + m_commands["setcockpit"] = std::bind(&Client::setOwnAircraftCockpitCmd, this, _1); m_commands["ping"] = std::bind(&Client::sendPingCmd, this, _1); m_commands["metar"] = std::bind(&Client::sendMetarQueryCmd, this, _1); m_commands["weather"] = std::bind(&Client::sendWeatherDataQueryCmd, this, _1); @@ -377,14 +377,14 @@ void Client::setOwnAircraftSituationCmd(QTextStream &args) )); } -void Client::setOwnAircraftAvionicsCmd(QTextStream &args) +void Client::setOwnAircraftCockpitCmd(QTextStream &args) { double com1; double com2; int xpdrCode; QString xpdrMode; args >> com1 >> com2 >> xpdrCode >> xpdrMode; - emit setOwnAircraftAvionics( + emit setOwnAircraftCockpit( BlackMisc::Aviation::CComSystem("COM1", BlackMisc::PhysicalQuantities::CFrequency(com1, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz())), BlackMisc::Aviation::CComSystem("COM2", BlackMisc::PhysicalQuantities::CFrequency(com2, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz())), BlackMisc::Aviation::CTransponder("Transponder", xpdrCode, xpdrMode) diff --git a/samples/cli_client/client.h b/samples/cli_client/client.h index 373ed1bcd..78d07689c 100644 --- a/samples/cli_client/client.h +++ b/samples/cli_client/client.h @@ -52,7 +52,7 @@ private: //commands void setOwnAircraftCmd(QTextStream &args); void setOwnAircraftPositionCmd(QTextStream &args); void setOwnAircraftSituationCmd(QTextStream &args); - void setOwnAircraftAvionicsCmd(QTextStream &args); + void setOwnAircraftCockpitCmd(QTextStream &args); void sendPingCmd(QTextStream &args); void sendMetarQueryCmd(QTextStream &args); void sendWeatherDataQueryCmd(QTextStream &args); @@ -81,7 +81,7 @@ signals: //to send to INetwork void setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft); void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude); void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); - void setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, + void setOwnAircraftCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &xpdr); void sendPing(const BlackMisc::Aviation::CCallsign &callsign); void sendMetarQuery(const QString &airportICAO); diff --git a/src/blackcore/context_network_impl.cpp b/src/blackcore/context_network_impl.cpp index fdb5c8dcb..2c69d81a9 100644 --- a/src/blackcore/context_network_impl.cpp +++ b/src/blackcore/context_network_impl.cpp @@ -40,9 +40,6 @@ namespace BlackCore // 1. Init by "network driver" this->m_network = new CNetworkVatlib(this); - // 2. Init own aircraft - this->initOwnAircraft(); - // 3. Init VATSIM bookings this->m_vatsimBookingReader = new CVatsimBookingReader(this->getRuntime()->getIContextSettings()->getNetworkSettings().getBookingServiceUrl(), this); this->connect(this->m_vatsimBookingReader, &CVatsimBookingReader::dataRead, this, &CContextNetwork::psReceivedBookings); @@ -89,31 +86,6 @@ namespace BlackCore if (this->isConnected()) this->disconnectFromNetwork(); } - /* - * Init own aircraft - */ - void CContextNetwork::initOwnAircraft() - { - Q_ASSERT(this->getRuntime()); - Q_ASSERT(this->getRuntime()->getIContextSettings()); - this->ownAircraft().initComSystems(); - this->ownAircraft().initTransponder(); - CAircraftSituation situation( - CCoordinateGeodetic( - CLatitude::fromWgs84("N 049° 18' 17"), - CLongitude::fromWgs84("E 008° 27' 05"), - CLength(0, CLengthUnit::m())), - CAltitude(312, CAltitude::MeanSeaLevel, CLengthUnit::ft()) - ); - this->ownAircraft().setSituation(situation); - this->ownAircraft().setPilot(this->getIContextSettings()->getNetworkSettings().getCurrentTrafficNetworkServer().getUser()); - - // TODO: This would need to come from somewhere (mappings) - // Own callsign, plane ICAO status, model used - this->ownAircraft().setCallsign(CCallsign("BLACK")); - this->ownAircraft().setIcaoInfo(CAircraftIcao("C172", "L1P", "GA", "GA", "0000ff")); - } - /* * Connect to network */ @@ -141,12 +113,13 @@ namespace BlackCore if (CNetworkUtils::canConnect(currentServer, msg, 2000)) { INetwork::LoginMode mode = static_cast(loginMode); - this->ownAircraft().setPilot(currentServer.getUser()); // still needed? + this->getIContextOwnAircraft()->updatePilot(currentServer.getUser(), this->getPathAndContextId()); + const CAircraft ownAircraft = this->ownAircraft(); this->m_network->presetServer(currentServer); this->m_network->presetLoginMode(mode); - this->m_network->presetCallsign(this->ownAircraft().getCallsign()); - this->m_network->presetIcaoCodes(this->ownAircraft().getIcaoInfo()); - this->m_network->setOwnAircraft(this->ownAircraft()); + this->m_network->presetCallsign(ownAircraft.getCallsign()); + this->m_network->presetIcaoCodes(ownAircraft.getIcaoInfo()); + this->m_network->setOwnAircraft(ownAircraft); this->m_network->initiateConnection(); msg = "Connection pending "; msg.append(" ").append(currentServer.getAddress()).append(" ").append(QString::number(currentServer.getPort())); @@ -194,72 +167,6 @@ namespace BlackCore return this->m_network->isConnected(); } - /* - * Own Aircraft - */ - CStatusMessageList CContextNetwork::setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft) - { - if (this->getRuntime()->isSlotLogForNetworkEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, aircraft.toQString()); - CStatusMessageList msgs; - if (this->m_network->isConnected()) - { - msgs.push_back(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityError, "Cannot set aircraft info, network already connected")); - } - else - { - this->ownAircraft() = aircraft; - } - return msgs; - } - - /* - * Own position - */ - void CContextNetwork::updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) - { - if (this->getRuntime()->isSlotLogForNetworkEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, position.toQString(), altitude.toQString()); - this->ownAircraft().setPosition(position); - this->ownAircraft().setAltitude(altitude); - this->m_network->setOwnAircraftPosition(position, altitude); - } - - /* - * Update own situation - */ - void CContextNetwork::updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation) - { - if (this->getRuntime()->isSlotLogForNetworkEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, situation.toQString()); - this->ownAircraft().setSituation(situation); - this->m_network->setOwnAircraftSituation(situation); - } - - /* - * Own cockpit data - */ - void CContextNetwork::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder) - { - if (this->getRuntime()->isSlotLogForNetworkEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, com1.toQString(), com2.toQString(), transponder.toQString()); - bool changed = false; - if (com1 != this->ownAircraft().getCom1System()) - { - this->ownAircraft().setCom1System(com1); - changed = true; - } - if (com2 != this->ownAircraft().getCom2System()) - { - this->ownAircraft().setCom2System(com2); - changed = true; - } - if (transponder != this->ownAircraft().getTransponder()) - { - this->ownAircraft().setTransponder(transponder); - changed = true; - } - - if (!changed) return; - this->m_network->setOwnAircraftAvionics(com1, com2, transponder); - } - /* * Send text messages */ @@ -602,11 +509,11 @@ namespace BlackCore return this->getRuntime()->getCContextOwnAircraft()->ownAircraft(); } - CAircraft &CContextNetwork::ownAircraft() + void CContextNetwork::psChangedOwnAircraft(const CAircraft &aircraft, const QString &originator) { - Q_ASSERT(this->getRuntime()); - Q_ASSERT(this->getRuntime()->getCContextOwnAircraft()); - return this->getRuntime()->getCContextOwnAircraft()->ownAircraft(); + Q_ASSERT(this->m_network); + Q_UNUSED(originator); + this->m_network->setOwnAircraft(aircraft); } } // namespace diff --git a/src/blackcore/context_network_impl.h b/src/blackcore/context_network_impl.h index 87ef7bb32..391249d61 100644 --- a/src/blackcore/context_network_impl.h +++ b/src/blackcore/context_network_impl.h @@ -35,22 +35,6 @@ namespace BlackCore //! Destructor virtual ~CContextNetwork(); - /*! - * Set own aircraft - * \param aircraft - * \return message list, as aircraft can only be set prior connecting - */ - BlackMisc::CStatusMessageList setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft); - - //! Own position, be aware height is terrain height - void updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude); - - //! Complete situation update - void updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation); - - //! Update own cockpit - void updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder); - public slots: // IContextNetwork overrides //! \copydoc IContextNetwork::readAtcBookingsFromSource() @@ -163,9 +147,6 @@ namespace BlackCore //! ATC list, with booked controllers BlackMisc::Aviation::CAtcStationList &atcStationsBooked() { return m_atcStationsBooked; } - //! Init my very own aircraft - void initOwnAircraft(); - //! Get network settings BlackMisc::Settings::CSettingsNetwork getNetworkSettings() const { @@ -186,10 +167,10 @@ namespace BlackCore //! Own aircraft const BlackMisc::Aviation::CAircraft &ownAircraft() const; - //! Own aircraft - BlackMisc::Aviation::CAircraft &ownAircraft(); - private slots: + //! Own aircraft was updated + void psChangedOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator); + //! ATC bookings received void psReceivedBookings(const BlackMisc::Aviation::CAtcStationList &bookedStations); diff --git a/src/blackcore/context_ownaircraft.h b/src/blackcore/context_ownaircraft.h index af501bc05..0b18d3242 100644 --- a/src/blackcore/context_ownaircraft.h +++ b/src/blackcore/context_ownaircraft.h @@ -37,10 +37,17 @@ namespace BlackCore return s; } + //! \copydoc CContext::getPathAndContextId() + virtual QString getPathAndContextId() const { return this->buildPathAndContextId(ObjectPath()); } + //! Destructor virtual ~IContextOwnAircraft() {} signals: + //! Aircraft changed + //! \remarks local only + void changedAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator); + //! Aircraft situation update //! \remarks local only void changedAircraftSituation(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator); @@ -50,6 +57,7 @@ namespace BlackCore void changedAircraftPosition(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator); //! Aircraft cockpit update + //! \remarks DBus and local void changedAircraftCockpit(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator); public slots: @@ -69,6 +77,9 @@ namespace BlackCore //! Update own cockpit virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) = 0; + //! Set current pilot + virtual bool updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator) = 0; + //! Output volumens, volumes 0..100 virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) = 0; diff --git a/src/blackcore/context_ownaircraft_impl.cpp b/src/blackcore/context_ownaircraft_impl.cpp index 725cbb864..3be81d2ab 100644 --- a/src/blackcore/context_ownaircraft_impl.cpp +++ b/src/blackcore/context_ownaircraft_impl.cpp @@ -99,13 +99,22 @@ namespace BlackCore // trigger the correct signals bool changedCockpit = this->updateOwnCockpit(aircraft.getCom1System(), aircraft.getCom2System(), aircraft.getTransponder(), originator); - this->updateOwnPosition(aircraft.getPosition(), aircraft.getAltitude() , originator); - this->updateOwnSituation(aircraft.getSituation(), originator); + bool changedPosition = this->updateOwnPosition(aircraft.getPosition(), aircraft.getAltitude() , originator); + bool changedSituation = this->updateOwnSituation(aircraft.getSituation(), originator); + bool changed = changedCockpit || changedPosition || changedSituation; + // new voice rooms, cockpit has changed if (changedCockpit) this->resolveVoiceRooms(); - // all the rest - this->m_ownAircraft = aircraft; + // any change triggers a global updated aircraft signal + // comparison is not to avoid setting the value, but avoid wrong signals + if (changed || this->m_ownAircraft != aircraft) + { + emit this->changedAircraft(aircraft, originator); + + // now set value + this->m_ownAircraft = aircraft; + } } /* @@ -123,7 +132,11 @@ namespace BlackCore this->m_ownAircraft.setAltitude(altitude); } - if (changed) emit this->changedAircraftPosition(this->m_ownAircraft, originator); + if (changed) + { + emit this->changedAircraftPosition(this->m_ownAircraft, originator); + emit this->changedAircraft(this->m_ownAircraft, originator); + } return changed; } @@ -136,8 +149,12 @@ namespace BlackCore bool changed = this->m_ownAircraft.getSituation() == situation; if (!changed) return changed; - this->m_ownAircraft.setSituation(situation); - emit this->changedAircraftSituation(this->m_ownAircraft, originator); + if (changed) + { + this->m_ownAircraft.setSituation(situation); + emit this->changedAircraftSituation(this->m_ownAircraft, originator); + emit this->changedAircraft(this->m_ownAircraft, originator); + } return changed; } @@ -147,30 +164,25 @@ namespace BlackCore bool CContextOwnAircraft::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) { if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, com1.toQString(), com2.toQString(), transponder.toQString()); - bool changed = false; - if (com1 != this->m_ownAircraft.getCom1System()) - { - this->m_ownAircraft.setCom1System(com1); - changed = true; - } - if (com2 != this->m_ownAircraft.getCom2System()) - { - this->m_ownAircraft.setCom2System(com2); - changed = true; - } - if (transponder != this->m_ownAircraft.getTransponder()) - { - this->m_ownAircraft.setTransponder(transponder); - changed = true; - } + bool changed = this->m_ownAircraft.hasChangedCockpitData(com1, com2, transponder); if (changed) { + this->m_ownAircraft.setCockpit(com1, com2, transponder); emit this->changedAircraftCockpit(this->m_ownAircraft, originator); + emit this->changedAircraft(this->m_ownAircraft, originator); this->resolveVoiceRooms(); } return changed; } + bool CContextOwnAircraft::updatePilot(const CUser &pilot, const QString &originator) + { + if (this->m_ownAircraft.getPilot() == pilot) return false; + this->m_ownAircraft.setPilot(pilot); + emit this->changedAircraft(this->m_ownAircraft, originator); + return true; + } + void CContextOwnAircraft::setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) { if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, QString::number(outputVolumeCom1), QString::number(outputVolumeCom2)); diff --git a/src/blackcore/context_ownaircraft_impl.h b/src/blackcore/context_ownaircraft_impl.h index 1379a60ca..ac70868d2 100644 --- a/src/blackcore/context_ownaircraft_impl.h +++ b/src/blackcore/context_ownaircraft_impl.h @@ -48,6 +48,9 @@ namespace BlackCore //! \copydoc IContextOwnAircraft::updateOwnCockpit() virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) override; + //! \copydoc IContextOwnAircraft::updatePilot() + virtual bool updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator) override; + //! \copydoc IContextOwnAircraft::setAudioOutputVolumes virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) override; @@ -80,7 +83,7 @@ namespace BlackCore QString m_voiceRoom1UrlOverride; //!< overridden voice room url QString m_voiceRoom2UrlOverride; //!< overridden voice room url - //! Init my very own aircraft + //! Init my very own aircraft with some defaults, before overridden by simulator void initOwnAircraft(); //! Resolve voice rooms diff --git a/src/blackcore/context_ownaircraft_proxy.cpp b/src/blackcore/context_ownaircraft_proxy.cpp index 5cd72b4fb..241ae3754 100644 --- a/src/blackcore/context_ownaircraft_proxy.cpp +++ b/src/blackcore/context_ownaircraft_proxy.cpp @@ -58,6 +58,11 @@ namespace BlackCore return this->m_dBusInterface->callDBusRet(QLatin1Literal("updateOwnCockpit"), com1, com2, transponder, originator); } + bool CContextOwnAircraftProxy::updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator) + { + return this->m_dBusInterface->callDBusRet(QLatin1Literal("updatePilot"), pilot, originator); + } + void CContextOwnAircraftProxy::setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) { this->m_dBusInterface->callDBus(QLatin1Literal("updateOwnCockpitOutputVolumes"), outputVolumeCom1, outputVolumeCom2); diff --git a/src/blackcore/context_ownaircraft_proxy.h b/src/blackcore/context_ownaircraft_proxy.h index f409dfd5a..2e2abc792 100644 --- a/src/blackcore/context_ownaircraft_proxy.h +++ b/src/blackcore/context_ownaircraft_proxy.h @@ -52,7 +52,10 @@ namespace BlackCore virtual bool updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) override; //! \copydoc IContextOwnAircraft::updateOwnCockpit() - virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originato4) override; + virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) override; + + //! \copydoc IContextOwnAircraft::updatePilot() + virtual bool updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator) override; //! \copydoc IContextOwnAircraft::setAudioOutputVolumes virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) override; diff --git a/src/blackcore/context_runtime.cpp b/src/blackcore/context_runtime.cpp index df6b8e800..c03354ce8 100644 --- a/src/blackcore/context_runtime.cpp +++ b/src/blackcore/context_runtime.cpp @@ -472,6 +472,11 @@ namespace BlackCore c = this->connect(this->m_contextNetwork, &IContextNetwork::changedAtcStationOnlineConnectionStatus, this->getCContextOwnAircraft(), &CContextOwnAircraft::changedAtcStationOnlineConnectionStatus); Q_ASSERT(c); + + // inject updated own aircraft to network + c = this->connect(this->m_contextOwnAircraft, &IContextOwnAircraft::changedAircraft, + this->getCContextNetwork(), &CContextNetwork::psChangedOwnAircraft); + Q_ASSERT(c); } } @@ -647,6 +652,20 @@ namespace BlackCore return static_cast(this->m_contextApplication); } + CContextNetwork *CRuntime::getCContextNetwork() + { + Q_ASSERT_X(!this->m_contextApplication || this->m_contextNetwork->usingLocalObjects(), "CCoreRuntime", "Cannot downcast to local object"); + return static_cast(this->m_contextNetwork); + } + + const CContextNetwork *CRuntime::getCContextNetwork() const + { + Q_ASSERT_X(!this->m_contextApplication || this->m_contextNetwork->usingLocalObjects(), "CCoreRuntime", "Cannot downcast to local object"); + return static_cast(this->m_contextNetwork); + } + + + CContextOwnAircraft *CRuntime::getCContextOwnAircraft() { Q_ASSERT_X(!this->m_contextOwnAircraft || this->m_contextOwnAircraft->usingLocalObjects(), "CCoreRuntime", "Cannot downcast to local object"); diff --git a/src/blackcore/context_runtime.h b/src/blackcore/context_runtime.h index 531c7fdce..ece7a646e 100644 --- a/src/blackcore/context_runtime.h +++ b/src/blackcore/context_runtime.h @@ -176,6 +176,14 @@ namespace BlackCore //! \remarks only applicable for local object const CContextOwnAircraft *getCContextOwnAircraft() const; + //! Context for network + //! \remarks only applicable for local object + CContextNetwork *getCContextNetwork(); + + //! Context for network + //! \remarks only applicable for local object + const CContextNetwork *getCContextNetwork() const; + //! Context for simulator //! \remarks only applicable for local object CContextSimulator *getCContextSimulator(); diff --git a/src/blackcore/context_simulator_impl.cpp b/src/blackcore/context_simulator_impl.cpp index 1900e6296..c845c886f 100644 --- a/src/blackcore/context_simulator_impl.cpp +++ b/src/blackcore/context_simulator_impl.cpp @@ -124,12 +124,16 @@ namespace BlackCore void CContextSimulator::updateOwnAircraft() { Q_ASSERT(this->getIContextOwnAircraft()); - CAircraft aircraft = m_simulator->getOwnAircraft(); - // the methods will check, if an update is really required + // we make sure not to override values we do not have + CAircraft aircraft = this->getIContextOwnAircraft()->getOwnAircraft(); + CAircraft simulatorAircraft = this->m_simulator->getOwnAircraft(); + aircraft.setSituation(simulatorAircraft.getSituation()); + aircraft.setCockpit(simulatorAircraft.getCom1System(), simulatorAircraft.getCom2System(), simulatorAircraft.getTransponderCode()); + + // the method will check, if an update is really required // these are local (non DBus) calls - this->getIContextOwnAircraft()->updateOwnSituation(aircraft.getSituation(), IContextSimulator::InterfaceName()); - this->getIContextOwnAircraft()->updateOwnCockpit(aircraft.getCom1System(), aircraft.getCom2System(), aircraft.getTransponder(), IContextSimulator::InterfaceName()); + this->getIContextOwnAircraft()->updateOwnAircraft(aircraft, this->getPathAndContextId()); } void CContextSimulator::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &initialSituation) diff --git a/src/blackcore/network.h b/src/blackcore/network.h index b087290f1..42d7c8775 100644 --- a/src/blackcore/network.h +++ b/src/blackcore/network.h @@ -295,19 +295,22 @@ namespace BlackCore /*! * Set the position and altitude of our own aircraft. + * \deprecated No longer needed with own aircraft context, only used in client sample */ virtual void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) = 0; /*! * Set the position, altitude, orientation, and miscellaneous state of our own aircraft. + * \deprecated No longer needed with own aircraft context, only used in client sample */ virtual void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) = 0; /*! * Set the COM frequencies and transponder code and mode of our own aircraft. + * \deprecated No longer needed with own aircraft context, only used in client sample */ - virtual void setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, - const BlackMisc::Aviation::CTransponder &transponder) = 0; + virtual void setOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, + const BlackMisc::Aviation::CTransponder &transponder) = 0; //! @} //////////////////////////////////////////////////////////////// diff --git a/src/blackcore/network_vatlib.cpp b/src/blackcore/network_vatlib.cpp index 8db00c175..6ae7b135a 100644 --- a/src/blackcore/network_vatlib.cpp +++ b/src/blackcore/network_vatlib.cpp @@ -496,7 +496,7 @@ namespace BlackCore m_ownAircraft.setSituation(situation); } - void CNetworkVatlib::setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, + void CNetworkVatlib::setOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &xpdr) { m_ownAircraft.setCom1System(com1); diff --git a/src/blackcore/network_vatlib.h b/src/blackcore/network_vatlib.h index 4cf02baab..47683681d 100644 --- a/src/blackcore/network_vatlib.h +++ b/src/blackcore/network_vatlib.h @@ -70,7 +70,7 @@ namespace BlackCore virtual void setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft) override; virtual void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) override; virtual void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override; - virtual void setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, + virtual void setOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &xpdr) override; diff --git a/src/blackgui/cockpitv1component.cpp b/src/blackgui/cockpitv1component.cpp index d574a7dbf..dfce6abff 100644 --- a/src/blackgui/cockpitv1component.cpp +++ b/src/blackgui/cockpitv1component.cpp @@ -292,7 +292,7 @@ namespace BlackGui bool changedCockpit = false; if (this->getIContextOwnAircraft()) { - changedCockpit = this->getIContextOwnAircraft()->updateOwnCockpit(ownAircraft.getCom1System(), ownAircraft.getCom2System(), ownAircraft.getTransponder(), CCockpitV1Component::cockpitOriginator()); + changedCockpit = this->getIContextOwnAircraft()->updateOwnCockpit(ownAircraft.getCom1System(), ownAircraft.getCom2System(), ownAircraft.getTransponder(), CCockpitV1Component::cockpitOriginator()); } return changedCockpit; } diff --git a/src/blackmisc/avaircraft.cpp b/src/blackmisc/avaircraft.cpp index 8c2a02e01..60958e598 100644 --- a/src/blackmisc/avaircraft.cpp +++ b/src/blackmisc/avaircraft.cpp @@ -56,6 +56,33 @@ namespace BlackMisc } /* + * Set cockpit data + */ + void CAircraft::setCockpit(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder) + { + this->setCom1System(com1); + this->setCom2System(com2); + this->setTransponder(transponder); + } + + /* + * Set cockpit data + */ + void CAircraft::setCockpit(const CComSystem &com1, const CComSystem &com2, qint32 transponderCode) + { + this->setCom1System(com1); + this->setCom2System(com2); + this->m_transponder.setTransponderCode(transponderCode); + } + + + /* + * Changed data + */ + bool CAircraft::hasChangedCockpitData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder) const + { + return this->getCom1System() != com1 || this->getCom2System() != com2 || this->getTransponder() != transponder; + } * Same COM system data */ bool CAircraft::hasSameComData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder) diff --git a/src/blackmisc/avaircraft.h b/src/blackmisc/avaircraft.h index 4648b6423..b8e415f9a 100644 --- a/src/blackmisc/avaircraft.h +++ b/src/blackmisc/avaircraft.h @@ -141,6 +141,15 @@ namespace BlackMisc //! Set COM2 system void setCom2System(const CComSystem &comSystem) { this->m_com2system = comSystem; } + //! Cockpit data + void setCockpit(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder); + + //! Cockpit data + void setCockpit(const CComSystem &com1, const CComSystem &com2, qint32 transponderCode); + + //! Changed cockpit data? + bool hasChangedCockpitData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder) const; + //! Identical COM system? bool hasSameComData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder);