mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 23:05:36 +08:00
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.
This commit is contained in:
@@ -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<int>(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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -267,10 +267,8 @@ namespace BlackCore
|
||||
* </BLOCKQUOTE>
|
||||
*/
|
||||
//! @{
|
||||
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);
|
||||
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user