From b4256298e71431aa194014a26cc6220e0b527b3a Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Fri, 28 Mar 2014 16:54:29 +0000 Subject: [PATCH] refs #48 INetwork sending flight plans --- samples/cli_client/client.cpp | 34 ++++++++++++++++++++++++++++++++ samples/cli_client/client.h | 2 ++ src/blackcore/network.h | 7 ++++++- src/blackcore/network_vatlib.cpp | 34 ++++++++++++++++++++++++++++++++ src/blackcore/network_vatlib.h | 1 + 5 files changed, 77 insertions(+), 1 deletion(-) diff --git a/samples/cli_client/client.cpp b/samples/cli_client/client.cpp index f40ef06c7..7728aab42 100644 --- a/samples/cli_client/client.cpp +++ b/samples/cli_client/client.cpp @@ -41,6 +41,7 @@ Client::Client(BlackMisc::IContext &ctx) connect(this, &Client::sendServerQuery, m_net, &INetwork::sendServerQuery); connect(this, &Client::sendAtcQuery, m_net, &INetwork::sendAtcQuery); connect(this, &Client::sendAtisQuery, m_net, &INetwork::sendAtisQuery); + connect(this, &Client::sendFlightPlan, m_net, &INetwork::sendFlightPlan); connect(this, &Client::sendRealNameQuery, m_net, &INetwork::sendRealNameQuery); connect(this, &Client::sendCapabilitiesQuery, m_net, &INetwork::sendCapabilitiesQuery); connect(this, &Client::sendIcaoCodesQuery, m_net, &INetwork::sendIcaoCodesQuery); @@ -69,6 +70,7 @@ Client::Client(BlackMisc::IContext &ctx) m_commands["server"] = std::bind(&Client::sendServerQueryCmd, this, _1); m_commands["atc"] = std::bind(&Client::sendAtcQueryCmd, this, _1); m_commands["atis"] = std::bind(&Client::sendAtisQueryCmd, this, _1); + m_commands["flightplan"] = std::bind(&Client::sendFlightPlanCmd, this, _1); m_commands["name"] = std::bind(&Client::sendRealNameQueryCmd, this, _1); m_commands["caps"] = std::bind(&Client::sendCapabilitiesQueryCmd, this, _1); m_commands["icao"] = std::bind(&Client::sendIcaoCodesQueryCmd, this, _1); @@ -208,6 +210,38 @@ void Client::sendFreqQueryCmd(QTextStream &args) emit sendFreqQuery(callsign); } +void Client::sendFlightPlanCmd(QTextStream &args) +{ + QString equipmentIcao; + QString originAirportIcao; + QString destinationAirportIcao; + QString alternateAirportIcao; + QString takeoffTimePlanned; + QString takeoffTimeActual; + int enrouteTime; + int fuelTime; + int cruiseAltitude; + int cruiseTrueAirspeed; + QString flightRulesString; + QString route; + args >> equipmentIcao >> originAirportIcao >> destinationAirportIcao >> alternateAirportIcao >> takeoffTimePlanned >> takeoffTimeActual + >> enrouteTime >> fuelTime >> cruiseAltitude >> cruiseTrueAirspeed >> flightRulesString >> route; + + BlackMisc::Aviation::CFlightPlan::FlightRules flightRules; + if (flightRulesString == "IFR") { flightRules = BlackMisc::Aviation::CFlightPlan::IFR; } + else if (flightRulesString == "SVFR") { flightRules = BlackMisc::Aviation::CFlightPlan::SVFR; } + else { flightRules = BlackMisc::Aviation::CFlightPlan::VFR; } + + BlackMisc::Aviation::CFlightPlan fp(equipmentIcao, originAirportIcao, destinationAirportIcao, alternateAirportIcao, + QDateTime::fromString(takeoffTimePlanned, "hhmm"), QDateTime::fromString(takeoffTimeActual, "hhmm"), + BlackMisc::PhysicalQuantities::CTime(enrouteTime, BlackMisc::PhysicalQuantities::CTimeUnit::hrmin()), + BlackMisc::PhysicalQuantities::CTime(fuelTime, BlackMisc::PhysicalQuantities::CTimeUnit::hrmin()), + BlackMisc::Aviation::CAltitude(cruiseAltitude, BlackMisc::Aviation::CAltitude::MeanSeaLevel, BlackMisc::PhysicalQuantities::CLengthUnit::ft()), + BlackMisc::PhysicalQuantities::CSpeed(cruiseTrueAirspeed, BlackMisc::PhysicalQuantities::CSpeedUnit::kts()), + flightRules, route, args.readAll()); + emit sendFlightPlan(fp); +} + void Client::sendServerQueryCmd(QTextStream &args) { QString callsign; diff --git a/samples/cli_client/client.h b/samples/cli_client/client.h index e82e8213f..3aacafe1e 100644 --- a/samples/cli_client/client.h +++ b/samples/cli_client/client.h @@ -43,6 +43,7 @@ private: //commands void sendServerQueryCmd(QTextStream &args); void sendAtcQueryCmd(QTextStream &args); void sendAtisQueryCmd(QTextStream &args); + void sendFlightPlanCmd(QTextStream &args); void sendRealNameQueryCmd(QTextStream &args); void sendCapabilitiesQueryCmd(QTextStream &args); void sendIcaoCodesQueryCmd(QTextStream &args); @@ -69,6 +70,7 @@ signals: //to send to INetwork void sendServerQuery(const BlackMisc::Aviation::CCallsign &callsign); void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign); void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign); + void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &fp); void sendRealNameQuery(const BlackMisc::Aviation::CCallsign &callsign); void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign); void sendIcaoCodesQuery(const BlackMisc::Aviation::CCallsign &callsign); diff --git a/src/blackcore/network.h b/src/blackcore/network.h index 2f827db71..016e6efdd 100644 --- a/src/blackcore/network.h +++ b/src/blackcore/network.h @@ -19,6 +19,7 @@ #include "blackmisc/nwtextmessagelist.h" #include "blackmisc/statusmessagelist.h" #include "blackmisc/avinformationmessage.h" +#include "blackmisc/avflightplan.h" #include #include #include @@ -217,7 +218,11 @@ namespace BlackCore */ virtual void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0; - // TODO virtual void sendFlightPlan(...) = 0; + /*! + * Send a message to file a flight plan. + * \pre Network must be connected when calling this function. + */ + virtual void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &flightPlan) = 0; //! @} //////////////////////////////////////////////////////////////// diff --git a/src/blackcore/network_vatlib.cpp b/src/blackcore/network_vatlib.cpp index 05ff500f7..5d4b46f83 100644 --- a/src/blackcore/network_vatlib.cpp +++ b/src/blackcore/network_vatlib.cpp @@ -459,6 +459,40 @@ namespace BlackCore catch (...) { exceptionDispatcher(Q_FUNC_INFO); } } + void CNetworkVatlib::sendFlightPlan(const CFlightPlan &flightPlan) + { + Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected"); + + try + { + Cvatlib_Network::FlightPlan vatlibFP; + QByteArray acType, altApt, cruiseAlt, depApt, destApt, remarks, route; + vatlibFP.acType = acType = toFSD(flightPlan.getEquipmentIcao()); + vatlibFP.altApt = altApt = toFSD(flightPlan.getAlternateAirportIcao()); + vatlibFP.cruiseAlt = cruiseAlt = toFSD(QByteArray::number(flightPlan.getCruiseAltitude().value(CLengthUnit::ft()), 'f', 0)); + vatlibFP.depApt = depApt = toFSD(flightPlan.getOriginAirportIcao()); + vatlibFP.depTimeActual = flightPlan.getTakeoffTimeActual().toUTC().toString("hhmm").toInt(); + vatlibFP.depTimePlanned = flightPlan.getTakeoffTimePlanned().toUTC().toString("hhmm").toInt(); + vatlibFP.destApt = destApt = toFSD(flightPlan.getDestinationAirportIcao()); + vatlibFP.enrouteHrs = flightPlan.getEnrouteTime().valueRounded(CTimeUnit::h(), 0); + vatlibFP.enrouteMins = int(flightPlan.getEnrouteTime().valueRounded(CTimeUnit::hrmin(), 0)) % 60; + vatlibFP.fuelHrs = flightPlan.getFuelTime().valueRounded(CTimeUnit::h(), 0); + vatlibFP.fuelMins = int(flightPlan.getFuelTime().valueRounded(CTimeUnit::hrmin(), 0)) % 60; + vatlibFP.remarks = remarks = toFSD(QString(flightPlan.getRemarks()).replace(":", ";")); + vatlibFP.route = route = toFSD(QString(flightPlan.getRoute()).replace(" ", ".")); + vatlibFP.trueCruiseSpeed = flightPlan.getCruiseTrueAirspeed().valueRounded(CSpeedUnit::kts()); + switch (flightPlan.getFlightRules()) + { + default: + case CFlightPlan::IFR: vatlibFP.fpRules = Cvatlib_Network::fpRuleType_IFR; break; + case CFlightPlan::VFR: vatlibFP.fpRules = Cvatlib_Network::fpRuleType_VFR; break; + case CFlightPlan::SVFR: vatlibFP.fpRules = Cvatlib_Network::fpRuleType_SVFR; break; + } + m_net->SendFlightPlan(vatlibFP); + } + catch (...) { exceptionDispatcher(Q_FUNC_INFO); } + } + void CNetworkVatlib::sendRealNameQuery(const BlackMisc::Aviation::CCallsign &callsign) { Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected"); diff --git a/src/blackcore/network_vatlib.h b/src/blackcore/network_vatlib.h index e5c20d68c..6a35c5b00 100644 --- a/src/blackcore/network_vatlib.h +++ b/src/blackcore/network_vatlib.h @@ -56,6 +56,7 @@ namespace BlackCore // ATC slots virtual void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign) override; virtual void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign) override; + virtual void sendFlightPlan(const BlackMisc::Aviation::CFlightPlan &flightPlan) override; // Aircraft slots virtual void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign) override;