mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 04:25:35 +08:00
Issue #113 Add SIMDATA packet logic in CFSDClient
This commit is contained in:
@@ -86,7 +86,8 @@ namespace BlackCore
|
||||
PublicIP, /*!< What is my public IP address? */
|
||||
INF, /*!< Supervisor Privileged Information Request. */
|
||||
FP, /*!< Send Cached Flight Plan. Response by SERVER. */
|
||||
AircraftConfig /*!< Aircraft Configuration */
|
||||
AircraftConfig, /*!< Aircraft Configuration */
|
||||
EuroscopeSimData/*!< Broadcast to announce we request SIMDATA packets. */
|
||||
// There are many more which are only relevant to ATC clients.
|
||||
};
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "blackcore/fsd/clientidentification.h"
|
||||
#include "blackcore/fsd/deleteatc.h"
|
||||
#include "blackcore/fsd/deletepilot.h"
|
||||
#include "blackcore/fsd/euroscopesimdata.h"
|
||||
#include "blackcore/fsd/pilotdataupdate.h"
|
||||
#include "blackcore/fsd/ping.h"
|
||||
#include "blackcore/fsd/pong.h"
|
||||
@@ -312,6 +313,11 @@ namespace BlackCore
|
||||
sendQueudedMessage(addAtc);
|
||||
CStatusMessage(this).info(u"Sending OBS login as '%1' '%2' '%3' '%4' '%5'") << callsign << cid << toQString(m_atcRating) << m_protocolRevision << name;
|
||||
}
|
||||
|
||||
if (m_server.getFsdSetup().receiveEuroscopeSimData())
|
||||
{
|
||||
this->sendClientQuery(ClientQueryType::EuroscopeSimData, {}, {});
|
||||
}
|
||||
}
|
||||
|
||||
void CFSDClient::sendDeletePilot()
|
||||
@@ -508,6 +514,11 @@ namespace BlackCore
|
||||
const ClientQuery clientQuery(getOwnCallsignAsString(), reveiverCallsign, ClientQueryType::AircraftConfig, queryData);
|
||||
sendQueudedMessage(clientQuery);
|
||||
}
|
||||
else if (queryType == ClientQueryType::EuroscopeSimData)
|
||||
{
|
||||
const ClientQuery clientQuery(getOwnCallsignAsString(), "@94835", ClientQueryType::EuroscopeSimData, { "1" });
|
||||
sendQueudedMessage(clientQuery);
|
||||
}
|
||||
|
||||
increaseStatisticsValue(QStringLiteral("sendClientQuery"), toQString(queryType));
|
||||
}
|
||||
@@ -973,6 +984,9 @@ namespace BlackCore
|
||||
m_messageTypeMapping["#TM"] = MessageType::TextMessage;
|
||||
m_messageTypeMapping["#SB"] = MessageType::PilotClientCom;
|
||||
|
||||
// Euroscope
|
||||
m_messageTypeMapping["SIMDATA"] = MessageType::EuroscopeSimData;
|
||||
|
||||
// IVAO only
|
||||
// Ref: https://github.com/DemonRem/X-IvAP/blob/1b0a14880532a0f5c8fe84be44e462c6892a5596/src/XIvAp/FSDprotocol.h
|
||||
m_messageTypeMapping["!R"] = MessageType::RegistrationInfo;
|
||||
@@ -1135,6 +1149,33 @@ namespace BlackCore
|
||||
emit pilotDataUpdateReceived(situation, transponder);
|
||||
}
|
||||
|
||||
void CFSDClient::handleEuroscopeSimData(const QStringList &tokens)
|
||||
{
|
||||
const EuroscopeSimData data = EuroscopeSimData::fromTokens(tokens);
|
||||
|
||||
CAircraftSituation situation(
|
||||
CCallsign(data.sender(), CCallsign::Aircraft),
|
||||
CCoordinateGeodetic(data.m_latitude, data.m_longitude, data.m_altitude),
|
||||
CHeading(data.m_heading, CAngleUnit::deg()),
|
||||
CAngle(-data.m_pitch, CAngleUnit::deg()),
|
||||
CAngle(-data.m_bank, CAngleUnit::deg()),
|
||||
CSpeed(data.m_groundSpeed, CSpeedUnit::kts()));
|
||||
situation.setOnGround(data.m_onGround);
|
||||
situation.setOnGroundDetails(CAircraftSituation::InFromNetwork);
|
||||
|
||||
// Ref T297, default offset time
|
||||
situation.setCurrentUtcTime();
|
||||
const qint64 offsetTimeMs = receivedPositionFixTsAndGetOffsetTime(situation.getCallsign(), situation.getMSecsSinceEpoch());
|
||||
situation.setTimeOffsetMs(offsetTimeMs);
|
||||
|
||||
CAircraftParts parts;
|
||||
parts.setLights(data.m_lights);
|
||||
parts.setGearDown(data.m_gearPercent);
|
||||
parts.setOnGround(data.m_onGround);
|
||||
|
||||
emit euroscopeSimDataUpdatedReceived(situation, parts, currentOffsetTime(data.sender()), data.m_model, data.m_livery);
|
||||
}
|
||||
|
||||
void CFSDClient::handlePing(const QStringList &tokens)
|
||||
{
|
||||
const Ping ping = Ping::fromTokens(tokens);
|
||||
@@ -2031,9 +2072,7 @@ namespace BlackCore
|
||||
case MessageType::TextMessage: handleTextMessage(tokens); break;
|
||||
case MessageType::PilotClientCom: handleCustomPilotPacket(tokens); break;
|
||||
case MessageType::RevBClientParts: handleRevBClientPartsPacket(tokens); break;
|
||||
|
||||
|
||||
|
||||
case MessageType::EuroscopeSimData: handleEuroscopeSimData(tokens); break;
|
||||
|
||||
// normally we should not get here
|
||||
default:
|
||||
|
||||
@@ -225,6 +225,7 @@ namespace BlackCore
|
||||
void planeInformationReceived(const QString &sender, const QString &aircraft, const QString &airline, const QString &livery);
|
||||
void customPilotPacketReceived(const QString &sender, const QStringList &data);
|
||||
void interimPilotDataUpdatedReceived(const BlackMisc::Aviation::CAircraftSituation &situation);
|
||||
void euroscopeSimDataUpdatedReceived(const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts, qint64 currentOffsetTimeMs, const QString &model, const QString &livery);
|
||||
void rawFsdMessage(const BlackMisc::Network::CRawFsdMessage &rawFsdMessage);
|
||||
void planeInformationFsinnReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineIcaoDesignator, const QString &aircraftDesignator, const QString &combinedAircraftType, const QString &modelString);
|
||||
void revbAircraftConfigReceived(const QString &sender, const QString &config, qint64 currentOffsetTimeMs);
|
||||
@@ -364,6 +365,7 @@ namespace BlackCore
|
||||
void handleDeletePilot(const QStringList &tokens);
|
||||
void handleTextMessage(const QStringList &tokens);
|
||||
void handlePilotDataUpdate(const QStringList &tokens);
|
||||
void handleEuroscopeSimData(const QStringList &tokens);
|
||||
void handlePing(const QStringList &tokens);
|
||||
void handlePong(const QStringList &tokens);
|
||||
void handleKillRequest(const QStringList &tokens);
|
||||
|
||||
@@ -271,6 +271,7 @@ namespace BlackCore
|
||||
case ClientQueryType::INF: return "INF";
|
||||
case ClientQueryType::FP: return "FP";
|
||||
case ClientQueryType::AircraftConfig: return "ACC";
|
||||
case ClientQueryType::EuroscopeSimData: return "SIMDATA";
|
||||
case ClientQueryType::Unknown: return "Unknown query type";
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user