From a508ad4ccb83e1a917f13f41be411e63dff5cbd6 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 11 Jul 2018 23:41:31 +0200 Subject: [PATCH] Ref T268, check in XPlane driver --- .../simulator/xplane/simulatorxplane.cpp | 23 ++++++++++++++++++- src/plugins/simulator/xplane/xplane.pro | 2 +- .../simulator/xplane/xswiftbustrafficproxy.h | 13 +++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index e891c193d..56b2aba72 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -52,6 +52,7 @@ #include "blackmisc/dbusserver.h" #include "blackmisc/iterator.h" #include "blackmisc/logmessage.h" +#include "blackconfig/buildconfig.h" #include #include @@ -60,6 +61,7 @@ #include #include +using namespace BlackConfig; using namespace BlackMisc; using namespace BlackMisc::Aviation; using namespace BlackMisc::Network; @@ -558,7 +560,11 @@ namespace BlackSimPlugin if (callsign.isEmpty()) { return false; } // can happen if an object is not an aircraft // really remove from simulator - if (!m_xplaneAircraftObjects.contains(callsign) && !m_pendingToBeAddedAircraft.containsCallsign(callsign)) { return false; } // already fully removed or not yet added + if (!m_xplaneAircraftObjects.contains(callsign) && !m_pendingToBeAddedAircraft.containsCallsign(callsign) && !m_addingInProgressAircraft.contains(callsign)) + { + // not existing aircraft + return false; + } // mark in provider const bool updated = this->updateAircraftRendered(callsign, false); @@ -577,6 +583,17 @@ namespace BlackSimPlugin aircraft.setRendered(false); emit this->aircraftRenderingChanged(aircraft); } + else if (m_addingInProgressAircraft.contains(callsign)) + { + // we are just about to add that aircraft + QPointer myself(this); + QTimer::singleShot(TimeoutAdding, this, [ = ] + { + if (!myself) { return; } + m_addingInProgressAircraft.remove(callsign); // remove as "in progress" + this->physicallyRemoveRemoteAircraft(callsign); // and remove from sim. if it was added in the mean time + }); + } } m_trafficProxy->removePlane(callsign.asString()); @@ -777,6 +794,10 @@ namespace BlackSimPlugin if (!planesPositions.isEmpty()) { + if (CBuildConfig::isLocalDeveloperDebugBuild()) + { + Q_ASSERT_X(planesPositions.hasSameSizes(), Q_FUNC_INFO, "Mismatching sizes"); + } m_trafficProxy->setPlanesPositions(planesPositions); } diff --git a/src/plugins/simulator/xplane/xplane.pro b/src/plugins/simulator/xplane/xplane.pro index 92eace598..90a5d466e 100644 --- a/src/plugins/simulator/xplane/xplane.pro +++ b/src/plugins/simulator/xplane/xplane.pro @@ -6,7 +6,7 @@ TARGET = simulatorxplane TEMPLATE = lib CONFIG += plugin shared -CONFIG += blackmisc blackcore blackgui +CONFIG += blackmisc blackcore blackgui blackconfig DEPENDPATH += . $$SourceRoot/src INCLUDEPATH += . $$SourceRoot/src diff --git a/src/plugins/simulator/xplane/xswiftbustrafficproxy.h b/src/plugins/simulator/xplane/xswiftbustrafficproxy.h index 87c9a59de..59ef34d1b 100644 --- a/src/plugins/simulator/xplane/xswiftbustrafficproxy.h +++ b/src/plugins/simulator/xplane/xswiftbustrafficproxy.h @@ -40,6 +40,19 @@ namespace BlackSimPlugin //! Is empty? bool isEmpty() const { return callsigns.isEmpty(); } + //! Check function + bool hasSameSizes() const + { + const int s = callsigns.size(); + if (s != latitudes.size()) { return false; } + if (s != longitudes.size()) { return false; } + if (s != altitudes.size()) { return false; } + if (s != pitches.size()) { return false; } + if (s != rolls.size()) { return false; } + if (s != headings.size()) { return false; } + return true; + } + QStringList callsigns; //!< List of callsigns QList latitudes; //!< List of latitudes QList longitudes; //!< List of longitudes