From 6ab2abcf1af419e97fbc25e32b75716a7bd48660 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Sat, 11 Apr 2015 20:43:05 +0200 Subject: [PATCH] refs #377 Refactor custom FSinn packet handling The names were a bit misleading, hence this patch does rename the methods to something more obvious. It also changes the behaviour of CNetworkVatlib to automatically answer a custom FSinn query. In both cases the important details are extracted and signaled to airspace monitor. The airspace monitor will send FSinn queries only if the exact model is not yet known. This would be the case when another client had sent a FSinn query already. --- src/blackcore/airspace_monitor.cpp | 31 ++++++++------------------ src/blackcore/airspace_monitor.h | 7 +----- src/blackcore/network.h | 14 +++--------- src/blackcore/network_vatlib.cpp | 35 +++++++++++++++++++++--------- src/blackcore/network_vatlib.h | 7 +++--- 5 files changed, 41 insertions(+), 53 deletions(-) diff --git a/src/blackcore/airspace_monitor.cpp b/src/blackcore/airspace_monitor.cpp index d5b40c9f2..c22c6e9d8 100644 --- a/src/blackcore/airspace_monitor.cpp +++ b/src/blackcore/airspace_monitor.cpp @@ -45,7 +45,7 @@ namespace BlackCore this->connect(this->m_network, &INetwork::aircraftPositionUpdate, this, &CAirspaceMonitor::ps_aircraftUpdateReceived); this->connect(this->m_network, &INetwork::frequencyReplyReceived, this, &CAirspaceMonitor::ps_frequencyReceived); this->connect(this->m_network, &INetwork::capabilitiesReplyReceived, this, &CAirspaceMonitor::ps_capabilitiesReplyReceived); - this->connect(this->m_network, &INetwork::fsipirCustomPacketReceived, this, &CAirspaceMonitor::ps_fsipirCustomPacketReceived); + this->connect(this->m_network, &INetwork::customFSinnPacketReceived, this, &CAirspaceMonitor::ps_customFSinnPacketReceived); this->connect(this->m_network, &INetwork::serverReplyReceived, this, &CAirspaceMonitor::ps_serverReplyReceived); this->connect(this->m_network, &INetwork::aircraftConfigPacketReceived, this, &CAirspaceMonitor::ps_aircraftConfigReceived); @@ -421,7 +421,7 @@ namespace BlackCore if (flags & INetwork::SupportsAircraftConfigs) m_network->sendAircraftConfigQuery(callsign); } - void CAirspaceMonitor::ps_fsipirCustomPacketReceived(const CCallsign &callsign, const QString &airlineIcao, const QString &aircraftDesignator, const QString &combinedAircraftType, const QString &model) + void CAirspaceMonitor::ps_customFSinnPacketReceived(const CCallsign &callsign, const QString &airlineIcao, const QString &aircraftDesignator, const QString &combinedAircraftType, const QString &model) { if (!this->m_connected || callsign.isEmpty() || model.isEmpty()) { return; } @@ -437,7 +437,6 @@ namespace BlackCore this->m_otherClients.applyIf(&CClient::getCallsign, callsign, vm); vm.prependIndex(static_cast(CSimulatedAircraft::IndexClient)); this->m_aircraftInRange.applyIf(&CSimulatedAircraft::getCallsign, callsign, vm); - this->sendFsipiCustomPacket(callsign); // response // ICAO response from custom data if (!aircraftDesignator.isEmpty()) @@ -488,24 +487,6 @@ namespace BlackCore this->m_flightPlanCache.insert(callsign, plan); } - void CAirspaceMonitor::sendFsipiCustomPacket(const CCallsign &recipientCallsign) const - { - if (!this->m_connected) { return; } - CAircraftIcao icao = ownAircraft().getIcaoInfo(); - QString modelString = ownAircraft().getModel().getModelString(); - if (modelString.isEmpty()) { modelString = CProject::systemNameAndVersion(); } - this->m_network->sendFsipiCustomPacket(recipientCallsign, icao.getAirlineDesignator(), icao.getAircraftDesignator(), icao.getAircraftCombinedType(), modelString); - } - - void CAirspaceMonitor::sendFsipirCustomPacket(const CCallsign &recipientCallsign) const - { - if (!this->m_connected) { return; } - CAircraftIcao icao = ownAircraft().getIcaoInfo(); - QString modelString = ownAircraft().getModel().getModelString(); - if (modelString.isEmpty()) { modelString = CProject::systemNameAndVersion(); } - this->m_network->sendFsipirCustomPacket(recipientCallsign, icao.getAirlineDesignator(), icao.getAircraftDesignator(), icao.getAircraftCombinedType(), modelString); - } - void CAirspaceMonitor::removeAllOnlineAtcStations() { m_atcWatchdog.removeAll(); @@ -818,7 +799,13 @@ namespace BlackCore if (this->m_network->isConnected()) { // the order here makes some sense, as we hope to receive ICAO codes last, and everthing else already in place - this->sendFsipirCustomPacket(callsign); // own aircraft model + + // Send a custom FSinn query only if we don't have the exact model yet + CClient c = this->m_otherClients.findByCallsign(callsign).frontOrDefault(); + if (c.getAircraftModel().getModelType() != CAircraftModel::TypeQueriedFromNetwork) + { + this->m_network->sendCustomFsinnQuery(callsign); + } this->m_network->sendFrequencyQuery(callsign); this->m_network->sendRealNameQuery(callsign); this->m_network->sendCapabilitiesQuery(callsign); diff --git a/src/blackcore/airspace_monitor.h b/src/blackcore/airspace_monitor.h index e9d40152a..1a5360071 100644 --- a/src/blackcore/airspace_monitor.h +++ b/src/blackcore/airspace_monitor.h @@ -185,11 +185,6 @@ namespace BlackCore bool m_serverSupportsNameQuery = false; //!< not all servers support name query bool m_connected = false; //!< retrieve data - // TODO FIXME (MS) should be in INetwork - void sendFsipiCustomPacket(const BlackMisc::Aviation::CCallsign &recipientCallsign) const; - void sendFsipirCustomPacket(const BlackMisc::Aviation::CCallsign &recipientCallsign) const; - QStringList createFsipiCustomPacketData() const; - //! Remove ATC online stations void removeAllOnlineAtcStations(); @@ -211,7 +206,7 @@ namespace BlackCore void ps_realNameReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &realname); void ps_capabilitiesReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, quint32 flags); - void ps_fsipirCustomPacketReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &p1, const QString &aircraftDesignator, const QString &combinedAircraftType, const QString &model); + void ps_customFSinnPacketReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &p1, const QString &aircraftDesignator, const QString &combinedAircraftType, const QString &model); void ps_serverReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &server); void ps_metarReceived(const QString &metarMessage); void ps_flightPlanReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CFlightPlan &flightPlan); diff --git a/src/blackcore/network.h b/src/blackcore/network.h index b677dd7cc..fbbd283e3 100644 --- a/src/blackcore/network.h +++ b/src/blackcore/network.h @@ -267,10 +267,8 @@ namespace BlackCore * */ //! @{ - virtual void sendFsipiCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineDesignator, - const QString &aircraftDesignator, const QString &combinedType, const QString &modelString) = 0; - virtual void sendFsipirCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineDesignator, - const QString &aircraftDesignator, const QString &combinedType, const QString &modelString) = 0; + virtual void sendCustomFsinnQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0; + virtual void sendCustomFsinnReponse(const BlackMisc::Aviation::CCallsign &callsign) = 0; //! @} //! Broadcast an incremental aircraft config @@ -516,15 +514,9 @@ namespace BlackCore /*! * We received an FSInn custom packet. */ - void fsipiCustomPacketReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineDesignator, + void customFSinnPacketReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineDesignator, const QString &aircraftDesignator, const QString &combinedType, const QString &modelString); - /*! - * We received an FSInn custom response packet. - */ - void fsipirCustomPacketReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineDesignator, - const QString &aircraftDesignator, const QString &combinedType, const QString &modelString); - //! We received a aircraft config packet void aircraftConfigPacketReceived(const BlackMisc::Aviation::CCallsign &callsign, const QJsonObject &incremental, bool isFull); diff --git a/src/blackcore/network_vatlib.cpp b/src/blackcore/network_vatlib.cpp index 270e2156d..49351e766 100644 --- a/src/blackcore/network_vatlib.cpp +++ b/src/blackcore/network_vatlib.cpp @@ -577,18 +577,28 @@ namespace BlackCore Vat_RequestWeather(m_net.data(), toFSD(airportIcao.asString())); } - void CNetworkVatlib::sendFsipiCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, - const QString &airlineIcao, const QString &aircraftIcao, const QString &combinedType, const QString &modelString) + void CNetworkVatlib::sendCustomFsinnQuery(const BlackMisc::Aviation::CCallsign &callsign) { - QStringList data { { "0" }, airlineIcao, aircraftIcao, { "" }, { "" }, { "" }, { "" }, combinedType, modelString }; - sendCustomPacket(callsign, "FSIPI", data); + Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected"); + CAircraftIcao icao = ownAircraft().getIcaoInfo(); + QString modelString = ownAircraft().getModel().getModelString(); + if (modelString.isEmpty()) { modelString = CProject::systemNameAndVersion(); } + + QStringList data { { "0" }, icao.getAirlineDesignator(), icao.getAircraftDesignator(), + { "" }, { "" }, { "" }, { "" }, icao.getAircraftCombinedType(), modelString }; + sendCustomPacket(callsign, "FSIPIR", data); } - void CNetworkVatlib::sendFsipirCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, - const QString &airlineIcao, const QString &aircraftIcao, const QString &combinedType, const QString &modelString) + void CNetworkVatlib::sendCustomFsinnReponse(const BlackMisc::Aviation::CCallsign &callsign) { - QStringList data { { "0" }, airlineIcao, aircraftIcao, { "" }, { "" }, { "" }, { "" }, combinedType, modelString }; - sendCustomPacket(callsign, "FSIPIR", data); + Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected"); + CAircraftIcao icao = ownAircraft().getIcaoInfo(); + QString modelString = ownAircraft().getModel().getModelString(); + if (modelString.isEmpty()) { modelString = CProject::systemNameAndVersion(); } + + QStringList data { { "0" }, icao.getAirlineDesignator(), icao.getAircraftDesignator(), + { "" }, { "" }, { "" }, { "" }, icao.getAircraftCombinedType(), modelString }; + sendCustomPacket(callsign, "FSIPI", data); } void CNetworkVatlib::enableFastPositionSending(bool enable) @@ -781,7 +791,9 @@ namespace BlackCore } else { - emit fsipiCustomPacketReceived(callsign, data[1], data[2], data[7], data[8]); + // It doesn't matter whether it was a query or response. The information + // is the same for both. + emit customFSinnPacketReceived(callsign, data[1], data[2], data[7], data[8]); } } else if (packetId.compare("FSIPIR", Qt::CaseInsensitive) == 0) @@ -792,7 +804,10 @@ namespace BlackCore } else { - emit fsipirCustomPacketReceived(callsign, data[1], data[2], data[7], data[8]); + sendCustomFsinnReponse(callsign); + // It doesn't matter whether it was a query or response. The information + // is the same for both. + emit customFSinnPacketReceived(callsign, data[1], data[2], data[7], data[8]); } } } diff --git a/src/blackcore/network_vatlib.h b/src/blackcore/network_vatlib.h index 3f9b19e22..53b930ea4 100644 --- a/src/blackcore/network_vatlib.h +++ b/src/blackcore/network_vatlib.h @@ -59,10 +59,9 @@ namespace BlackCore virtual void sendIpQuery() override; virtual void sendServerQuery(const BlackMisc::Aviation::CCallsign &callsign) override; virtual void sendCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, const QString &packetId, const QStringList &data) override; - virtual void sendFsipiCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineDesignator, - const QString &aircraftDesignator, const QString &combinedType, const QString &modelString) override; - virtual void sendFsipirCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineDesignator, - const QString &aircraftDesignator, const QString &combinedType, const QString &modelString) override; + virtual void sendCustomFsinnQuery(const BlackMisc::Aviation::CCallsign &callsign) override; + virtual void sendCustomFsinnReponse(const BlackMisc::Aviation::CCallsign &callsign) override; + virtual bool isFastPositionSendingEnabled() const override; virtual void enableFastPositionSending(bool enable) override; virtual void broadcastAircraftConfig(const QJsonObject &config) override;