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;