swift
Loading...
Searching...
No Matches
testservice.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 <QDBusArgument>
7#include <QDBusError>
8#include <QDBusObjectPath>
9#include <QDebug>
10#include <QVariant>
11#include <QtDebug>
12#include <QtGlobal>
13
16#include "misc/aviation/track.h"
17#include "misc/dbus.h"
18#include "misc/dbusutils.h"
19#include "misc/pq/frequency.h"
20#include "misc/pq/units.h"
21#include "misc/stringutils.h"
22#include "misc/test/testing.h"
23
24using namespace swift::misc;
25using namespace swift::misc::aviation;
26using namespace swift::misc::simulation;
27using namespace swift::misc::simulation::fscommon;
28using namespace swift::misc::geo;
29using namespace swift::misc::physical_quantities;
30using namespace swift::misc::network;
31
32namespace swift::misc::test
33{
35
36 CTestService::CTestService(bool verbose, QObject *parent) : QObject(parent), m_verbose(verbose) {}
37
39 {
40 const bool r = connection.registerService(CTestService::InterfaceName());
41 if (r)
42 {
44 }
45 return r;
46 }
47
49 {
51 return i;
52 }
53
55 {
56 static const QString p("/ts");
57 return p;
58 }
59
61 {
62 const auto pTestService = new CTestService(
63 verbose,
64 parent); // just a QObject with signals / slots and Q_CLASSINFO("D-Bus Interface", some service name)
66 {
67 QDBusError error = connection.lastError();
68 err() << error.message();
69 err() << "Started dbus-daemon.exe --session (Windows)?" << Qt::endl;
70 err() << "Created directory session.d (e.g. ../Qt/5.8.0/qtbase/etc/dbus-1/session.d)?" << Qt::endl;
71 qFatal("Could not register service!");
72 }
73
74 if (!connection.registerObject(CTestService::ObjectPath(), pTestService,
77 {
78 qFatal("Could not register service object!");
79 }
80
81 out() << "Registration running as pid: " << CTestService::getPid() << Qt::endl;
82 if (pTestService)
83 {
84 out() << "Service registered" << Qt::endl;
85 }
86
87 QString service; // service not needed
88 if (connection.connect(service, CTestService::ObjectPath(), CTestService::InterfaceName(), "sendStringMessage",
89 pTestService, SLOT(receiveStringMessage(const QString &))))
90 {
91 out() << "Connected object with DBus 'sendStringMessage'" << Qt::endl;
92 }
93 else
94 {
95 qFatal("Cannot connect service with DBus");
96 }
97 return pTestService;
98 }
99
104
105 QTextStream &CTestService::out()
106 {
107 static QTextStream out(stdout);
108 return out;
109 }
110
111 QTextStream &CTestService::err()
112 {
113 static QTextStream err(stderr);
114 return err;
115 }
116
118 {
119 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received message: " << message << Qt::endl;
120 }
121
122 void CTestService::receiveVariant(const CVariant &variant) const
123 {
124 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received variant: " << variant << Qt::endl;
125 }
126
128 {
129 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received speed: " << speed << Qt::endl;
130 }
131
132 void CTestService::receiveComUnit(const CComSystem &comUnit) const
133 {
134 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received COM: " << comUnit << Qt::endl;
135 }
136
137 void CTestService::receiveAltitude(const CAltitude &altitude) const
138 {
139 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received altitude: " << altitude << Qt::endl;
140 }
141
143 {
144 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received list: " << list.size() << Qt::endl;
145 }
146
148 {
149 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received geo data: " << geo << Qt::endl;
150 }
151
152 void CTestService::receiveTransponder(const CTransponder &transponder) const
153 {
154 if (m_verbose)
155 out() << "Pid: " << CTestService::getPid() << " Received transponder: " << transponder << Qt::endl;
156 }
157
158 void CTestService::receiveTrack(const CTrack &track) const
159 {
160 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received track: " << track << Qt::endl;
161 }
162
164 {
165 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received length: " << length << Qt::endl;
166 }
167
168 void CTestService::receiveVariantList(const CVariantList &variantList) const
169 {
170 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " " << variantList.size() << Qt::endl;
171 for (const CVariant &lv : variantList)
172 {
173 if (m_verbose) out() << " Received variant: " << lv.toQString() << Qt::endl;
174 }
175 }
176
177 void CTestService::receiveCallsign(const CCallsign &callsign) const
178 {
179 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received callsign: " << callsign << Qt::endl;
180 }
181
182 void CTestService::receiveAtcStationList(const CAtcStationList &atcStationList) const
183 {
184 if (m_verbose)
185 out() << "Pid: " << CTestService::getPid() << " Received ATC list: " << atcStationList << Qt::endl;
186 }
187
189 {
190 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received value map: " << valueMap << Qt::endl;
191 }
192
194 {
195 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " Received ATC station: " << station << Qt::endl;
196 }
197
199 {
200 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping ATCs: " << atcStationList << Qt::endl;
201 return atcStationList;
202 }
203
205 {
206 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping aircraft: " << aircraftList << Qt::endl;
207 return aircraftList;
208 }
209
211 {
212 if (m_verbose)
213 out() << "Pid: " << CTestService::getPid() << " ping aircraft parts: " << aircraftParts << Qt::endl;
214 return aircraftParts;
215 }
216
218 {
219 if (m_verbose)
220 out() << "Pid: " << CTestService::getPid() << " ping aircraft engine: " << aircraftEngine << Qt::endl;
221 return aircraftEngine;
222 }
223
225 {
226 if (m_verbose)
227 out() << "Pid: " << CTestService::getPid() << " ping aircraft model: " << aircraftModel << Qt::endl;
228 return aircraftModel;
229 }
230
232 {
233 if (m_verbose)
234 out() << "Pid: " << CTestService::getPid() << " ping aircraft modellist: " << aircraftModels << Qt::endl;
235 return aircraftModels;
236 }
237
239 {
240 if (m_verbose)
241 out() << "Pid: " << CTestService::getPid() << " ping aircraft lights: " << aircraftLights << Qt::endl;
242 return aircraftLights;
243 }
244
246 {
247 if (m_verbose)
248 out() << "Pid: " << CTestService::getPid() << " ping simulated aircraft: " << aircraft << Qt::endl;
249 return aircraft;
250 }
251
253 {
254 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping airports: " << airportList << Qt::endl;
255 return airportList;
256 }
257
259 {
260 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping properties: " << properties << Qt::endl;
261 return properties;
262 }
263
265 {
266 if (m_verbose)
267 out() << "Pid: " << CTestService::getPid() << " ping properties: " << indexVariantMap << Qt::endl;
268 return indexVariantMap;
269 }
270
272 {
273 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping client: " << client << Qt::endl;
274 return client;
275 }
276
278 {
279 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping clients: " << clientList << Qt::endl;
280 return clientList;
281 }
282
284 {
285 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping speed: " << speed << Qt::endl;
286 return speed;
287 }
288
290 {
291 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping alt: " << altitude << Qt::endl;
292 return altitude;
293 }
294
296 {
297 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping user: " << user << Qt::endl;
298 return user;
299 }
300
302 {
303 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping situation: " << situation << Qt::endl;
304 return situation;
305 }
306
308 {
309 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping transponder: " << transponder << Qt::endl;
310 return transponder;
311 }
312
314 {
315 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping ATC: " << station << Qt::endl;
316 return station;
317 }
318
320 {
321 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " ping ICAO data: " << icao << Qt::endl;
322 return icao;
323 }
324
326 {
327 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " info: " << info << Qt::endl;
328 return info;
329 }
330
332 {
333 if (m_verbose)
334 out() << "Pid: " << CTestService::getPid() << " client sent back as CVariant: " << variant.toQString()
335 << Qt::endl;
336 return variant;
337 }
338
341 {
342 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " info: " << flightPlan << Qt::endl;
343 return flightPlan;
344 }
345
347 {
348 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " getAtcStationList" << Qt::endl;
349 return CTesting::createAtcStations(n, false);
350 }
351
353 {
354 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " getAircraftCfgEntriesList" << Qt::endl;
356 }
357
359 {
360 if (m_verbose) out() << "Pid: " << CTestService::getPid() << " getObjectPaths" << Qt::endl;
362 paths.reserve(n);
363 for (int i = 0; i < n; i++)
364 {
366 }
367 return paths;
368 }
369} // namespace swift::misc::test
Specialized value object compliant map for variants, based on indexes.
size_type size() const
Returns number of elements in the sequence.
Definition sequence.h:273
Wrapper around QVariant which provides transparent access to CValueObject methods of the contained ob...
Definition variant.h:69
Value object encapsulating a list of variants.
Definition variantlist.h:29
Value object encapsulating information about aircraft's engines.
Value object for ICAO classification.
Value object encapsulating information about aircraft's lights.
Value object encapsulating information of aircraft's parts.
Value object encapsulating information of an aircraft's situation.
Value object for a list of airports.
Definition airportlist.h:29
Altitude as used in aviation, can be AGL or MSL altitude.
Definition altitude.h:52
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
COM system (aka "radio").
Definition comsystem.h:37
Value object for a flight plan.
Definition flightplan.h:148
Track as used in aviation, can be true or magnetic Track.
Definition track.h:44
QString toQString(bool i18n=false) const
Cast as QString.
Definition mixinstring.h:74
Another client software.
Definition client.h:27
Value object encapsulating a list of voice rooms.
Definition clientlist.h:27
Value object encapsulating information of a user.
Definition user.h:28
Physical unit length (length).
Definition length.h:18
Aircraft model (used by another pilot, my models on disk).
Value object encapsulating a list of aircraft models.
Comprehensive information of an aircraft.
Value object encapsulating a list of aircraft.
swift::misc::aviation::CAircraftLights pingAircraftLights(const swift::misc::aviation::CAircraftLights &aircraftLights) const
Ping aircraft lights.
swift::misc::network::CUser pingUser(const swift::misc::network::CUser &user) const
Ping user.
swift::misc::aviation::CAircraftIcaoCode pingAircraftIcaoData(const swift::misc::aviation::CAircraftIcaoCode &icao) const
Ping ICAO data object.
void receiveAltitude(const swift::misc::aviation::CAltitude &altitude) const
Receive altitude.
void receiveSpeed(const swift::misc::physical_quantities::CSpeed &speed) const
Receive speed.
swift::misc::aviation::CTransponder pingTransponder(const swift::misc::aviation::CTransponder &transponder) const
Ping transponder.
swift::misc::aviation::CAircraftParts pingAircraftParts(const swift::misc::aviation::CAircraftParts &aircraftParts) const
Ping parts.
void receiveTransponder(const swift::misc::aviation::CTransponder &transponder) const
Receive transponder.
void receiveValueMap(const swift::misc::CPropertyIndexVariantMap &valueMap) const
Receive an value map.
swift::misc::simulation::CAircraftModelList pingAircraftModelList(const swift::misc::simulation::CAircraftModelList &aircraftModels) const
Ping model.
swift::misc::aviation::CFlightPlan pingFlightPlan(const swift::misc::aviation::CFlightPlan &flightPlan) const
Ping flight plan.
static bool canRegisterTestService(QDBusConnection &connection)
Can the testservice be registered?
static const QString & InterfaceName()
DBus interface name.
swift::misc::physical_quantities::CSpeed pingSpeed(const swift::misc::physical_quantities::CSpeed &speed) const
Ping speed.
swift::misc::simulation::CSimulatedAircraftList pingAircraftList(const swift::misc::simulation::CSimulatedAircraftList &aircraftList) const
Ping aircraft list.
void receiveVariant(const swift::misc::CVariant &variant) const
Receive a QVariant.
swift::misc::simulation::fscommon::CAircraftCfgEntriesList getAircraftCfgEntriesList(int n) const
Return stations via DBus.
void receiveAtcStationList(const swift::misc::aviation::CAtcStationList &atcStationList) const
Receive ATC list.
swift::misc::simulation::CAircraftModel pingAircraftModel(const swift::misc::simulation::CAircraftModel &aircraftModel) const
Ping model.
swift::misc::CPropertyIndex pingPropertyIndex(const swift::misc::CPropertyIndex &properties) const
Ping property index.
void receiveLength(const swift::misc::physical_quantities::CLength &length) const
Receive a length.
void receiveVariantList(const swift::misc::CVariantList &variantList) const
Receive variant list.
static const QString & ObjectPath()
DBus object path.
swift::misc::aviation::CAtcStationList getAtcStationList(int n) const
Return stations via DBus.
swift::misc::simulation::CSimulatedAircraft pingSimulatedAircraft(const swift::misc::simulation::CSimulatedAircraft &aircraft) const
Ping simulated aircraft.
swift::misc::aviation::CAtcStationList pingAtcStationList(const swift::misc::aviation::CAtcStationList &atcStationList) const
Ping ATC list.
QList< QDBusObjectPath > getObjectPaths(int n) const
Return paths via DBus.
swift::misc::aviation::CAircraftSituation pingSituation(const swift::misc::aviation::CAircraftSituation &situation) const
Ping situation.
swift::misc::network::CClient pingClient(const swift::misc::network::CClient &client) const
Ping client.
swift::misc::simulation::CSimulatorPluginInfo pingPluginInfo(const swift::misc::simulation::CSimulatorPluginInfo &info) const
Ping plugin info.
void receiveTrack(const swift::misc::aviation::CTrack &track) const
Receive track.
swift::misc::aviation::CAtcStation pingAtcStation(const swift::misc::aviation::CAtcStation &station) const
Ping ATC station.
void receiveList(const QList< double > &list) const
Receive list.
swift::misc::network::CClientList pingClientList(const swift::misc::network::CClientList &clientList) const
Ping NW clients list.
swift::misc::aviation::CAirportList pingAirportList(const swift::misc::aviation::CAirportList &airportList) const
Ping airports list.
void receiveComUnit(const swift::misc::aviation::CComSystem &comUnit) const
Receive com unit.
swift::misc::aviation::CAltitude pingAltitude(const swift::misc::aviation::CAltitude &altitude) const
Ping altitude.
static CTestService * registerTestService(QDBusConnection &connection, bool verbose, QObject *parent=nullptr)
Register testservice with connection.
swift::misc::aviation::CAircraftEngine pingAircraftEngine(const swift::misc::aviation::CAircraftEngine &aircraftEngine) const
Ping engine.
void receiveStringMessage(const QString &message) const
Receive string message.
CTestService(QObject *parent=nullptr)
Constructor.
static bool unregisterTestService(QDBusConnection &connection)
Can the testservice be registered?
swift::misc::CPropertyIndexVariantMap pingIndexVariantMap(const swift::misc::CPropertyIndexVariantMap &indexVariantMap) const
Ping index variant map.
swift::misc::CVariant pingCVariant(const swift::misc::CVariant &variant) const
Ping CVariant.
void receiveCallsign(const swift::misc::aviation::CCallsign &callsign) const
Receive callsign.
void receiveGeoPosition(const swift::misc::geo::CCoordinateGeodetic &geo) const
Receive a geo position.
static qint64 getPid()
Process id.
Definition testservice.h:89
void receiveAtcStation(const swift::misc::aviation::CAtcStation &station) const
Receive ATC station.
static swift::misc::simulation::fscommon::CAircraftCfgEntriesList getAircraftCfgEntries(int number)
Get aircraft cfg entries.
Definition testing.cpp:83
static swift::misc::aviation::CAtcStationList createAtcStations(int number, bool byPropertyIndex=false)
Generate number of ATC stations.
Definition testing.cpp:33
Generate data for testing purposes.
Definition testdata.h:45
Free functions in swift::misc.
bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
QDBusError lastError() const const
bool registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options)
bool registerService(const QString &serviceName)
bool unregisterService(const QString &serviceName)
QString message() const const
void append(QList< T > &&value)
void reserve(qsizetype size)
qsizetype size() const const
QObject(QObject *parent)
QObject * parent() const const
QTextStream & endl(QTextStream &stream)
#define SWIFT_MISC_TESTSERVICE_INTERFACENAME
DBus interface for test service.
Definition testservice.h:58