refs #100 Rationalization of INetwork signals and slots

* Naming convention: "preset" only when disconnected, "send" only when connected, "set" both
* Every asynchronous pair is named as in "sendFooQuery" and "fooReplyReceived"
* Moved LoginMode from CNetworkVatlib constructor to INetwork::presetLoginMode
* Callsign and ICAO codes can only be changed when disconnected, so have their own "preset" methods
** Callsign and ICAO parts of setOwnAircraft are therefore ignored
** CUser part of setOwnAircraft is ignored, in favour of the CUser part of presetServer
* CNetworkVatlib takes care of reconstructing m_net if the LoginMode is changed
This commit is contained in:
Mathew Sutcliffe
2014-01-19 02:56:08 +00:00
parent 60422376bb
commit 0af8c9eb3e
9 changed files with 299 additions and 210 deletions

View File

@@ -31,6 +31,16 @@ namespace BlackCore
/*!
* Interface for a connection to a multi-user flight simulation and ATC network.
*
* The connection can be in one of three essential states: disconnected, connecting, and
* connected. (There is a fourth state, disconnected due to error, which is a substate of
* disconnected.) Some slots may only be called when connected, and some may only be called
* when disconnected; there is a naming convention to highlight this fact using prefixes:
* "preset" slots are only callable when disconnected, "send" slots are only callable when
* connected, and "set" slots are callable in any state.
*
* Slots with the word "query" in their names are handled asynchronously, with one or more
* "reply" signals being sent in response to each invokation of a query slot.
*
* \warning If an INetwork signal is connected to a slot, and that slot emits a signal
* which is connected to an INetwork slot, then at least one of those connections
* must be a Qt::QueuedConnection.
@@ -57,6 +67,13 @@ namespace BlackCore
SupportsModelDescriptions = 1 << 2
};
enum LoginMode
{
LoginNormal = 0,
LoginAsObserver,
LoginStealth
};
enum ConnectionStatus
{
Disconnected = 0,
@@ -76,19 +93,20 @@ namespace BlackCore
public slots:
// Network
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 presetServer(const BlackMisc::Network::CServer &server) = 0;
virtual void presetCallsign(const BlackMisc::Aviation::CCallsign &callsign) = 0;
virtual void presetIcaoCodes(const BlackMisc::Aviation::CAircraftIcao &icao) = 0;
virtual void presetLoginMode(LoginMode mode) = 0;
virtual void initiateConnection() = 0;
virtual void terminateConnection() = 0;
virtual void ping(const BlackMisc::Aviation::CCallsign &callsign) = 0;
virtual void sendPing(const BlackMisc::Aviation::CCallsign &callsign) = 0;
virtual void sendNameQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
virtual void sendIpQuery() = 0;
virtual void sendServerQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
// Text messages
virtual void sendTextMessages(const BlackMisc::Network::CTextMessageList &textMessages) = 0;
virtual void sendTextMessages(const BlackMisc::Network::CTextMessageList &messages) = 0;
// ATC
virtual void sendAtcQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
@@ -96,7 +114,7 @@ namespace BlackCore
// Aircraft
virtual void sendCapabilitiesQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
virtual void requestAircraftInfo(const BlackMisc::Aviation::CCallsign &callsign) = 0;
virtual void sendAircraftInfoQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
virtual void sendFrequencyQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
virtual void setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft) = 0;
virtual void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) = 0;
@@ -105,8 +123,8 @@ namespace BlackCore
const BlackMisc::Aviation::CTransponder &transponder) = 0;
// Weather / flight plan
virtual void requestMetar(const QString &airportICAO) = 0;
virtual void requestWeatherData(const QString &airportICAO) = 0;
virtual void sendMetarQuery(const QString &airportICAO) = 0;
virtual void sendWeatherDataQuery(const QString &airportICAO) = 0;
// TODO virtual void sendFlightPlan(...) = 0;
signals:
@@ -114,37 +132,37 @@ namespace BlackCore
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 BlackMisc::Aviation::CInformationMessage &atis);
void atisQueryVoiceRoomReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &url);
void atisQueryLogoffTimeReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &zuluTime);
void metarReceived(const QString &data);
void atcReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, bool isATC);
void atisReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CInformationMessage &atis);
void atisVoiceRoomReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &url);
void atisLogoffTimeReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &zuluTime);
void metarReplyReceived(const QString &data);
// Aircraft
void pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign);
void aircraftInfoReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icao);
void aircraftInfoReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icao);
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 frequencyReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &freq);
// Connection / Network in general
void statusMessage(const BlackMisc::CStatusMessage &message);
void kicked(const QString &msg);
void connectionStatusChanged(ConnectionStatus oldStatus, ConnectionStatus newStatus);
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);
void serverQueryReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &hostname);
void nameQueryReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &realname);
void pongReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CTime &elapsedTime);
void capabilitiesReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, quint32 flags);
void ipReplyReceived(const QString &ip);
void serverReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &hostname);
void nameReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &realname);
// Text messages
void textMessagesReceived(const BlackMisc::Network::CTextMessageList &messages);
// Weather
// TODO void temperatureDataReceived(...);
// TODO void windDataReceived(...);
// TODO void cloudDataReceived(...);
// TODO void temperatureDataReplyReceived(...);
// TODO void windDataReplyReceived(...);
// TODO void cloudDataReplyReceived(...);
};
} // namespace