Refactor retrieving remote aircraft data

Instead of requesting it individually for each callsign and waiting for a
signal from xswiftbus, pass in a list of callsigns and use async callback
to read the data.
This commit is contained in:
Roland Winklmeier
2018-05-05 13:45:24 +02:00
parent bf8ed5c006
commit 2fd4d286d6
8 changed files with 102 additions and 49 deletions

View File

@@ -107,15 +107,29 @@ namespace BlackSimPlugin
m_dbusInterface->callDBus(QLatin1String("setInterpolatorMode"), callsign, spline);
}
void CXSwiftBusTrafficProxy::requestRemoteAircraftData()
void CXSwiftBusTrafficProxy::getRemoteAircraftsData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter)
{
m_dbusInterface->callDBus(QLatin1String("requestRemoteAircraftData"));
std::function<void(QDBusPendingCallWatcher *)> callback = [ = ](QDBusPendingCallWatcher * watcher)
{
QDBusPendingReply<QStringList, QList<double>, QList<double>, QList<double>, QList<double>> reply = *watcher;
if (!reply.isError())
{
QStringList callsigns = reply.argumentAt<0>();
QList<double> latitudesDeg = reply.argumentAt<1>();
QList<double> longitudesDeg = reply.argumentAt<2>();
QList<double> elevationsM = reply.argumentAt<3>();
QList<double> verticalOffsets = reply.argumentAt<4>();
setter(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets);
}
watcher->deleteLater();
};
m_dbusInterface->callDBusAsync(QLatin1String("getRemoteAircraftsData"), callback, callsigns);
}
void CXSwiftBusTrafficProxy::getEelevationAtPosition(const CCallsign &callsign, double latitude, double longitude, double altitude,
const ElevationCallback &setter)
const ElevationCallback &setter)
{
std::function<void(QDBusPendingCallWatcher *)> callback = [=](QDBusPendingCallWatcher * watcher)
std::function<void(QDBusPendingCallWatcher *)> callback = [ = ](QDBusPendingCallWatcher * watcher)
{
QDBusPendingReply<QString, double> reply = *watcher;
if (!reply.isError())