mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-20 12:35:43 +08:00
refs #218 enable retreiving user's flightplan from the network
after it was potentially amended by a controller
This commit is contained in:
@@ -24,6 +24,7 @@ Client::Client(QObject *parent)
|
|||||||
connect(m_net, &INetwork::capabilitiesReplyReceived, this, &Client::capabilitiesReplyReceived);
|
connect(m_net, &INetwork::capabilitiesReplyReceived, this, &Client::capabilitiesReplyReceived);
|
||||||
connect(m_net, &INetwork::kicked, this, &Client::kicked);
|
connect(m_net, &INetwork::kicked, this, &Client::kicked);
|
||||||
connect(m_net, &INetwork::metarReplyReceived, this, &Client::metarReplyReceived);
|
connect(m_net, &INetwork::metarReplyReceived, this, &Client::metarReplyReceived);
|
||||||
|
connect(m_net, &INetwork::flightPlanReplyReceived, this, &Client::flightPlanReplyReceived);
|
||||||
connect(m_net, &INetwork::pilotDisconnected, this, &Client::pilotDisconnected);
|
connect(m_net, &INetwork::pilotDisconnected, this, &Client::pilotDisconnected);
|
||||||
connect(m_net, &INetwork::icaoCodesReplyReceived, this, &Client::icaoCodesReplyReceived);
|
connect(m_net, &INetwork::icaoCodesReplyReceived, this, &Client::icaoCodesReplyReceived);
|
||||||
connect(m_net, &INetwork::pongReceived, this, &Client::pongReceived);
|
connect(m_net, &INetwork::pongReceived, this, &Client::pongReceived);
|
||||||
@@ -44,6 +45,7 @@ Client::Client(QObject *parent)
|
|||||||
connect(this, &Client::sendAtcQuery, m_net, &INetwork::sendAtcQuery);
|
connect(this, &Client::sendAtcQuery, m_net, &INetwork::sendAtcQuery);
|
||||||
connect(this, &Client::sendAtisQuery, m_net, &INetwork::sendAtisQuery);
|
connect(this, &Client::sendAtisQuery, m_net, &INetwork::sendAtisQuery);
|
||||||
connect(this, &Client::sendFlightPlan, m_net, &INetwork::sendFlightPlan);
|
connect(this, &Client::sendFlightPlan, m_net, &INetwork::sendFlightPlan);
|
||||||
|
connect(this, &Client::sendFlightPlanQuery, m_net, &INetwork::sendFlightPlanQuery);
|
||||||
connect(this, &Client::sendRealNameQuery, m_net, &INetwork::sendRealNameQuery);
|
connect(this, &Client::sendRealNameQuery, m_net, &INetwork::sendRealNameQuery);
|
||||||
connect(this, &Client::sendCapabilitiesQuery, m_net, &INetwork::sendCapabilitiesQuery);
|
connect(this, &Client::sendCapabilitiesQuery, m_net, &INetwork::sendCapabilitiesQuery);
|
||||||
connect(this, &Client::sendIcaoCodesQuery, m_net, &INetwork::sendIcaoCodesQuery);
|
connect(this, &Client::sendIcaoCodesQuery, m_net, &INetwork::sendIcaoCodesQuery);
|
||||||
@@ -76,6 +78,7 @@ Client::Client(QObject *parent)
|
|||||||
m_commands["atc"] = std::bind(&Client::sendAtcQueryCmd, this, _1);
|
m_commands["atc"] = std::bind(&Client::sendAtcQueryCmd, this, _1);
|
||||||
m_commands["atis"] = std::bind(&Client::sendAtisQueryCmd, this, _1);
|
m_commands["atis"] = std::bind(&Client::sendAtisQueryCmd, this, _1);
|
||||||
m_commands["flightplan"] = std::bind(&Client::sendFlightPlanCmd, this, _1);
|
m_commands["flightplan"] = std::bind(&Client::sendFlightPlanCmd, this, _1);
|
||||||
|
m_commands["getflightplan"] = std::bind(&Client::sendFlightPlanQueryCmd, this, _1);
|
||||||
m_commands["name"] = std::bind(&Client::sendRealNameQueryCmd, this, _1);
|
m_commands["name"] = std::bind(&Client::sendRealNameQueryCmd, this, _1);
|
||||||
m_commands["caps"] = std::bind(&Client::sendCapabilitiesQueryCmd, this, _1);
|
m_commands["caps"] = std::bind(&Client::sendCapabilitiesQueryCmd, this, _1);
|
||||||
m_commands["icao"] = std::bind(&Client::sendIcaoCodesQueryCmd, this, _1);
|
m_commands["icao"] = std::bind(&Client::sendIcaoCodesQueryCmd, this, _1);
|
||||||
@@ -266,6 +269,11 @@ void Client::sendFlightPlanCmd(QTextStream &args)
|
|||||||
emit sendFlightPlan(fp);
|
emit sendFlightPlan(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client::sendFlightPlanQueryCmd(QTextStream &)
|
||||||
|
{
|
||||||
|
emit sendFlightPlanQuery();
|
||||||
|
}
|
||||||
|
|
||||||
void Client::sendServerQueryCmd(QTextStream &args)
|
void Client::sendServerQueryCmd(QTextStream &args)
|
||||||
{
|
{
|
||||||
QString callsign;
|
QString callsign;
|
||||||
@@ -505,6 +513,25 @@ void Client::metarReplyReceived(const QString &data)
|
|||||||
std::cout << "METAR " << data.toStdString() << std::endl;
|
std::cout << "METAR " << data.toStdString() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client::flightPlanReplyReceived(const BlackMisc::Aviation::CFlightPlan &flightPlan)
|
||||||
|
{
|
||||||
|
std::string rules;
|
||||||
|
switch (flightPlan.getFlightRules())
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case BlackMisc::Aviation::CFlightPlan::IFR: rules = "IFR"; break;
|
||||||
|
case BlackMisc::Aviation::CFlightPlan::VFR: rules = "VFR"; break;
|
||||||
|
case BlackMisc::Aviation::CFlightPlan::SVFR: rules = "SVFR"; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "FLIGHTPLAN " << flightPlan.getEquipmentIcao().toStdString() << " " << flightPlan.getOriginAirportIcao() << " "
|
||||||
|
<< flightPlan.getDestinationAirportIcao() << " " << flightPlan.getAlternateAirportIcao() << " "
|
||||||
|
<< flightPlan.getTakeoffTimePlannedHourMin().toStdString() << " " << flightPlan.getTakeoffTimeActualHourMin().toStdString() << " "
|
||||||
|
<< flightPlan.getEnrouteTime() << " " << flightPlan.getFuelTime() << " "
|
||||||
|
<< flightPlan.getCruiseAltitude() << " " << flightPlan.getCruiseTrueAirspeed() << " " << rules << " "
|
||||||
|
<< flightPlan.getRoute().toStdString() << " " << flightPlan.getRemarks().toStdString() << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
void Client::pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign)
|
void Client::pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign)
|
||||||
{
|
{
|
||||||
std::cout << "PILOT_DISCONNECTED " << callsign << std::endl;
|
std::cout << "PILOT_DISCONNECTED " << callsign << std::endl;
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ private: //commands
|
|||||||
void sendAtcQueryCmd(QTextStream &args);
|
void sendAtcQueryCmd(QTextStream &args);
|
||||||
void sendAtisQueryCmd(QTextStream &args);
|
void sendAtisQueryCmd(QTextStream &args);
|
||||||
void sendFlightPlanCmd(QTextStream &args);
|
void sendFlightPlanCmd(QTextStream &args);
|
||||||
|
void sendFlightPlanQueryCmd(QTextStream &args);
|
||||||
void sendRealNameQueryCmd(QTextStream &args);
|
void sendRealNameQueryCmd(QTextStream &args);
|
||||||
void sendCapabilitiesQueryCmd(QTextStream &args);
|
void sendCapabilitiesQueryCmd(QTextStream &args);
|
||||||
void sendIcaoCodesQueryCmd(QTextStream &args);
|
void sendIcaoCodesQueryCmd(QTextStream &args);
|
||||||
@@ -73,6 +74,7 @@ signals: //to send to INetwork
|
|||||||
void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &fp);
|
void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &fp);
|
||||||
|
void sendFlightPlanQuery();
|
||||||
void sendRealNameQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
void sendRealNameQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
void sendIcaoCodesQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
void sendIcaoCodesQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
@@ -101,6 +103,7 @@ public slots: //to receive from INetwork
|
|||||||
void capabilitiesReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, quint32 flags);
|
void capabilitiesReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, quint32 flags);
|
||||||
void kicked(const QString &msg);
|
void kicked(const QString &msg);
|
||||||
void metarReplyReceived(const QString &data);
|
void metarReplyReceived(const QString &data);
|
||||||
|
void flightPlanReplyReceived(const BlackMisc::Aviation::CFlightPlan &flightPlan);
|
||||||
void pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign);
|
void pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
void icaoCodesReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icaoData);
|
void icaoCodesReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icaoData);
|
||||||
void pongReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CTime &elapsedTime);
|
void pongReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CTime &elapsedTime);
|
||||||
|
|||||||
@@ -246,6 +246,13 @@ namespace BlackCore
|
|||||||
*/
|
*/
|
||||||
virtual void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &flightPlan) = 0;
|
virtual void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &flightPlan) = 0;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Send a message querying our currently filed flight plan, which may have been amended by a controller.
|
||||||
|
* \pre Network must be connected when calling this function.
|
||||||
|
* \sa flightPlanReplyReceived
|
||||||
|
*/
|
||||||
|
virtual void sendFlightPlanQuery() = 0;
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
//! \name Aircraft slots
|
//! \name Aircraft slots
|
||||||
@@ -366,6 +373,12 @@ namespace BlackCore
|
|||||||
*/
|
*/
|
||||||
void atisLogoffTimeReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &zuluTime);
|
void atisLogoffTimeReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &zuluTime);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* We received a reply to one of our flight plan queries, containing our up-to-date flight plan.
|
||||||
|
* \sa sendFlightPlanQuery
|
||||||
|
*/
|
||||||
|
void flightPlanReplyReceived(const BlackMisc::Aviation::CFlightPlan &flightPlan);
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
//! \name Aircraft signals
|
//! \name Aircraft signals
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ namespace BlackCore
|
|||||||
m_net->InstallOnInfoQueryReplyReceivedEvent(onInfoQueryReplyReceived, this);
|
m_net->InstallOnInfoQueryReplyReceivedEvent(onInfoQueryReplyReceived, this);
|
||||||
m_net->InstallOnCapabilitiesReplyReceivedEvent(onCapabilitiesReplyReceived, this);
|
m_net->InstallOnCapabilitiesReplyReceivedEvent(onCapabilitiesReplyReceived, this);
|
||||||
m_net->InstallOnAtisReplyReceivedEvent(onAtisReplyReceived, this);
|
m_net->InstallOnAtisReplyReceivedEvent(onAtisReplyReceived, this);
|
||||||
|
m_net->InstallOnFlightPlanReceivedEvent(onFlightPlanReceived, this);
|
||||||
m_net->InstallOnTemperatureDataReceivedEvent(onTemperatureDataReceived, this);
|
m_net->InstallOnTemperatureDataReceivedEvent(onTemperatureDataReceived, this);
|
||||||
m_net->InstallOnErrorReceivedEvent(onErrorReceived, this);
|
m_net->InstallOnErrorReceivedEvent(onErrorReceived, this);
|
||||||
m_net->InstallOnWindDataReceivedEvent(onWindDataReceived, this);
|
m_net->InstallOnWindDataReceivedEvent(onWindDataReceived, this);
|
||||||
@@ -645,6 +646,17 @@ namespace BlackCore
|
|||||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CNetworkVatlib::sendFlightPlanQuery()
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_net->SendInfoQuery(Cvatlib_Network::infoQuery_FP, toFSD(m_callsign));
|
||||||
|
}
|
||||||
|
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||||
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::sendRealNameQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
void CNetworkVatlib::sendRealNameQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected");
|
Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected");
|
||||||
@@ -984,6 +996,49 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CNetworkVatlib::onFlightPlanReceived(Cvatlib_Network *, const char *callsign, Cvatlib_Network::FlightPlan fp, void *cbvar)
|
||||||
|
{
|
||||||
|
if (cbvar_cast(cbvar)->m_callsign != cbvar_cast(cbvar)->fromFSD(callsign))
|
||||||
|
{
|
||||||
|
return; // ignore other pilots' flightplans
|
||||||
|
}
|
||||||
|
|
||||||
|
BlackMisc::Aviation::CFlightPlan::FlightRules rules = BlackMisc::Aviation::CFlightPlan::VFR;
|
||||||
|
switch (fp.fpRules)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case Cvatlib_Network::fpRuleType_VFR: rules = BlackMisc::Aviation::CFlightPlan::VFR; break;
|
||||||
|
case Cvatlib_Network::fpRuleType_IFR: rules = BlackMisc::Aviation::CFlightPlan::IFR; break;
|
||||||
|
case Cvatlib_Network::fpRuleType_SVFR: rules = BlackMisc::Aviation::CFlightPlan::SVFR; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto cruiseAltString = cbvar_cast(cbvar)->fromFSD(fp.cruiseAlt);
|
||||||
|
if (! cruiseAltString.contains(QRegExp("[A-Z][a-z]")))
|
||||||
|
{
|
||||||
|
cruiseAltString += "ft";
|
||||||
|
}
|
||||||
|
BlackMisc::Aviation::CAltitude cruiseAlt;
|
||||||
|
cruiseAlt.parseFromString(cruiseAltString);
|
||||||
|
|
||||||
|
BlackMisc::Aviation::CFlightPlan flightPlan(
|
||||||
|
cbvar_cast(cbvar)->fromFSD(fp.acType),
|
||||||
|
cbvar_cast(cbvar)->fromFSD(fp.depApt),
|
||||||
|
cbvar_cast(cbvar)->fromFSD(fp.destApt),
|
||||||
|
cbvar_cast(cbvar)->fromFSD(fp.altApt),
|
||||||
|
QDateTime::fromString(QString::number(fp.depTimePlanned), "hhmm"),
|
||||||
|
QDateTime::fromString(QString::number(fp.depTimeActual), "hhmm"),
|
||||||
|
BlackMisc::PhysicalQuantities::CTime(fp.enrouteHrs * 60 + fp.enrouteMins, BlackMisc::PhysicalQuantities::CTimeUnit::min()),
|
||||||
|
BlackMisc::PhysicalQuantities::CTime(fp.fuelHrs * 60 + fp.fuelMins, BlackMisc::PhysicalQuantities::CTimeUnit::min()),
|
||||||
|
cruiseAlt,
|
||||||
|
BlackMisc::PhysicalQuantities::CSpeed(fp.trueCruiseSpeed, BlackMisc::PhysicalQuantities::CSpeedUnit::kts()),
|
||||||
|
rules,
|
||||||
|
cbvar_cast(cbvar)->fromFSD(fp.route),
|
||||||
|
cbvar_cast(cbvar)->fromFSD(fp.remarks)
|
||||||
|
);
|
||||||
|
|
||||||
|
emit cbvar_cast(cbvar)->flightPlanReplyReceived(flightPlan);
|
||||||
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onTemperatureDataReceived(Cvatlib_Network *, Cvatlib_Network::TempLayer /** layers **/ [4], INT /** pressure **/, void * /** cbvar **/)
|
void CNetworkVatlib::onTemperatureDataReceived(Cvatlib_Network *, Cvatlib_Network::TempLayer /** layers **/ [4], INT /** pressure **/, void * /** cbvar **/)
|
||||||
{
|
{
|
||||||
//TODO
|
//TODO
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ namespace BlackCore
|
|||||||
virtual void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
virtual void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||||
virtual void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
virtual void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||||
virtual void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &flightPlan) override;
|
virtual void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &flightPlan) override;
|
||||||
|
virtual void sendFlightPlanQuery() override;
|
||||||
|
|
||||||
// Aircraft slots
|
// Aircraft slots
|
||||||
virtual void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
virtual void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||||
@@ -126,6 +127,7 @@ namespace BlackCore
|
|||||||
static void onInfoQueryReplyReceived(Cvatlib_Network *, const char *callsign, Cvatlib_Network::infoQuery type, const char *data, const char *data2, void *cbvar);
|
static void onInfoQueryReplyReceived(Cvatlib_Network *, const char *callsign, Cvatlib_Network::infoQuery type, const char *data, const char *data2, void *cbvar);
|
||||||
static void onCapabilitiesReplyReceived(Cvatlib_Network *, const char *callsign, const char **keysValues, void *cbvar);
|
static void onCapabilitiesReplyReceived(Cvatlib_Network *, const char *callsign, const char **keysValues, void *cbvar);
|
||||||
static void onAtisReplyReceived(Cvatlib_Network *, const char *callsign, Cvatlib_Network::atisLineType type, const char *data, void *cbvar);
|
static void onAtisReplyReceived(Cvatlib_Network *, const char *callsign, Cvatlib_Network::atisLineType type, const char *data, void *cbvar);
|
||||||
|
static void onFlightPlanReceived(Cvatlib_Network *, const char *callsign, Cvatlib_Network::FlightPlan fp, void *cbvar);
|
||||||
static void onTemperatureDataReceived(Cvatlib_Network *, Cvatlib_Network::TempLayer layers[4], INT pressure, void *cbvar);
|
static void onTemperatureDataReceived(Cvatlib_Network *, Cvatlib_Network::TempLayer layers[4], INT pressure, void *cbvar);
|
||||||
static void onErrorReceived(Cvatlib_Network *, Cvatlib_Network::error type, const char *msg, const char *data, void *cbvar);
|
static void onErrorReceived(Cvatlib_Network *, Cvatlib_Network::error type, const char *msg, const char *data, void *cbvar);
|
||||||
static void onWindDataReceived(Cvatlib_Network *, Cvatlib_Network::WindLayer layers[4], void *cbvar);
|
static void onWindDataReceived(Cvatlib_Network *, Cvatlib_Network::WindLayer layers[4], void *cbvar);
|
||||||
|
|||||||
Reference in New Issue
Block a user