swift
Loading...
Searching...
No Matches
contextnetworkproxy.cpp
1// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3
5
6#include <QDBusConnection>
7#include <QLatin1String>
8#include <QMetaObject>
9#include <QObject>
10#include <QtGlobal>
11
12#include "misc/dbus.h"
13#include "misc/dbusserver.h"
15
16using namespace swift::misc;
17using namespace swift::misc::network;
18using namespace swift::misc::aviation;
19using namespace swift::misc::physical_quantities;
20using namespace swift::misc::weather;
21using namespace swift::misc::simulation;
22
23namespace swift::core::context
24{
27 : IContextNetwork(mode, runtime), m_dBusInterface(nullptr)
28 {
29 m_dBusInterface = new CGenericDBusInterface(serviceName, IContextNetwork::ObjectPath(),
30 IContextNetwork::InterfaceName(), connection, this);
31 this->relaySignals(serviceName, connection);
32 }
33
34 void CContextNetworkProxy::unitTestRelaySignals()
35 {
36 // connect signals, asserts when failures
39 Q_UNUSED(c);
40 }
41
42 void CContextNetworkProxy::relaySignals(const QString &serviceName, QDBusConnection &connection)
43 {
44 bool s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(),
45 "connectionStatusChanged", this,
48 Q_ASSERT(s);
50 "changedAtcStationsOnline", this, SIGNAL(changedAtcStationsOnline()));
51 Q_ASSERT(s);
53 "changedAtcStationsOnlineDigest", this, SIGNAL(changedAtcStationsOnlineDigest()));
54 Q_ASSERT(s);
56 "changedAircraftInRange", this, SIGNAL(changedAircraftInRange()));
57 Q_ASSERT(s);
59 "atcStationDisconnected", this,
61 Q_ASSERT(s);
63 "changedAircraftInRangeDigest", this, SIGNAL(changedAircraftInRangeDigest()));
64 Q_ASSERT(s);
65 s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), "kicked",
66 this, SIGNAL(kicked(QString)));
67 Q_ASSERT(s);
69 "textMessagesReceived", this,
71 Q_ASSERT(s);
73 "textMessageSent", this, SIGNAL(textMessageSent(swift::misc::network::CTextMessage)));
74 Q_ASSERT(s);
76 "changedRemoteAircraftEnabled", this,
78 Q_ASSERT(s);
80 "changedFastPositionUpdates", this,
82 Q_ASSERT(s);
84 "changedGndFlagCapability", this,
86 Q_ASSERT(s);
88 "addedAircraft", this,
90 Q_ASSERT(s);
92 "removedAircraft", this, SIGNAL(removedAircraft(swift::misc::aviation::CCallsign)));
93 Q_ASSERT(s);
95 "connectedServerChanged", this,
97 Q_ASSERT(s);
98 Q_UNUSED(s);
99 this->relayBaseClassSignals(serviceName, connection, IContextNetwork::ObjectPath(),
101 }
102
104 {
105 return m_dBusInterface->callDBusRet<swift::misc::aviation::CAtcStationList>(
106 QLatin1String("getAtcStationsOnline"), recalculateDistance);
107 }
108
110 {
111 return m_dBusInterface->callDBusRet<swift::misc::aviation::CAtcStationList>(
112 QLatin1String("getClosestAtcStationsOnline"), number);
113 }
114
116 {
117 return m_dBusInterface->callDBusRet<swift::misc::simulation::CSimulatedAircraftList>(
118 QLatin1String("getAircraftInRange"));
119 }
120
122 {
123 return m_dBusInterface->callDBusRet<swift::misc::aviation::CCallsignSet>(
124 QLatin1String("getAircraftInRangeCallsigns"));
125 }
126
128 {
129 return m_dBusInterface->callDBusRet<int>(QLatin1String("getAircraftInRangeCount"));
130 }
131
133 {
134 return m_dBusInterface->callDBusRet<bool>(QLatin1String("isAircraftInRange"), callsign);
135 }
136
138 {
139 return m_dBusInterface->callDBusRet<swift::misc::simulation::CSimulatedAircraft>(
140 QLatin1String("getAircraftInRangeForCallsign"), callsign);
141 }
142
144 {
145 return m_dBusInterface->callDBusRet<swift::misc::aviation::CAtcStationList>(
146 QLatin1String("getOnlineStationsForFrequency"), frequency);
147 }
148
150 {
151 return m_dBusInterface->callDBusRet<swift::misc::aviation::CAtcStation>(
152 QLatin1String("getOnlineStationForCallsign"), callsign);
153 }
154
156 {
157 return m_dBusInterface->callDBusRet<bool>(QLatin1String("isOnlineStation"), callsign);
158 }
159
161 {
162 return m_dBusInterface->callDBusRet<swift::misc::network::CUserList>(QLatin1String("getUsers"));
163 }
164
166 {
167 return m_dBusInterface->callDBusRet<swift::misc::network::CUserList>(QLatin1String("getUsersForCallsigns"),
168 callsigns);
169 }
170
172 {
173 return m_dBusInterface->callDBusRet<swift::misc::network::CUser>(QLatin1String("getUserForCallsign"), callsign);
174 }
175
177 {
178 return m_dBusInterface->callDBusRet<swift::misc::network::CClientList>(QLatin1String("getClients"));
179 }
180
182 {
183 return m_dBusInterface->callDBusRet<swift::misc::network::CServerList>(QLatin1String("getVatsimFsdServers"));
184 }
185
187 {
188 return m_dBusInterface->callDBusRet<swift::misc::network::CClientList>(QLatin1String("getClientsForCallsigns"),
189 callsigns);
190 }
191
193 {
194 return m_dBusInterface->callDBusRet<bool>(QLatin1String("setOtherClient"), client);
195 }
196
198 {
199 m_dBusInterface->callDBus(QLatin1String("requestAircraftDataUpdates"));
200 }
201
202 void CContextNetworkProxy::requestAtisUpdates() { m_dBusInterface->callDBus(QLatin1String("requestAtisUpdates")); }
203
204 bool CContextNetworkProxy::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRendering)
205 {
206 return m_dBusInterface->callDBusRet<bool>(QLatin1String("updateAircraftEnabled"), callsign,
207 enabledForRendering);
208 }
209
210 bool CContextNetworkProxy::setAircraftEnabledFlag(const CCallsign &callsign, bool enabledForRendering)
211 {
212 return m_dBusInterface->callDBusRet<bool>(QLatin1String("setAircraftEnabledFlag"), callsign,
213 enabledForRendering);
214 }
215
217 const CIdentifier &originator)
218 {
219 return m_dBusInterface->callDBusRet<bool>(QLatin1String("updateAircraftModel"), callsign, model, originator);
220 }
221
223 const CIdentifier &originator)
224 {
225 return m_dBusInterface->callDBusRet<bool>(QLatin1String("updateAircraftNetworkModel"), callsign, model,
226 originator);
227 }
228
229 bool CContextNetworkProxy::updateFastPositionEnabled(const CCallsign &callsign, bool enableFastPositionSending)
230 {
231 return m_dBusInterface->callDBusRet<bool>(QLatin1String("updateFastPositionEnabled"), callsign,
232 enableFastPositionSending);
233 }
234
235 bool CContextNetworkProxy::updateAircraftSupportingGndFLag(const CCallsign &callsign, bool supportGndFlag)
236 {
237 return m_dBusInterface->callDBusRet<bool>(QLatin1String("updateAircraftSupportingGndFLag"), callsign,
238 supportGndFlag);
239 }
240
242 {
243 return m_dBusInterface->callDBusRet<int>(QLatin1String("reInitializeAllAircraft"));
244 }
245
247 {
248 m_dBusInterface->callDBus(QLatin1String("setFastPositionEnabledCallsigns"), callsigns);
249 }
250
252 {
253 return m_dBusInterface->callDBusRet<CCallsignSet>(QLatin1String("getFastPositionEnabledCallsigns"));
254 }
255
257 {
258 return m_dBusInterface->callDBusRet<CStatusMessageList>(QLatin1String("getReverseLookupMessages"), callsign);
259 }
260
262 {
263 return m_dBusInterface->callDBusRet<ReverseLookupLogging>(QLatin1String("isReverseLookupMessagesEnabled"));
264 }
265
267 {
268 m_dBusInterface->callDBus(QLatin1String("enableReverseLookupMessages"), enable);
269 }
270
272 {
273 return m_dBusInterface->callDBusRet<CStatusMessageList>(QLatin1String("getAircraftPartsHistory"), callsign);
274 }
275
278 {
279 return m_dBusInterface->callDBusRet<CAircraftPartsList>(QLatin1String("getRemoteAircraftParts"), callsign);
280 }
281
283 {
284 return m_dBusInterface->callDBusRet<bool>(QLatin1String("isAircraftPartsHistoryEnabled"));
285 }
286
288 {
289 return m_dBusInterface->callDBusRet<bool>(QLatin1String("isRemoteAircraftSupportingParts"), callsign);
290 }
291
293 {
294 m_dBusInterface->callDBus(QLatin1String("enableAircraftPartsHistory"), enabled);
295 }
296
298 {
299 return m_dBusInterface->callDBusRet<QString>(QLatin1String("getNetworkStatistics"), reset, separator);
300 }
301
303 {
304 return m_dBusInterface->callDBusRet<bool>(QLatin1String("setNetworkStatisticsEnable"), enabled);
305 }
306
308 {
309 return m_dBusInterface->callDBusRet<QStringList>(QLatin1String("getNetworkPresetValues"));
310 }
311
313 {
314 return m_dBusInterface->callDBusRet<CCallsign>(QLatin1String("getPartnerCallsign"));
315 }
316
318 {
319 m_dBusInterface->callDBus(QLatin1String("testCreateDummyOnlineAtcStations"), number);
320 }
321
323 const CAircraftParts &parts, bool incremental)
324 {
325 m_dBusInterface->callDBus(QLatin1String("testAddAircraftParts"), callsign, parts, incremental);
326 }
327
329 {
330 m_dBusInterface->callDBus(QLatin1String("testReceivedTextMessages"), textMessages);
331 }
332
334 {
335 m_dBusInterface->callDBus(QLatin1String("testReceivedAtisMessage"), callsign, msg);
336 }
337
339 {
340 m_dBusInterface->callDBus(QLatin1String("testRequestAircraftConfig"), callsign);
341 }
342
344 const physical_quantities::CLength &offset)
345 {
346 return m_dBusInterface->callDBusRet<bool>(QLatin1String("testAddAltitudeOffset"), callsign, offset);
347 }
348
350 bool sendLiveryString, const QString &extraModelString,
351 bool sendModelString, const CCallsign &partnerCallsign,
352 CLoginMode loginMode)
353 {
354 return m_dBusInterface->callDBusRet<swift::misc::CStatusMessage>(
355 QLatin1String("connectToNetwork"), server, extraLiveryString, sendLiveryString, extraModelString,
356 sendModelString, partnerCallsign, loginMode);
357 }
358
360 {
361 return m_dBusInterface->callDBusRet<swift::misc::CStatusMessage>(QLatin1String("disconnectFromNetwork"));
362 }
363
365 {
366 return m_dBusInterface->callDBusRet<bool>(QLatin1String("isConnected"));
367 }
368
370 {
371 return m_dBusInterface->callDBusRet<swift::misc::network::CServer>(QLatin1String("getConnectedServer"));
372 }
373
375 {
376 return m_dBusInterface->callDBusRet<CLoginMode>(QLatin1String("getLoginMode"));
377 }
378
379 bool CContextNetworkProxy::parseCommandLine(const QString &commandLine, const CIdentifier &originator)
380 {
381 return m_dBusInterface->callDBusRet<bool>(QLatin1String("parseCommandLine"), commandLine, originator);
382 }
383
385 {
386 m_dBusInterface->callDBus(QLatin1String("sendTextMessages"), textMessages);
387 }
388
390 {
391 m_dBusInterface->callDBus(QLatin1String("sendFlightPlan"), flightPlan);
392 }
393
395 {
396 return m_dBusInterface->callDBusRet<swift::misc::aviation::CFlightPlan>(
397 QLatin1String("loadFlightPlanFromNetwork"), callsign);
398 }
399
401 {
402 return m_dBusInterface->callDBusRet<swift::misc::weather::CMetar>(QLatin1String("getMetarForAirport"),
403 airportIcaoCode);
404 }
405
408 RawFsdMessageReceivedSlot rawFsdMessageReceivedSlot)
409 {
410 Q_UNUSED(receiver);
411 Q_UNUSED(rawFsdMessageReceivedSlot);
412 return {};
413 }
414} // namespace swift::core::context
ContextMode
How to handle a given context.
@ Remote
context runs in a different process.
The class providing facades (the contexts) for all DBus relevant operations.
Definition corefacade.h:57
swift::misc::network::CUserList getUsersForCallsigns(const swift::misc::aviation::CCallsignSet &callsigns) const
Users for given callsigns, e.g. for voice room resolution.
bool setAircraftEnabledFlag(const swift::misc::aviation::CCallsign &callsign, bool enabledForRendering)
Set the enabled flag without any further logic like sending signals.
bool testAddAltitudeOffset(const swift::misc::aviation::CCallsign &callsign, const swift::misc::physical_quantities::CLength &offset=swift::misc::physical_quantities::CLength::null())
Add altitude offset for testing.
bool updateFastPositionEnabled(const swift::misc::aviation::CCallsign &callsign, bool enableFastPositionSending)
Change fast position updates.
swift::misc::CStatusMessageList getAircraftPartsHistory(const swift::misc::aviation::CCallsign &callsign) const
Get aircraft parts history.
bool setNetworkStatisticsEnable(bool enabled)
Statistics enable/disable.
swift::misc::aviation::CAtcStationList getClosestAtcStationsOnline(int number) const
The ATC list with online ATC controllers.
QMetaObject::Connection connectRawFsdMessageSignal(QObject *receiver, RawFsdMessageReceivedSlot rawFsdMessageReceivedSlot)
Connect to receive raw fsd messages.
swift::misc::simulation::ReverseLookupLogging isReverseLookupMessagesEnabled() const
Enabled reverse lookup logging?
bool updateAircraftEnabled(const swift::misc::aviation::CCallsign &callsign, bool enabledForRendering)
Enable/disable rendering.
swift::misc::aviation::CAtcStation getOnlineStationForCallsign(const swift::misc::aviation::CCallsign &callsign) const
Online station for callsign.
swift::misc::simulation::CSimulatedAircraftList getAircraftInRange() const
Aircraft list.
bool isOnlineStation(const swift::misc::aviation::CCallsign &callsign) const
Online station for callsign?
swift::misc::simulation::CSimulatedAircraft getAircraftInRangeForCallsign(const swift::misc::aviation::CCallsign &callsign) const
Aircraft for given callsign.
swift::misc::aviation::CCallsignSet getAircraftInRangeCallsigns() const
Aircraft callsigns.
void testReceivedTextMessages(const swift::misc::network::CTextMessageList &textMessages)
Inject a text message as received.
swift::misc::CStatusMessage connectToNetwork(const swift::misc::network::CServer &server, const QString &extraLiveryString, bool sendLivery, const QString &extraModelString, bool sendModelString, const swift::misc::aviation::CCallsign &partnerCallsign, swift::misc::network::CLoginMode mode)
Connect to Network.
bool isAircraftInRange(const swift::misc::aviation::CCallsign &callsign) const
Aircraft in range.
void testCreateDummyOnlineAtcStations(int number)
Create dummy ATC stations for performance tests etc.
int reInitializeAllAircraft()
Re-initialize all aircraft.
void enableReverseLookupMessages(swift::misc::simulation::ReverseLookupLogging enable)
Enable reverse lookup logging.
swift::misc::network::CLoginMode getLoginMode() const
Login mode.
bool updateAircraftModel(const swift::misc::aviation::CCallsign &callsign, const swift::misc::simulation::CAircraftModel &model, const swift::misc::CIdentifier &originator)
Change model (for remote aircraft).
swift::misc::CStatusMessage disconnectFromNetwork()
Disconnect from network.
swift::misc::network::CServer getConnectedServer() const
Server which is connected, if not connected empty default object.
void testRequestAircraftConfig(const swift::misc::aviation::CCallsign &callsign)
Request parts for callsign (from another client).
void requestAircraftDataUpdates()
Request data updates (pilot's frequencies, ATIS, ..).
void testAddAircraftParts(const swift::misc::aviation::CCallsign &callsign, const swift::misc::aviation::CAircraftParts &parts, bool incremental)
Inject aircraft parts for testing.
swift::misc::aviation::CCallsignSet getFastPositionEnabledCallsigns() const
Callsigns enabled for fast position updates.
bool updateAircraftNetworkModel(const swift::misc::aviation::CCallsign &callsign, const swift::misc::simulation::CAircraftModel &model, const swift::misc::CIdentifier &originator)
Change network model (for remote aircraft).
void requestAtisUpdates()
Request ATIS updates (for all stations).
bool setOtherClient(const swift::misc::network::CClient &client)
Set client for given callsign.
swift::misc::network::CServerList getVatsimFsdServers() const
Known FSD servers, available when data file was first read.
swift::misc::weather::CMetar getMetarForAirport(const swift::misc::aviation::CAirportIcaoCode &airportIcaoCode) const
Get METAR, if not available request it (code such as EDDF, KLAX).
QString getNetworkStatistics(bool reset, const QString &separator)
Statistics info.
void sendFlightPlan(const swift::misc::aviation::CFlightPlan &flightPlan)
Send flight plan.
void testReceivedAtisMessage(const swift::misc::aviation::CCallsign &callsign, const swift::misc::aviation::CInformationMessage &msg)
Inject an ATIS.
swift::misc::CStatusMessageList getReverseLookupMessages(const swift::misc::aviation::CCallsign &callsign) const
Get reverse lookup messages.
void sendTextMessages(const swift::misc::network::CTextMessageList &textMessages)
Text messages (radio and private chat messages).
CContextNetworkProxy(CCoreFacadeConfig::ContextMode mode, CCoreFacade *runtime)
Constructor.
void setFastPositionEnabledCallsigns(swift::misc::aviation::CCallsignSet &callsigns)
Callsigns enabled for fast position updates.
swift::misc::aviation::CCallsign getPartnerCallsign() const
Partner callsign if any.
swift::misc::aviation::CAtcStationList getOnlineStationsForFrequency(const swift::misc::physical_quantities::CFrequency &frequency) const
Online stations for frequency.
swift::misc::aviation::CAtcStationList getAtcStationsOnline(bool recalculateDistance) const
The ATC list with online ATC controllers.
swift::misc::aviation::CAircraftPartsList getRemoteAircraftParts(const swift::misc::aviation::CCallsign &callsign) const
Get remote aircraft parts.
swift::misc::network::CClientList getClients() const
Information about other clients.
swift::misc::network::CUser getUserForCallsign(const swift::misc::aviation::CCallsign &callsign) const
User for given callsign, e.g. for text messages.
swift::misc::network::CClientList getClientsForCallsigns(const swift::misc::aviation::CCallsignSet &callsigns) const
Clients for given callsign, e.g. to test/fetch direct aircraft model.
bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator)
Parse a given command line.
void enableAircraftPartsHistory(bool enabled)
Enable storing of aircraft parts.
swift::misc::network::CUserList getUsers() const
Get all users.
bool isRemoteAircraftSupportingParts(const swift::misc::aviation::CCallsign &callsign) const
Parts supported?
bool updateAircraftSupportingGndFLag(const swift::misc::aviation::CCallsign &callsign, bool supportGndFlag)
Enable/disable support of gnd. flag.
QStringList getNetworkPresetValues() const
Network preset values.
swift::misc::aviation::CFlightPlan loadFlightPlanFromNetwork(const swift::misc::aviation::CCallsign &callsign) const
Load flight plan (from network).
bool isAircraftPartsHistoryEnabled() const
Is storing the aircraft parts history enabled?
void relayBaseClassSignals(const QString &serviceName, QDBusConnection &connection, const QString &objectPath, const QString &interfaceName)
Relay signals from this class.
Definition context.cpp:64
static const QString & ObjectPath()
DBus object path.
void textMessageSent(const swift::misc::network::CTextMessage &sentMessage)
Text message sent (by me).
void changedAircraftInRange()
Aircraft list has been changed.
void connectedServerChanged(const swift::misc::network::CServer &server)
The connected server has been changed.
void changedFastPositionUpdates(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Aircraft enabled / disabled.
void addedAircraft(const swift::misc::simulation::CSimulatedAircraft &remoteAircraft)
A new aircraft appeared.
void changedGndFlagCapability(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Changed gnd. flag capability.
void changedAtcStationsOnline()
ATC station (online) list has been changed.
void textMessagesReceived(const swift::misc::network::CTextMessageList &textMessages)
Text messages received (also private chat messages, radio channel messages).
void kicked(const QString &kickMessage)
User has been kicked from network.
std::function< void(const swift::misc::network::CRawFsdMessage &)> RawFsdMessageReceivedSlot
Raw FSD message receiver functor.
void changedAtcStationsOnlineDigest()
Digest signal changedAtcStationsOnline().
void changedRemoteAircraftEnabled(const swift::misc::simulation::CSimulatedAircraft &aircraft)
Aircraft enabled / disabled.
void connectionStatusChanged(const swift::misc::network::CConnectionStatus &from, const swift::misc::network::CConnectionStatus &to)
Connection status changed.
void atcStationDisconnected(const swift::misc::aviation::CAtcStation &atcStation)
ATC station disconnected.
static const QString & InterfaceName()
DBus interface name.
void changedAircraftInRangeDigest()
Digest signal changedAircraftInRange().
void removedAircraft(const swift::misc::aviation::CCallsign &callsign)
An aircraft disappeared.
static const QString & coreServiceName()
Default service name.
Used for hand written interface based on virtual methods.
Value object encapsulating information identifying a component of a modular distributed swift process...
Definition identifier.h:29
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
Value object encapsulating information of aircraft's parts.
Value object encapsulating a list of aircraft parts.
Value object encapsulating information of airport ICAO data.
Value object encapsulating information about an ATC station.
Definition atcstation.h:38
Value object for a list of ATC stations.
Value object encapsulating information of a callsign.
Definition callsign.h:30
Value object for a set of callsigns.
Definition callsignset.h:26
Value object for a flight plan.
Definition flightplan.h:148
Value object encapsulating information message (ATIS, METAR, TAF).
Another client software.
Definition client.h:27
Value object encapsulating a list of voice rooms.
Definition clientlist.h:27
Value object encapsulating information about a connection status.
Value object encapsulating information about login mode.
Definition loginmode.h:18
Value object encapsulating information of a FSD server.
Definition server.h:28
Value object encapsulating a list of servers.
Definition serverlist.h:23
Value object encapsulating information of a text message.
Definition textmessage.h:31
Value object encapsulating a list of text messages.
Value object encapsulating information of a user.
Definition user.h:28
Value object encapsulating a list of voice rooms.
Definition userlist.h:26
Physical unit length (length).
Definition length.h:18
Aircraft model (used by another pilot, my models on disk).
Comprehensive information of an aircraft.
Value object encapsulating a list of aircraft.
Value object encapsulating information about METAR FIXME: runway visibilities FIXME: runway wind shea...
Definition metar.h:38
Free functions in swift::misc.
bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
QDBusConnection sessionBus()
QObject(QObject *parent)