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:
Roland Winklmeier
2015-04-11 20:43:05 +02:00
parent dffb2e3581
commit 6ab2abcf1a
5 changed files with 41 additions and 53 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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]);
}
}
}

View File

@@ -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;