mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 20:15:35 +08:00
start using our value classes as arguments in INetwork signals and slots
refs #81
This commit is contained in:
committed by
Mathew Sutcliffe
parent
4747b3b484
commit
535ea65a9a
@@ -10,10 +10,13 @@
|
||||
#ifndef BLACKCORE_NETWORK_H
|
||||
#define BLACKCORE_NETWORK_H
|
||||
|
||||
#include "../blackmisc/pqfrequency.h"
|
||||
#include "../blackmisc/coordinategeodetic.h"
|
||||
#include "../blackmisc/pqlength.h"
|
||||
#include "../blackmisc/pqtime.h"
|
||||
#include "blackmisc/avaircraft.h"
|
||||
#include "blackmisc/pqfrequency.h"
|
||||
#include "blackmisc/coordinategeodetic.h"
|
||||
#include "blackmisc/pqlength.h"
|
||||
#include "blackmisc/pqtime.h"
|
||||
#include "blackmisc/nwtextmessagelist.h"
|
||||
#include "blackmisc/nwserver.h"
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QMap>
|
||||
@@ -44,43 +47,58 @@ namespace BlackCore
|
||||
};
|
||||
|
||||
public slots:
|
||||
virtual void setCallsign(const QString& callsign) = 0;
|
||||
|
||||
// Network
|
||||
virtual void setServerDetails(const QString &hostname, quint16 port) = 0;
|
||||
virtual void setUserCredentials(const QString &username, const QString &password) = 0;
|
||||
virtual void setServer(const BlackMisc::Network::CServer &server) = 0;
|
||||
virtual void setCallsign(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
virtual void setRealName(const QString &name) = 0;
|
||||
virtual void initiateConnection() = 0;
|
||||
virtual void terminateConnection() = 0;
|
||||
virtual void sendPrivateTextMessage(const QString& callsign, const QString& msg) = 0;
|
||||
virtual void sendRadioTextMessage(const QVector<BlackMisc::PhysicalQuantities::CFrequency>& freqs, const QString& msg) = 0;
|
||||
virtual void ping(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
|
||||
virtual void sendNameQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
virtual void replyToNameQuery(const BlackMisc::Aviation::CCallsign &callsign, const QString &realname) = 0;
|
||||
virtual void sendIpQuery() = 0;
|
||||
virtual void sendFreqQuery(const QString& callsign) = 0;
|
||||
virtual void sendServerQuery(const QString& callsign) = 0;
|
||||
virtual void sendAtcQuery(const QString& callsign) = 0;
|
||||
virtual void sendAtisQuery(const QString& callsign) = 0;
|
||||
virtual void sendNameQuery(const QString& callsign) = 0;
|
||||
virtual void sendCapabilitiesQuery(const QString& callsign) = 0;
|
||||
virtual void replyToFreqQuery(const QString& callsign, const BlackMisc::PhysicalQuantities::CFrequency& freq) = 0;
|
||||
virtual void replyToNameQuery(const QString& callsign, const QString& realname) = 0;
|
||||
virtual void requestPlaneInfo(const QString& callsign) = 0;
|
||||
//TODO virtual void setPlanePosition(...) = 0;
|
||||
//TODO virtual void sendFlightPlan(...) = 0;
|
||||
virtual void sendPlaneInfo(const QString& callsign, const QString& acTypeICAO, const QString& airlineICAO, const QString& livery) = 0;
|
||||
virtual void ping(const QString& callsign) = 0;
|
||||
virtual void sendServerQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
|
||||
// Text messages
|
||||
virtual void sendTextMessages(const BlackMisc::Network::CTextMessageList &textMessages) = 0;
|
||||
|
||||
// ATC
|
||||
virtual void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
virtual void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
|
||||
// Aircraft
|
||||
virtual void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
virtual void requestAircraftInfo(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
virtual void sendAircraftInfo(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icao) = 0;
|
||||
virtual void sendFrequencyQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
virtual void replyToFrequencyQuery(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &freq) = 0;
|
||||
// TODO virtual void setOwnAircraftPosition(...) = 0;
|
||||
|
||||
// Weather / flight plan
|
||||
virtual void requestMetar(const QString &airportICAO) = 0;
|
||||
virtual void requestWeatherData(const QString &airportICAO) = 0;
|
||||
// TODO virtual void sendFlightPlan(...) = 0;
|
||||
|
||||
signals:
|
||||
void atcPositionUpdate(const QString& callsign, const BlackMisc::PhysicalQuantities::CFrequency& freq,
|
||||
const BlackMisc::Geo::CCoordinateGeodetic& pos, const BlackMisc::PhysicalQuantities::CLength& range);
|
||||
void atcDisconnected(const QString& callsign);
|
||||
//TODO void cloudDataReceived(...);
|
||||
// ATC
|
||||
void atcPositionUpdate(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &freq,
|
||||
const BlackMisc::Geo::CCoordinateGeodetic &pos, const BlackMisc::PhysicalQuantities::CLength &range);
|
||||
void atcDisconnected(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
void atcQueryReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, bool isATC);
|
||||
void atisQueryReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &data);
|
||||
void metarReceived(const QString &data);
|
||||
|
||||
// Aircraft
|
||||
void pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
void aircraftInfoReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icao);
|
||||
void aircraftInfoRequestReceived(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
void aircraftPositionUpdate(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation,
|
||||
const BlackMisc::Aviation::CTransponder &transponder);
|
||||
// TODO void aircraftInterimPositionUpdate(...);
|
||||
void frequencyQueryReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &freq);
|
||||
void frequencyQueryRequestReceived(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
|
||||
// Connection / Network in general
|
||||
void kicked(const QString &msg);
|
||||
void connectionStatusIdle();
|
||||
@@ -88,25 +106,21 @@ namespace BlackCore
|
||||
void connectionStatusConnected();
|
||||
void connectionStatusDisconnected();
|
||||
void connectionStatusError();
|
||||
void freqQueryReplyReceived(const QString& callsign, const BlackMisc::PhysicalQuantities::CFrequency& freq);
|
||||
void serverQueryReplyReceived(const QString& callsign, const QString& hostname);
|
||||
void atcQueryReplyReceived(const QString& callsign, bool isATC);
|
||||
void atisQueryReplyReceived(const QString& callsign, const QString& data);
|
||||
void nameQueryReplyReceived(const QString& callsign, const QString& realname);
|
||||
void capabilitiesQueryReplyReceived(const QString& callsign, quint32 flags);
|
||||
void freqQueryRequestReceived(const QString& callsign);
|
||||
void nameQueryRequestReceived(const QString& callsign);
|
||||
//TODO void interimPilotPositionUpdate(...);
|
||||
void pilotDisconnected(const QString& callsign);
|
||||
void planeInfoReceived(const QString& callsign, const QString& acTypeICAO, const QString& airlineICAO, const QString& livery);
|
||||
void planeInfoRequestReceived(const QString& callsign);
|
||||
//TODO void pilotPositionUpdate(...);
|
||||
void pong(const QString& callsign, const BlackMisc::PhysicalQuantities::CTime& elapsedTime);
|
||||
void radioTextMessageReceived(const QString& callsign, const QString& msg, const QVector<BlackMisc::PhysicalQuantities::CFrequency>& freqs);
|
||||
void privateTextMessageReceived(const QString& fromCallsign, const QString& toCallsign, const QString& msg);
|
||||
void pong(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CTime &elapsedTime);
|
||||
void capabilitiesQueryReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, quint32 flags);
|
||||
void ipQueryReplyReceived(const QString &ip);
|
||||
//TODO void temperatureDataReceived(...);
|
||||
//TODO void windDataReceived(...);
|
||||
void serverQueryReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &hostname);
|
||||
|
||||
void nameQueryReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &realname);
|
||||
void nameQueryRequestReceived(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
|
||||
// Text messages
|
||||
void textMessagesReceived(const BlackMisc::Network::CTextMessageList &messages);
|
||||
|
||||
// Weather
|
||||
// TODO void temperatureDataReceived(...);
|
||||
// TODO void windDataReceived(...);
|
||||
// TODO void cloudDataReceived(...);
|
||||
};
|
||||
|
||||
/*!
|
||||
@@ -115,28 +129,26 @@ namespace BlackCore
|
||||
class NetworkDummy : public INetwork
|
||||
{
|
||||
public: //INetwork slots overrides
|
||||
virtual void setServerDetails(const QString&, quint16) {}
|
||||
virtual void setUserCredentials(const QString&, const QString&) {}
|
||||
virtual void setCallsign(const QString&) {}
|
||||
virtual void setRealName(const QString&) {}
|
||||
virtual void setServer(const BlackMisc::Network::CServer &) {}
|
||||
virtual void setCallsign(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void setRealName(const QString &) {}
|
||||
virtual void initiateConnection() {}
|
||||
virtual void terminateConnection() {}
|
||||
virtual void sendPrivateTextMessage(const QString&, const QString&) {}
|
||||
virtual void sendRadioTextMessage(const QVector<BlackMisc::PhysicalQuantities::CFrequency>&, const QString&) {}
|
||||
virtual void ping(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void sendNameQuery(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void replyToNameQuery(const BlackMisc::Aviation::CCallsign &, const QString &) {}
|
||||
virtual void sendIpQuery() {}
|
||||
virtual void sendFreqQuery(const QString&) {}
|
||||
virtual void sendServerQuery(const QString&) {}
|
||||
virtual void sendAtcQuery(const QString&) {}
|
||||
virtual void sendAtisQuery(const QString&) {}
|
||||
virtual void sendNameQuery(const QString&) {}
|
||||
virtual void sendCapabilitiesQuery(const QString&) {}
|
||||
virtual void replyToFreqQuery(const QString&, const BlackMisc::PhysicalQuantities::CFrequency&) {}
|
||||
virtual void replyToNameQuery(const QString&, const QString&) {}
|
||||
virtual void requestPlaneInfo(const QString&) {}
|
||||
virtual void sendPlaneInfo(const QString&, const QString&, const QString&, const QString&) {}
|
||||
virtual void ping(const QString&) {}
|
||||
virtual void requestMetar(const QString&) {}
|
||||
virtual void requestWeatherData(const QString&) {}
|
||||
virtual void sendServerQuery(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void sendTextMessages(const BlackMisc::Network::CTextMessageList &) {}
|
||||
virtual void sendAtcQuery(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void sendAtisQuery(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void requestAircraftInfo(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void sendAircraftInfo(const BlackMisc::Aviation::CCallsign &, const BlackMisc::Aviation::CAircraftIcao &) {}
|
||||
virtual void sendFrequencyQuery(const BlackMisc::Aviation::CCallsign &) {}
|
||||
virtual void replyToFrequencyQuery(const BlackMisc::Aviation::CCallsign &, const BlackMisc::PhysicalQuantities::CFrequency &) {}
|
||||
virtual void requestMetar(const QString &) {}
|
||||
virtual void requestWeatherData(const QString &) {}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <type_traits>
|
||||
|
||||
static_assert(! std::is_abstract<BlackCore::NetworkVatlib>::value, "Must implement all pure virtuals");
|
||||
static_assert(! std::is_abstract<BlackCore::NetworkDummy>::value, "Must implement all pure virtuals");
|
||||
|
||||
//TODO just placeholders to allow this to compile
|
||||
#define CLIENT_NAME_VERSION "BlackBox 0.1"
|
||||
@@ -23,6 +24,8 @@ namespace BlackCore
|
||||
|
||||
using namespace BlackMisc::PhysicalQuantities;
|
||||
using namespace BlackMisc::Geo;
|
||||
using namespace BlackMisc::Aviation;
|
||||
using namespace BlackMisc::Network;
|
||||
|
||||
void exceptionDispatcher(const char* caller);
|
||||
|
||||
@@ -112,6 +115,10 @@ namespace BlackCore
|
||||
return m_fsdTextCodec->fromUnicode(qstr);
|
||||
}
|
||||
|
||||
QByteArray NetworkVatlib::toFSD(const BlackMisc::Aviation::CCallsign &callsign) const
|
||||
{
|
||||
return toFSD(callsign.getStringAsSet());
|
||||
}
|
||||
|
||||
QString NetworkVatlib::fromFSD(const char *cstr) const
|
||||
{
|
||||
@@ -147,23 +154,13 @@ namespace BlackCore
|
||||
/********************************** INetwork slots ************************************/
|
||||
/********************************** * * * * * * * * * * * * * * * * * * * ************************************/
|
||||
|
||||
void NetworkVatlib::setServerDetails(const QString &host, quint16 port)
|
||||
void NetworkVatlib::setServer(const CServer &server)
|
||||
{
|
||||
Q_ASSERT_X(isDisconnected(), "NetworkVatlib", "Can't change server details while still connected");
|
||||
|
||||
m_serverHost = host;
|
||||
m_serverPort = port;
|
||||
this->m_server = server;
|
||||
}
|
||||
|
||||
void NetworkVatlib::setUserCredentials(const QString &username, const QString &password)
|
||||
{
|
||||
Q_ASSERT_X(isDisconnected(), "NetworkVatlib", "Can't change login details while still connected");
|
||||
|
||||
m_username = username;
|
||||
m_password = password;
|
||||
}
|
||||
|
||||
void NetworkVatlib::setCallsign(const QString& callsign)
|
||||
void NetworkVatlib::setCallsign(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
Q_ASSERT_X(isDisconnected(), "NetworkVatlib", "Can't change callsign while still connected");
|
||||
|
||||
@@ -189,8 +186,8 @@ namespace BlackCore
|
||||
info.name = m_realname.data();
|
||||
info.rating = Cvatlib_Network::pilotRating_Student; //TODO
|
||||
info.sim = Cvatlib_Network::simType_XPlane; //TODO
|
||||
m_net->SetPilotLoginInfo(toFSD(m_serverHost).data(), m_serverPort,
|
||||
toFSD(m_username).data(), toFSD(m_password).data(), info);
|
||||
m_net->SetPilotLoginInfo(toFSD(m_server.getAddress()).data(), m_server.getPort(),
|
||||
toFSD(m_server.getUser().getId()).data(), toFSD(m_server.getUser().getPassword()).data(), info);
|
||||
m_net->ConnectAndLogon();
|
||||
}
|
||||
catch (...)
|
||||
@@ -209,25 +206,28 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendPrivateTextMessage(const QString& callsign, const QString& msg)
|
||||
void NetworkVatlib::sendTextMessages(const BlackMisc::Network::CTextMessageList &messages)
|
||||
{
|
||||
if (messages.isEmpty()) return;
|
||||
try
|
||||
{
|
||||
m_net->SendPrivateTextMessage(toFSD(callsign), toFSD(msg));
|
||||
}
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendRadioTextMessage(const QVector<CFrequency>& freqs, const QString& msg)
|
||||
{
|
||||
try
|
||||
{
|
||||
std::vector<INT> freqsVec;
|
||||
for (int i = 0; i < freqs.size(); ++i)
|
||||
CTextMessageList privateMessages = messages.getPrivateMessages();
|
||||
foreach(BlackMisc::Network::CTextMessage message, privateMessages)
|
||||
{
|
||||
freqsVec.push_back(freqs[i].value(CFrequencyUnit::kHz()));
|
||||
if (message.getToCallsign().isEmpty()) continue;
|
||||
m_net->SendPrivateTextMessage(toFSD(message.getToCallsign()), toFSD(message.getMessage()));
|
||||
}
|
||||
CTextMessageList radioMessages = messages.getRadioMessages();
|
||||
if (radioMessages.isEmpty()) return;
|
||||
foreach(BlackMisc::Network::CTextMessage message, radioMessages)
|
||||
{
|
||||
// I could send the same message to n frequencies in one step
|
||||
// if this is really required, I need to group by message
|
||||
// currently I send individual messages
|
||||
std::vector<INT> freqsVec;
|
||||
freqsVec.push_back(message.getFrequency().value(CFrequencyUnit::kHz()));
|
||||
m_net->SendRadioTextMessage(freqsVec.size(), freqsVec.data(), toFSD(message.getMessage()));
|
||||
}
|
||||
m_net->SendRadioTextMessage(freqsVec.size(), freqsVec.data(), toFSD(msg));
|
||||
}
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
@@ -241,7 +241,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendFreqQuery(const QString& callsign)
|
||||
void NetworkVatlib::sendFrequencyQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -250,7 +250,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendServerQuery(const QString& callsign)
|
||||
void NetworkVatlib::sendServerQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -259,7 +259,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendAtcQuery(const QString& callsign)
|
||||
void NetworkVatlib::sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -268,7 +268,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendAtisQuery(const QString& callsign)
|
||||
void NetworkVatlib::sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -277,7 +277,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendNameQuery(const QString& callsign)
|
||||
void NetworkVatlib::sendNameQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -286,7 +286,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendCapabilitiesQuery(const QString& callsign)
|
||||
void NetworkVatlib::sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -295,7 +295,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::replyToFreqQuery(const QString& callsign, const BlackMisc::PhysicalQuantities::CFrequency& freq)
|
||||
void NetworkVatlib::replyToFrequencyQuery(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &freq)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -304,7 +304,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::replyToNameQuery(const QString& callsign, const QString& realname)
|
||||
void NetworkVatlib::replyToNameQuery(const BlackMisc::Aviation::CCallsign &callsign, const QString &realname)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -313,7 +313,7 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::requestPlaneInfo(const QString& callsign)
|
||||
void NetworkVatlib::requestAircraftInfo(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -322,36 +322,36 @@ namespace BlackCore
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::sendPlaneInfo(const QString& callsign, const QString& acTypeICAO, const QString& airlineICAO, const QString& livery)
|
||||
void NetworkVatlib::sendAircraftInfo(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icao)
|
||||
{
|
||||
try
|
||||
{
|
||||
const QByteArray acTypeICAObytes = toFSD(acTypeICAO);
|
||||
const QByteArray airlineICAObytes = toFSD(airlineICAO);
|
||||
const QByteArray liverybytes = toFSD(livery);
|
||||
std::vector<const char*> keysValues;
|
||||
if (! acTypeICAO.isEmpty())
|
||||
const QByteArray acTypeICAObytes = toFSD(icao.getDesignator());
|
||||
const QByteArray airlineICAObytes = toFSD(icao.getAirline());
|
||||
const QByteArray liverybytes = toFSD(icao.getLivery());
|
||||
std::vector<const char *> keysValues;
|
||||
if (!icao.getDesignator().isEmpty())
|
||||
{
|
||||
keysValues.push_back(m_net->acinfo_Equipment);
|
||||
keysValues.push_back(acTypeICAObytes);
|
||||
}
|
||||
if (! airlineICAO.isEmpty())
|
||||
if (icao.hasAirline())
|
||||
{
|
||||
keysValues.push_back(m_net->acinfo_Airline);
|
||||
keysValues.push_back(airlineICAObytes);
|
||||
}
|
||||
if (! livery.isEmpty())
|
||||
if (icao.hasLivery())
|
||||
{
|
||||
keysValues.push_back(m_net->acinfo_Livery);
|
||||
keysValues.push_back(liverybytes);
|
||||
}
|
||||
keysValues.push_back(0);
|
||||
keysValues.push_back(nullptr);
|
||||
m_net->SendPlaneInfo(toFSD(callsign), keysValues.data());
|
||||
}
|
||||
catch (...) { exceptionDispatcher(Q_FUNC_INFO); }
|
||||
}
|
||||
|
||||
void NetworkVatlib::ping(const QString& callsign)
|
||||
void NetworkVatlib::ping(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -387,7 +387,7 @@ namespace BlackCore
|
||||
return static_cast<NetworkVatlib *>(cbvar);
|
||||
}
|
||||
|
||||
void NetworkVatlib::onConnectionStatusChanged(Cvatlib_Network *, Cvatlib_Network::connStatus oldStatus, Cvatlib_Network::connStatus newStatus, void *cbvar)
|
||||
void NetworkVatlib::onConnectionStatusChanged(Cvatlib_Network *, Cvatlib_Network::connStatus, Cvatlib_Network::connStatus newStatus, void *cbvar)
|
||||
{
|
||||
cbvar_cast(cbvar)->m_status = newStatus;
|
||||
switch (newStatus)
|
||||
@@ -402,17 +402,19 @@ namespace BlackCore
|
||||
|
||||
void NetworkVatlib::onTextMessageReceived(Cvatlib_Network *, const char *from, const char *to, const char *msg, void *cbvar)
|
||||
{
|
||||
emit cbvar_cast(cbvar)->privateTextMessageReceived(cbvar_cast(cbvar)->fromFSD(from), cbvar_cast(cbvar)->fromFSD(to), cbvar_cast(cbvar)->fromFSD(msg));
|
||||
BlackMisc::Network::CTextMessageList messages(cbvar_cast(cbvar)->fromFSD(msg), CCallsign(cbvar_cast(cbvar)->fromFSD(from)), CCallsign(cbvar_cast(cbvar)->fromFSD(to)));
|
||||
emit cbvar_cast(cbvar)->textMessagesReceived(messages);
|
||||
}
|
||||
|
||||
void NetworkVatlib::onRadioMessageReceived(Cvatlib_Network *, const char *from, INT numFreq, INT *freqList, const char *msg, void *cbvar)
|
||||
{
|
||||
QVector<CFrequency> freqs;
|
||||
QList<CFrequency> frequencies;
|
||||
for (int i = 0; i < numFreq; ++i)
|
||||
{
|
||||
freqs.push_back(CFrequency(freqList[i], CFrequencyUnit::kHz()));
|
||||
frequencies.push_back(CFrequency(freqList[i], CFrequencyUnit::kHz()));
|
||||
}
|
||||
emit cbvar_cast(cbvar)->radioTextMessageReceived(cbvar_cast(cbvar)->fromFSD(from), cbvar_cast(cbvar)->fromFSD(msg), freqs);
|
||||
BlackMisc::Network::CTextMessageList messages(cbvar_cast(cbvar)->fromFSD(msg), frequencies, CCallsign(cbvar_cast(cbvar)->fromFSD(from)));
|
||||
emit cbvar_cast(cbvar)->textMessagesReceived(messages);
|
||||
}
|
||||
|
||||
void NetworkVatlib::onPilotDisconnected(Cvatlib_Network *, const char *callsign, void *cbvar)
|
||||
@@ -420,25 +422,56 @@ namespace BlackCore
|
||||
emit cbvar_cast(cbvar)->pilotDisconnected(cbvar_cast(cbvar)->fromFSD(callsign));
|
||||
}
|
||||
|
||||
void NetworkVatlib::onControllerDisconnected(Cvatlib_Network*, const char* callsign, void* cbvar)
|
||||
void NetworkVatlib::onControllerDisconnected(Cvatlib_Network *, const char *callsign, void *cbvar)
|
||||
{
|
||||
emit cbvar_cast(cbvar)->atcDisconnected(cbvar_cast(cbvar)->fromFSD(callsign));
|
||||
}
|
||||
|
||||
void NetworkVatlib::onPilotPositionUpdate(Cvatlib_Network*, const char* /*callsign*/, Cvatlib_Network::PilotPosUpdate /*pos*/, void* /*cbvar*/)
|
||||
void NetworkVatlib::onPilotPositionUpdate(Cvatlib_Network *, const char *callsignChar , Cvatlib_Network::PilotPosUpdate pos, void *cbvar)
|
||||
{
|
||||
const CCallsign callsign(callsignChar);
|
||||
const CAircraftSituation situation(
|
||||
CCoordinateGeodetic(pos.lat, pos.lon, 0.0),
|
||||
CAltitude(pos.altTrue, CAltitude::AboveGround, CLengthUnit::ft()),
|
||||
CHeading(pos.heading, CHeading::True, CAngleUnit::deg()),
|
||||
CAngle(pos.pitch, CAngleUnit::deg()),
|
||||
CAngle(pos.bank, CAngleUnit::deg()),
|
||||
CSpeed(pos.groundSpeed, CSpeedUnit::kts())
|
||||
);
|
||||
|
||||
QString tn("transponder ");
|
||||
tn.append(callsign.asString());
|
||||
CTransponder::TransponderMode mode = CTransponder::ModeS;
|
||||
switch (pos.xpdrMode)
|
||||
{
|
||||
case Cvatlib_Network::xpndrMode_Normal:
|
||||
mode = CTransponder::ModeC;
|
||||
break;
|
||||
case Cvatlib_Network::xpndrMode_Standby:
|
||||
mode = CTransponder::ModeS;
|
||||
break;
|
||||
case Cvatlib_Network::xpndrMode_Ident:
|
||||
mode = CTransponder::StateIdent;
|
||||
break;
|
||||
default:
|
||||
mode = CTransponder::ModeC;
|
||||
break;
|
||||
}
|
||||
CTransponder transponder(tn, pos.xpdrCode, mode);
|
||||
emit cbvar_cast(cbvar)->aircraftPositionUpdate(callsign, situation, transponder);
|
||||
}
|
||||
|
||||
void NetworkVatlib::onInterimPilotPositionUpdate(Cvatlib_Network *, const char * /** callsign **/, Cvatlib_Network::PilotPosUpdate /** pos **/, void * /** cbvar **/)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
void NetworkVatlib::onInterimPilotPositionUpdate(Cvatlib_Network*, const char* /*callsign*/, Cvatlib_Network::PilotPosUpdate /*pos*/, void* /*cbvar*/)
|
||||
void NetworkVatlib::onAtcPositionUpdate(Cvatlib_Network *, const char *callsign, Cvatlib_Network::ATCPosUpdate pos, void *cbvar)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
void NetworkVatlib::onAtcPositionUpdate(Cvatlib_Network*, const char* callsign, Cvatlib_Network::ATCPosUpdate pos, void* cbvar)
|
||||
{
|
||||
emit cbvar_cast(cbvar)->atcPositionUpdate(cbvar_cast(cbvar)->fromFSD(callsign), CFrequency(pos.frequency, CFrequencyUnit::kHz()),
|
||||
CCoordinateGeodetic(pos.lat, pos.lon, 0), CLength(pos.visibleRange, CLengthUnit::NM()));
|
||||
CFrequency freq(pos.frequency, CFrequencyUnit::kHz());
|
||||
freq.switchUnit(CFrequencyUnit::MHz()); // we would not need to bother, but this makes it easier to identify
|
||||
emit cbvar_cast(cbvar)->atcPositionUpdate(cbvar_cast(cbvar)->fromFSD(callsign), freq,
|
||||
CCoordinateGeodetic(pos.lat, pos.lon, 0), CLength(pos.visibleRange, CLengthUnit::NM()));
|
||||
}
|
||||
|
||||
void NetworkVatlib::onKicked(Cvatlib_Network *, const char *reason, void *cbvar)
|
||||
@@ -460,7 +493,7 @@ namespace BlackCore
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case Cvatlib_Network::infoQuery_Freq: emit cbvar_cast(cbvar)->freqQueryRequestReceived(cbvar_cast(cbvar)->fromFSD(callsign)); break;
|
||||
case Cvatlib_Network::infoQuery_Freq: emit cbvar_cast(cbvar)->frequencyQueryRequestReceived(cbvar_cast(cbvar)->fromFSD(callsign)); break;
|
||||
case Cvatlib_Network::infoQuery_Name: emit cbvar_cast(cbvar)->nameQueryRequestReceived(cbvar_cast(cbvar)->fromFSD(callsign)); break;
|
||||
}
|
||||
}
|
||||
@@ -469,7 +502,7 @@ namespace BlackCore
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case Cvatlib_Network::infoQuery_Freq: emit cbvar_cast(cbvar)->freqQueryReplyReceived(cbvar_cast(cbvar)->fromFSD(callsign), CFrequency(cbvar_cast(cbvar)->fromFSD(data).toFloat(), CFrequencyUnit::MHz())); break;
|
||||
case Cvatlib_Network::infoQuery_Freq: emit cbvar_cast(cbvar)->frequencyQueryReplyReceived(cbvar_cast(cbvar)->fromFSD(callsign), CFrequency(cbvar_cast(cbvar)->fromFSD(data).toFloat(), CFrequencyUnit::MHz())); break;
|
||||
case Cvatlib_Network::infoQuery_Server: emit cbvar_cast(cbvar)->serverQueryReplyReceived(cbvar_cast(cbvar)->fromFSD(callsign), cbvar_cast(cbvar)->fromFSD(data)); break;
|
||||
case Cvatlib_Network::infoQuery_ATC: emit cbvar_cast(cbvar)->atcQueryReplyReceived(cbvar_cast(cbvar)->fromFSD(data2), *data == 'Y'); break;
|
||||
case Cvatlib_Network::infoQuery_Name: emit cbvar_cast(cbvar)->nameQueryReplyReceived(cbvar_cast(cbvar)->fromFSD(callsign), cbvar_cast(cbvar)->fromFSD(data)); break;
|
||||
@@ -500,7 +533,7 @@ namespace BlackCore
|
||||
emit cbvar_cast(cbvar)->atisQueryReplyReceived(cbvar_cast(cbvar)->fromFSD(callsign), cbvar_cast(cbvar)->fromFSD(data));
|
||||
}
|
||||
|
||||
void NetworkVatlib::onTemperatureDataReceived(Cvatlib_Network*, Cvatlib_Network::TempLayer /*layers*/[4], INT /*pressure*/, void* /*cbvar*/)
|
||||
void NetworkVatlib::onTemperatureDataReceived(Cvatlib_Network *, Cvatlib_Network::TempLayer /** layers **/ [4], INT /** pressure **/, void * /** cbvar **/)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
@@ -538,37 +571,34 @@ namespace BlackCore
|
||||
emit cbvar_cast(cbvar)->terminate();
|
||||
}
|
||||
|
||||
void NetworkVatlib::onWindDataReceived(Cvatlib_Network*, Cvatlib_Network::WindLayer /*layers*/[4], void* /*cbvar*/)
|
||||
void NetworkVatlib::onWindDataReceived(Cvatlib_Network *, Cvatlib_Network::WindLayer /** layers **/[4], void * /** cbvar **/)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
void NetworkVatlib::onCloudDataReceived(Cvatlib_Network*, Cvatlib_Network::CloudLayer /*layers*/[2], Cvatlib_Network::StormLayer /*storm*/, float /*vis*/, void* /*cbvar*/)
|
||||
void NetworkVatlib::onCloudDataReceived(Cvatlib_Network *, Cvatlib_Network::CloudLayer /** layers **/ [2], Cvatlib_Network::StormLayer /** storm **/, float /** vis **/, void * /** cbvar **/)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
void NetworkVatlib::onPilotInfoRequestReceived(Cvatlib_Network *, const char *callsign, void *cbvar)
|
||||
{
|
||||
emit cbvar_cast(cbvar)->planeInfoRequestReceived(cbvar_cast(cbvar)->fromFSD(callsign));
|
||||
emit cbvar_cast(cbvar)->aircraftInfoRequestReceived(cbvar_cast(cbvar)->fromFSD(callsign));
|
||||
}
|
||||
|
||||
void NetworkVatlib::onPilotInfoReceived(Cvatlib_Network *net, const char *callsign, const char **keysValues, void *cbvar)
|
||||
{
|
||||
const char* acTypeICAO = nullptr;
|
||||
const char* airlineICAO = nullptr;
|
||||
const char* livery = nullptr;
|
||||
BlackMisc::Aviation::CAircraftIcao icao;
|
||||
while (*keysValues)
|
||||
{
|
||||
QString key (*keysValues);
|
||||
QString key(*keysValues);
|
||||
keysValues++;
|
||||
if (key == net->acinfo_Equipment) { acTypeICAO = *keysValues; }
|
||||
else if (key == net->acinfo_Airline) { airlineICAO = *keysValues; }
|
||||
else if (key == net->acinfo_Livery) { livery = *keysValues; }
|
||||
if (key == net->acinfo_Equipment) { icao.setDesignator(*keysValues); }
|
||||
else if (key == net->acinfo_Airline) { icao.setAirline(*keysValues); }
|
||||
else if (key == net->acinfo_Livery) { icao.setLivery(*keysValues); }
|
||||
keysValues++;
|
||||
}
|
||||
emit cbvar_cast(cbvar)->planeInfoReceived(cbvar_cast(cbvar)->fromFSD(callsign), cbvar_cast(cbvar)->fromFSD(acTypeICAO),
|
||||
cbvar_cast(cbvar)->fromFSD(airlineICAO), cbvar_cast(cbvar)->fromFSD(livery));
|
||||
emit cbvar_cast(cbvar)->aircraftInfoReceived(cbvar_cast(cbvar)->fromFSD(callsign), icao);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#define BLACKCORE_NETWORK_VATLIB_H
|
||||
|
||||
#include "network.h"
|
||||
#include "blackmisc/avallclasses.h"
|
||||
#include <vatlib/vatlib.h>
|
||||
#include <QScopedPointer>
|
||||
#include <QBasicTimer>
|
||||
@@ -34,31 +35,33 @@ namespace BlackCore
|
||||
public: // INetwork slots overrides
|
||||
|
||||
// Network
|
||||
virtual void setCallsign(const QString& callsign);
|
||||
virtual void setServerDetails(const QString &hostname, quint16 port);
|
||||
virtual void setUserCredentials(const QString &username, const QString &password);
|
||||
virtual void setServer(const BlackMisc::Network::CServer &server);
|
||||
virtual void setCallsign(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
virtual void setRealName(const QString &name);
|
||||
virtual void initiateConnection();
|
||||
virtual void terminateConnection();
|
||||
virtual void sendPrivateTextMessage(const QString& callsign, const QString& msg);
|
||||
virtual void sendRadioTextMessage(const QVector<BlackMisc::PhysicalQuantities::CFrequency>& freqs, const QString& msg);
|
||||
virtual void sendIpQuery();
|
||||
virtual void sendFreqQuery(const QString& callsign);
|
||||
virtual void sendServerQuery(const QString& callsign);
|
||||
virtual void sendAtcQuery(const QString& callsign);
|
||||
virtual void sendAtisQuery(const QString& callsign);
|
||||
virtual void sendNameQuery(const QString& callsign);
|
||||
virtual void sendCapabilitiesQuery(const QString& callsign);
|
||||
virtual void replyToFreqQuery(const QString& callsign, const BlackMisc::PhysicalQuantities::CFrequency& freq);
|
||||
virtual void replyToNameQuery(const QString& callsign, const QString& realname);
|
||||
virtual void requestPlaneInfo(const QString& callsign);
|
||||
virtual void sendPlaneInfo(const QString& callsign, const QString& acTypeICAO, const QString& airlineICAO, const QString& livery);
|
||||
virtual void ping(const QString& callsign);
|
||||
virtual void sendServerQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
virtual void sendNameQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
virtual void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
virtual void replyToNameQuery(const BlackMisc::Aviation::CCallsign &callsign, const QString &realname);
|
||||
virtual void ping(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
|
||||
// Weather
|
||||
virtual void requestWeatherData(const QString &airportICAO);
|
||||
|
||||
// Text messages
|
||||
virtual void sendTextMessages(const BlackMisc::Network::CTextMessageList &messages);
|
||||
|
||||
// Aircraft
|
||||
virtual void requestAircraftInfo(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
virtual void sendAircraftInfo(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icao);
|
||||
virtual void sendFrequencyQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
virtual void replyToFrequencyQuery(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &freq);
|
||||
|
||||
// ATC
|
||||
virtual void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
virtual void sendAtisQuery(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
virtual void requestMetar(const QString &airportICAO);
|
||||
|
||||
private: //shimlib callbacks
|
||||
@@ -86,7 +89,8 @@ namespace BlackCore
|
||||
|
||||
private:
|
||||
QByteArray toFSD(QString qstr) const;
|
||||
QString fromFSD(const char* cstr) const;
|
||||
QByteArray toFSD(const BlackMisc::Aviation::CCallsign &callsign) const;
|
||||
QString fromFSD(const char *cstr) const;
|
||||
bool isDisconnected() const { return m_status == Cvatlib_Network::connStatus_Idle || m_status == Cvatlib_Network::connStatus_Disconnected; }
|
||||
|
||||
signals:
|
||||
@@ -105,13 +109,10 @@ namespace BlackCore
|
||||
Cvatlib_Network::connStatus m_status;
|
||||
|
||||
QBasicTimer m_timer;
|
||||
BlackMisc::Network::CServer m_server;
|
||||
static int const c_updateIntervalMillisecs = 100;
|
||||
static int const c_logoffTimeoutSeconds = 5;
|
||||
|
||||
QString m_serverHost;
|
||||
quint16 m_serverPort;
|
||||
QString m_username;
|
||||
QString m_password;
|
||||
QByteArray m_callsign;
|
||||
QByteArray m_realname;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user