Ref T268, Xplane driver style/renaming

This commit is contained in:
Klaus Basan
2018-07-06 13:33:23 +02:00
parent f252729fdd
commit 79c1691fdc
2 changed files with 62 additions and 69 deletions

View File

@@ -59,13 +59,14 @@
#include <QtGlobal> #include <QtGlobal>
using namespace BlackMisc; using namespace BlackMisc;
using namespace Aviation; using namespace BlackMisc::Aviation;
using namespace Network; using namespace BlackMisc::Network;
using namespace PhysicalQuantities; using namespace BlackMisc::PhysicalQuantities;
using namespace Simulation; using namespace BlackMisc::Simulation;
using namespace Geo; using namespace BlackMisc::Geo;
using namespace Simulation; using namespace BlackMisc::Simulation;
using namespace Weather; using namespace BlackMisc::Weather;
using namespace BlackCore;
namespace namespace
{ {
@@ -249,10 +250,10 @@ namespace BlackSimPlugin
bool CSimulatorXPlane::connectTo() bool CSimulatorXPlane::connectTo()
{ {
if (isConnected()) { return true; } if (isConnected()) { return true; }
m_conn = QDBusConnection::sessionBus(); // TODO make this configurable m_dBusConnection = QDBusConnection::sessionBus(); // TODO make this configurable
m_serviceProxy = new CXSwiftBusServiceProxy(m_conn, this); m_serviceProxy = new CXSwiftBusServiceProxy(m_dBusConnection, this);
m_trafficProxy = new CXSwiftBusTrafficProxy(m_conn, this); m_trafficProxy = new CXSwiftBusTrafficProxy(m_dBusConnection, this);
m_weatherProxy = new CXSwiftBusWeatherProxy(m_conn, this); m_weatherProxy = new CXSwiftBusWeatherProxy(m_dBusConnection, this);
if (m_serviceProxy->isValid() && m_trafficProxy->isValid() && m_weatherProxy->isValid() && m_trafficProxy->initialize()) if (m_serviceProxy->isValid() && m_trafficProxy->isValid() && m_weatherProxy->isValid() && m_trafficProxy->initialize())
{ {
@@ -264,7 +265,7 @@ namespace BlackSimPlugin
connect(m_trafficProxy, &CXSwiftBusTrafficProxy::simFrame, this, &CSimulatorXPlane::updateRemoteAircraft); connect(m_trafficProxy, &CXSwiftBusTrafficProxy::simFrame, this, &CSimulatorXPlane::updateRemoteAircraft);
connect(m_trafficProxy, &CXSwiftBusTrafficProxy::remoteAircraftAdded, this, &CSimulatorXPlane::remoteAircraftAdded); connect(m_trafficProxy, &CXSwiftBusTrafficProxy::remoteAircraftAdded, this, &CSimulatorXPlane::remoteAircraftAdded);
connect(m_trafficProxy, &CXSwiftBusTrafficProxy::remoteAircraftAddingFailed, this, &CSimulatorXPlane::remoteAircraftAddingFailed); connect(m_trafficProxy, &CXSwiftBusTrafficProxy::remoteAircraftAddingFailed, this, &CSimulatorXPlane::remoteAircraftAddingFailed);
if (m_watcher) { m_watcher->setConnection(m_conn); } if (m_watcher) { m_watcher->setConnection(m_dBusConnection); }
m_trafficProxy->removeAllPlanes(); m_trafficProxy->removeAllPlanes();
this->loadCslPackages(); this->loadCslPackages();
this->emitSimulatorCombinedStatus(); this->emitSimulatorCombinedStatus();
@@ -272,7 +273,7 @@ namespace BlackSimPlugin
} }
else else
{ {
disconnectFrom(); this->disconnectFrom();
return false; return false;
} }
} }
@@ -285,29 +286,29 @@ namespace BlackSimPlugin
m_trafficProxy->cleanup(); m_trafficProxy->cleanup();
} }
m_conn = QDBusConnection { "default" }; m_dBusConnection = QDBusConnection { "default" };
if (m_watcher) { m_watcher->setConnection(m_conn); } if (m_watcher) { m_watcher->setConnection(m_dBusConnection); }
delete m_serviceProxy; delete m_serviceProxy;
delete m_trafficProxy; delete m_trafficProxy;
delete m_weatherProxy; delete m_weatherProxy;
m_serviceProxy = nullptr; m_serviceProxy = nullptr;
m_trafficProxy = nullptr; m_trafficProxy = nullptr;
m_weatherProxy = nullptr; m_weatherProxy = nullptr;
emitSimulatorCombinedStatus(); this->emitSimulatorCombinedStatus();
return true; return true;
} }
void CSimulatorXPlane::serviceUnregistered() void CSimulatorXPlane::serviceUnregistered()
{ {
m_conn = QDBusConnection { "default" }; m_dBusConnection = QDBusConnection { "default" };
if (m_watcher) { m_watcher->setConnection(m_conn); } if (m_watcher) { m_watcher->setConnection(m_dBusConnection); }
delete m_serviceProxy; delete m_serviceProxy;
delete m_trafficProxy; delete m_trafficProxy;
delete m_weatherProxy; delete m_weatherProxy;
m_serviceProxy = nullptr; m_serviceProxy = nullptr;
m_trafficProxy = nullptr; m_trafficProxy = nullptr;
m_weatherProxy = nullptr; m_weatherProxy = nullptr;
emitSimulatorCombinedStatus(); this->emitSimulatorCombinedStatus();
} }
void CSimulatorXPlane::emitOwnAircraftModelChanged(const QString &path, const QString &filename, const QString &livery, void CSimulatorXPlane::emitOwnAircraftModelChanged(const QString &path, const QString &filename, const QString &livery,
@@ -367,9 +368,6 @@ namespace BlackSimPlugin
auto altIt = alts.begin(); auto altIt = alts.begin();
for (; icaoIt != icaos.end() && nameIt != names.end() && latIt != lats.end() && lonIt != lons.end() && altIt != alts.end(); ++icaoIt, ++nameIt, ++latIt, ++lonIt, ++altIt) for (; icaoIt != icaos.end() && nameIt != names.end() && latIt != lats.end() && lonIt != lons.end() && altIt != alts.end(); ++icaoIt, ++nameIt, ++latIt, ++lonIt, ++altIt)
{ {
using namespace PhysicalQuantities;
using namespace Geo;
m_airportsInRange.push_back({ *icaoIt, { CLatitude(*latIt, CAngleUnit::deg()), CLongitude(*lonIt, CAngleUnit::deg()), CAltitude(*altIt, CLengthUnit::m()) }, *nameIt }); m_airportsInRange.push_back({ *icaoIt, { CLatitude(*latIt, CAngleUnit::deg()), CLongitude(*lonIt, CAngleUnit::deg()), CAltitude(*altIt, CLengthUnit::m()) }, *nameIt });
} }
} }
@@ -496,9 +494,9 @@ namespace BlackSimPlugin
Q_ASSERT_X(newRemoteAircraft.hasModelString(), Q_FUNC_INFO, "missing model string"); Q_ASSERT_X(newRemoteAircraft.hasModelString(), Q_FUNC_INFO, "missing model string");
QString callsign = newRemoteAircraft.getCallsign().asString(); QString callsign = newRemoteAircraft.getCallsign().asString();
m_pendingAddedAircrafts.push_back(newRemoteAircraft); m_pendingToBeAddedAircraft.push_back(newRemoteAircraft);
if (m_pendingAddedAircrafts.size() == 1) if (m_pendingToBeAddedAircraft.size() == 1)
{ {
CAircraftModel aircraftModel = newRemoteAircraft.getModel(); CAircraftModel aircraftModel = newRemoteAircraft.getModel();
QString livery = aircraftModel.getLivery().getCombinedCode(); //! \todo livery resolution for XP QString livery = aircraftModel.getLivery().getCombinedCode(); //! \todo livery resolution for XP
@@ -520,7 +518,7 @@ namespace BlackSimPlugin
if (callsign.isEmpty()) { return false; } // can happen if an object is not an aircraft if (callsign.isEmpty()) { return false; } // can happen if an object is not an aircraft
// really remove from simulator // really remove from simulator
if (!m_xplaneAircraftObjects.contains(callsign) && !m_pendingAddedAircrafts.containsCallsign(callsign)) { return false; } // already fully removed or not yet added if (!m_xplaneAircraftObjects.contains(callsign) && !m_pendingToBeAddedAircraft.containsCallsign(callsign)) { return false; } // already fully removed or not yet added
// mark in provider // mark in provider
const bool updated = this->updateAircraftRendered(callsign, false); const bool updated = this->updateAircraftRendered(callsign, false);
@@ -533,9 +531,9 @@ namespace BlackSimPlugin
aircraft.setRendered(false); aircraft.setRendered(false);
emit this->aircraftRenderingChanged(aircraft); emit this->aircraftRenderingChanged(aircraft);
} }
if (m_pendingAddedAircrafts.containsCallsign(callsign)) if (m_pendingToBeAddedAircraft.containsCallsign(callsign))
{ {
CSimulatedAircraft aircraft = m_pendingAddedAircrafts.findFirstByCallsign(callsign); CSimulatedAircraft aircraft = m_pendingToBeAddedAircraft.findFirstByCallsign(callsign);
aircraft.setRendered(false); aircraft.setRendered(false);
emit this->aircraftRenderingChanged(aircraft); emit this->aircraftRenderingChanged(aircraft);
} }
@@ -543,10 +541,10 @@ namespace BlackSimPlugin
m_trafficProxy->removePlane(callsign.asString()); m_trafficProxy->removePlane(callsign.asString());
m_xplaneAircraftObjects.remove(callsign); m_xplaneAircraftObjects.remove(callsign);
m_pendingAddedAircrafts.removeByCallsign(callsign); m_pendingToBeAddedAircraft.removeByCallsign(callsign);
// Stop the timer if there is nothing left // Stop the timer if there is nothing left
if (m_pendingAddedAircrafts.empty()) if (m_pendingToBeAddedAircraft.empty())
{ {
m_pendingAddedTimer.stop(); m_pendingAddedTimer.stop();
} }
@@ -589,8 +587,9 @@ namespace BlackSimPlugin
Q_ASSERT(isConnected()); Q_ASSERT(isConnected());
m_weatherProxy->setUseRealWeather(false); m_weatherProxy->setUseRealWeather(false);
// todo: find the closest //! TODO: find the closest
CGridPoint gridPoint = weatherGrid.front(); if (weatherGrid.isEmpty()) { return; }
const CGridPoint gridPoint = weatherGrid.front();
// todo: find the closest // todo: find the closest
auto visibilityLayers = gridPoint.getVisibilityLayers(); auto visibilityLayers = gridPoint.getVisibilityLayers();
@@ -617,10 +616,10 @@ namespace BlackSimPlugin
cloudLayers.sortBy(&CCloudLayer::getBase); cloudLayers.sortBy(&CCloudLayer::getBase);
// todo: Instead of truncate, find the 3 vertical closest cloud layers // todo: Instead of truncate, find the 3 vertical closest cloud layers
cloudLayers.truncate(3); cloudLayers.truncate(3);
for (const auto &cloudLayer : cloudLayers) for (const auto &cloudLayer : as_const(cloudLayers))
{ {
int base = cloudLayer.getBase().value(CLengthUnit::m()); const int base = cloudLayer.getBase().value(CLengthUnit::m());
int top = cloudLayer.getTop().value(CLengthUnit::m()); const int top = cloudLayer.getTop().value(CLengthUnit::m());
int coverage = 0; int coverage = 0;
switch (cloudLayer.getCoverage()) switch (cloudLayer.getCoverage())
@@ -630,7 +629,7 @@ namespace BlackSimPlugin
case CCloudLayer::Scattered: coverage = 3; break; case CCloudLayer::Scattered: coverage = 3; break;
case CCloudLayer::Broken: coverage = 4; break; case CCloudLayer::Broken: coverage = 4; break;
case CCloudLayer::Overcast: coverage = 6; break; case CCloudLayer::Overcast: coverage = 6; break;
default: coverage = 0; default: coverage = 0; break;
} }
// Clear = 0, High Cirrus = 1, Scattered = 2, Broken = 3, Overcast = 4, Stratus = 5 // Clear = 0, High Cirrus = 1, Scattered = 2, Broken = 3, Overcast = 4, Stratus = 5
@@ -640,7 +639,7 @@ namespace BlackSimPlugin
case CCloudLayer::NoClouds: type = 0; break; case CCloudLayer::NoClouds: type = 0; break;
case CCloudLayer::Cirrus: type = 1; break; case CCloudLayer::Cirrus: type = 1; break;
case CCloudLayer::Stratus: type = 5; break; case CCloudLayer::Stratus: type = 5; break;
default: type = 0; default: type = 0; break;
} }
m_weatherProxy->setCloudLayer(layerNumber, base, top, type, coverage); m_weatherProxy->setCloudLayer(layerNumber, base, top, type, coverage);
@@ -807,23 +806,23 @@ namespace BlackSimPlugin
void CSimulatorXPlane::remoteAircraftAdded(const QString &callsign) void CSimulatorXPlane::remoteAircraftAdded(const QString &callsign)
{ {
if (m_pendingAddedAircrafts.containsCallsign(callsign)) if (m_pendingToBeAddedAircraft.containsCallsign(callsign))
{ {
CSimulatedAircraft addedRemoteAircraft = m_pendingAddedAircrafts.findFirstByCallsign(callsign); CSimulatedAircraft addedRemoteAircraft = m_pendingToBeAddedAircraft.findFirstByCallsign(callsign);
m_pendingAddedAircrafts.removeByCallsign(callsign); m_pendingToBeAddedAircraft.removeByCallsign(callsign);
m_xplaneAircraftObjects.insert(addedRemoteAircraft.getCallsign(), CXPlaneMPAircraft(addedRemoteAircraft, this, &m_interpolationLogger)); m_xplaneAircraftObjects.insert(addedRemoteAircraft.getCallsign(), CXPlaneMPAircraft(addedRemoteAircraft, this, &m_interpolationLogger));
CLogMessage(this).info("XP: Added aircraft %1") << addedRemoteAircraft.getCallsign().toQString(); CLogMessage(this).info("XP: Added aircraft '%1'") << addedRemoteAircraft.getCallsign().toQString();
bool rendered = true; bool rendered = true;
updateAircraftRendered(addedRemoteAircraft.getCallsign(), rendered); this->updateAircraftRendered(addedRemoteAircraft.getCallsign(), rendered);
addedRemoteAircraft.setRendered(rendered); addedRemoteAircraft.setRendered(rendered);
emit this->aircraftRenderingChanged(addedRemoteAircraft); emit this->aircraftRenderingChanged(addedRemoteAircraft);
} }
if (m_pendingAddedAircrafts.size() > 0) if (m_pendingToBeAddedAircraft.size() > 0)
{ {
CSimulatedAircraft newRemoteAircraft = m_pendingAddedAircrafts.front(); CSimulatedAircraft newRemoteAircraft = m_pendingToBeAddedAircraft.front();
CAircraftModel aircraftModel = newRemoteAircraft.getModel(); CAircraftModel aircraftModel = newRemoteAircraft.getModel();
QString livery = aircraftModel.getLivery().getCombinedCode(); //! \todo livery resolution for XP QString livery = aircraftModel.getLivery().getCombinedCode(); //! \todo livery resolution for XP
m_trafficProxy->addPlane(newRemoteAircraft.getCallsign().toQString(), aircraftModel.getModelString(), m_trafficProxy->addPlane(newRemoteAircraft.getCallsign().toQString(), aircraftModel.getModelString(),
@@ -840,12 +839,12 @@ namespace BlackSimPlugin
void CSimulatorXPlane::remoteAircraftAddingFailed(const QString &callsign) void CSimulatorXPlane::remoteAircraftAddingFailed(const QString &callsign)
{ {
CLogMessage(this).info("XP: Adding aircraft failed: %1") << callsign; CLogMessage(this).info("XP: Adding aircraft failed: '%1'") << callsign;
m_pendingAddedAircrafts.removeByCallsign(callsign); m_pendingToBeAddedAircraft.removeByCallsign(callsign);
if (m_pendingAddedAircrafts.size() > 0) if (m_pendingToBeAddedAircraft.size() > 0)
{ {
CSimulatedAircraft newRemoteAircraft = m_pendingAddedAircrafts.front(); CSimulatedAircraft newRemoteAircraft = m_pendingToBeAddedAircraft.front();
CAircraftModel aircraftModel = newRemoteAircraft.getModel(); CAircraftModel aircraftModel = newRemoteAircraft.getModel();
QString livery = aircraftModel.getLivery().getCombinedCode(); //! \todo livery resolution for XP QString livery = aircraftModel.getLivery().getCombinedCode(); //! \todo livery resolution for XP
m_trafficProxy->addPlane(newRemoteAircraft.getCallsign().toQString(), aircraftModel.getModelString(), m_trafficProxy->addPlane(newRemoteAircraft.getCallsign().toQString(), aircraftModel.getModelString(),
@@ -862,17 +861,17 @@ namespace BlackSimPlugin
void CSimulatorXPlane::remoteAircraftAddingTimeout() void CSimulatorXPlane::remoteAircraftAddingTimeout()
{ {
Q_ASSERT(m_pendingAddedAircrafts.size() > 0); Q_ASSERT(m_pendingToBeAddedAircraft.size() > 0);
CSimulatedAircraft newRemoteAircraft = m_pendingAddedAircrafts.front(); CSimulatedAircraft newRemoteAircraft = m_pendingToBeAddedAircraft.front();
QString callsign = newRemoteAircraft.getCallsign().toQString(); QString callsign = newRemoteAircraft.getCallsign().toQString();
CLogMessage(this).warning("XP: Adding aircraft timed out: %1. Trying again.") << callsign; CLogMessage(this).warning("XP: Adding aircraft timed out: %1. Trying again.") << callsign;
m_trafficProxy->removePlane(callsign); m_trafficProxy->removePlane(callsign);
CAircraftModel aircraftModel = newRemoteAircraft.getModel(); const CAircraftModel aircraftModel = newRemoteAircraft.getModel();
QString livery = aircraftModel.getLivery().getCombinedCode(); //! \todo livery resolution for XP const QString livery = aircraftModel.getLivery().getCombinedCode(); //! \todo livery resolution for XP
m_trafficProxy->addPlane(callsign, aircraftModel.getModelString(), m_trafficProxy->addPlane(callsign, aircraftModel.getModelString(),
newRemoteAircraft.getAircraftIcaoCode().getDesignator(), newRemoteAircraft.getAircraftIcaoCode().getDesignator(),
newRemoteAircraft.getAirlineIcaoCode().getDesignator(), newRemoteAircraft.getAirlineIcaoCode().getDesignator(),
@@ -880,7 +879,7 @@ namespace BlackSimPlugin
m_pendingAddedTimer.start(5000); m_pendingAddedTimer.start(5000);
} }
BlackCore::ISimulator *CSimulatorXPlaneFactory::create(const CSimulatorPluginInfo &info, ISimulator *CSimulatorXPlaneFactory::create(const CSimulatorPluginInfo &info,
IOwnAircraftProvider *ownAircraftProvider, IOwnAircraftProvider *ownAircraftProvider,
IRemoteAircraftProvider *remoteAircraftProvider, IRemoteAircraftProvider *remoteAircraftProvider,
IWeatherGridProvider *weatherGridProvider, IWeatherGridProvider *weatherGridProvider,

View File

@@ -75,7 +75,7 @@ namespace BlackSimPlugin
struct XPlaneData struct XPlaneData
{ {
QString aircraftModelPath; //!< Aircraft model path QString aircraftModelPath; //!< Aircraft model path
QString aircraftIcaoCode; //!< Aircraft model path QString aircraftIcaoCode; //!< Aircraft ICAO code
double latitude; //!< Longitude [deg] double latitude; //!< Longitude [deg]
double longitude; //!< Latitude [deg] double longitude; //!< Latitude [deg]
double altitude; //!< Altitude [m] double altitude; //!< Altitude [m]
@@ -142,23 +142,18 @@ namespace BlackSimPlugin
static QDBusConnection connectionFromString(const QString &str); static QDBusConnection connectionFromString(const QString &str);
protected: protected:
//! \copydoc BlackCore::ISimulator::isConnected //! \name ISimulator implementations
//! @{
virtual bool isConnected() const override; virtual bool isConnected() const override;
virtual bool physicallyAddRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &newRemoteAircraft) override;
//! \copydoc BlackCore::ISimulator::isPaused virtual bool physicallyRemoveRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
virtual int physicallyRemoveAllRemoteAircraft() override;
virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid) override;
virtual bool isPaused() const override virtual bool isPaused() const override
{ {
//! \todo XP: provide correct pause state //! \todo XP: provide correct pause state
return false; return false;
} }
virtual bool physicallyAddRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &newRemoteAircraft) override;
virtual bool physicallyRemoveRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
virtual int physicallyRemoveAllRemoteAircraft() override;
//! \name Base class overrides
//! @{
virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid) override;
//! @} //! @}
private: private:
@@ -186,10 +181,8 @@ namespace BlackSimPlugin
void remoteAircraftAddingFailed(const QString &callsign); void remoteAircraftAddingFailed(const QString &callsign);
void remoteAircraftAddingTimeout(); void remoteAircraftAddingTimeout();
static constexpr int GuessRemoteAircraftPartsCycle = 20; //!< guess every n-th cycle
// XSwiftBus interpolation // XSwiftBus interpolation
QDBusConnection m_conn { "default" }; QDBusConnection m_dBusConnection { "default" };
QDBusServiceWatcher *m_watcher { nullptr }; QDBusServiceWatcher *m_watcher { nullptr };
CXSwiftBusServiceProxy *m_serviceProxy { nullptr }; CXSwiftBusServiceProxy *m_serviceProxy { nullptr };
CXSwiftBusTrafficProxy *m_trafficProxy { nullptr }; CXSwiftBusTrafficProxy *m_trafficProxy { nullptr };
@@ -201,12 +194,13 @@ namespace BlackSimPlugin
BlackMisc::CData<BlackMisc::Simulation::Data::TModelSetCacheXP> m_modelSet { this }; BlackMisc::CData<BlackMisc::Simulation::Data::TModelSetCacheXP> m_modelSet { this };
// Driver Interpolation // Driver Interpolation
BlackMisc::Simulation::CSimulatedAircraftList m_pendingAddedAircrafts; BlackMisc::Simulation::CSimulatedAircraftList m_pendingToBeAddedAircraft;
CXPlaneMPAircraftObjects m_xplaneAircraftObjects; //!< XPlane multiplayer aircraft CXPlaneMPAircraftObjects m_xplaneAircraftObjects; //!< XPlane multiplayer aircraft
QTimer m_pendingAddedTimer; QTimer m_pendingAddedTimer;
XPlaneData m_xplaneData; XPlaneData m_xplaneData; //!< XPlane data
//! Reset the XPlane data
void resetXPlaneData() void resetXPlaneData()
{ {
m_xplaneData = { "", "", 0, 0, 0, 0, 0, 0, 0, false, 122800, 122800, 122800, 122800, 2000, 0, false, false, false, false, m_xplaneData = { "", "", 0, 0, 0, 0, 0, 0, 0, false, 122800, 122800, 122800, 122800, 2000, 0, false, false, false, false,