Ref T786, simulator context

* use identifier based "requestWeatherGrid"
* injectWeatherGrid now public
* clean m_lastWeatherPosition if weather is de-activated
* inject weather CContextSimulator::onWeatherGridReceived

1) this automatically injects the weather, the callback is not needed
2) the callback was the part which crashed
This commit is contained in:
Klaus Basan
2020-04-19 02:34:15 +02:00
committed by Mat Sutcliffe
parent e7875c3af8
commit 58583d3ffa
8 changed files with 69 additions and 51 deletions

View File

@@ -314,7 +314,7 @@ namespace BlackCore
virtual void setWeatherActivated(bool activated) = 0;
//! Request weather grid. Argument identifier is past in the signal to identify the requestor
virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) = 0;
virtual void requestWeatherGrid(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::CIdentifier &identifier) = 0;
//! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevationBySituation
virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) = 0;

View File

@@ -55,8 +55,8 @@ namespace BlackCore
//! \copydoc IContextSimulator::setSimulatorSettings
virtual bool setSimulatorSettings(const BlackMisc::Simulation::Settings::CSimulatorSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulatorInfo) override
{
Q_UNUSED(settings);
Q_UNUSED(simulatorInfo);
Q_UNUSED(settings)
Q_UNUSED(simulatorInfo)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -64,7 +64,7 @@ namespace BlackCore
//! \copydoc IContextSimulator::startSimulatorPlugin
virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override
{
Q_UNUSED(simulatorInfo);
Q_UNUSED(simulatorInfo)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -85,14 +85,14 @@ namespace BlackCore
//! \copydoc IContextSimulator::stopSimulatorPlugin
virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override
{
Q_UNUSED(simulatorInfo);
Q_UNUSED(simulatorInfo)
logEmptyContextWarning(Q_FUNC_INFO);
}
//! \copydoc IContextSimulator::getAirportsInRange
virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculatePosition) const override
{
Q_UNUSED(recalculatePosition);
Q_UNUSED(recalculatePosition)
logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Aviation::CAirportList();
}
@@ -224,8 +224,8 @@ namespace BlackCore
//! \copydoc IContextSimulator::setTimeSynchronization
virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override
{
Q_UNUSED(enable);
Q_UNUSED(offset);
Q_UNUSED(enable)
Q_UNUSED(offset)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -254,7 +254,7 @@ namespace BlackCore
//! \copydoc ISimulator::getInterpolationSetupPerCallsignOrDefault
virtual BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign getInterpolationAndRenderingSetupPerCallsignOrDefault(const BlackMisc::Aviation::CCallsign &callsign) const override
{
Q_UNUSED(callsign);
Q_UNUSED(callsign)
logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign();
}
@@ -262,15 +262,15 @@ namespace BlackCore
//! \copydoc BlackMisc::Simulation::IInterpolationSetupProvider::setInterpolationSetupGlobal
virtual void setInterpolationAndRenderingSetupGlobal(const BlackMisc::Simulation::CInterpolationAndRenderingSetupGlobal &setup) override
{
Q_UNUSED(setup);
Q_UNUSED(setup)
logEmptyContextWarning(Q_FUNC_INFO);
}
//! \copydoc BlackMisc::Simulation::IInterpolationSetupProvider::setInterpolationSetupsPerCallsign
virtual bool setInterpolationAndRenderingSetupsPerCallsign(const BlackMisc::Simulation::CInterpolationSetupList &setups, bool ignoreSameAsGlobal) override
{
Q_UNUSED(setups);
Q_UNUSED(ignoreSameAsGlobal);
Q_UNUSED(setups)
Q_UNUSED(ignoreSameAsGlobal)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -278,7 +278,7 @@ namespace BlackCore
//! \copydoc IContextSimulator::getInterpolationMessages
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override
{
Q_UNUSED(callsign);
Q_UNUSED(callsign)
logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::CStatusMessageList();
}
@@ -293,7 +293,7 @@ namespace BlackCore
//! \copydoc IContextSimulator::iconForModel
virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const override
{
Q_UNUSED(modelString);
Q_UNUSED(modelString)
logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::CPixmap();
}
@@ -301,16 +301,16 @@ namespace BlackCore
//! \copydoc IContextSimulator::highlightAircraft
virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) override
{
Q_UNUSED(aircraftToHighlight);
Q_UNUSED(enableHighlight);
Q_UNUSED(displayTime);
Q_UNUSED(aircraftToHighlight)
Q_UNUSED(enableHighlight)
Q_UNUSED(displayTime)
logEmptyContextWarning(Q_FUNC_INFO);
}
//! \copydoc IContextSimulator::followAircraft
virtual bool followAircraft(const BlackMisc::Aviation::CCallsign &callsign) override
{
Q_UNUSED(callsign);
Q_UNUSED(callsign)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -324,7 +324,7 @@ namespace BlackCore
//! \copydoc IContextSimulator::resetToModelMatchingAircraft
virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override
{
Q_UNUSED(callsign);
Q_UNUSED(callsign)
return false;
}
@@ -338,7 +338,7 @@ namespace BlackCore
//! \copydoc IContextSimulator::doMatchingAgain
virtual bool doMatchingAgain(const BlackMisc::Aviation::CCallsign &callsign) override
{
Q_UNUSED(callsign);
Q_UNUSED(callsign)
return false;
}
@@ -352,22 +352,22 @@ namespace BlackCore
//! \copydoc IContextSimulator::setWeatherActivated
virtual void setWeatherActivated(bool activated) override
{
Q_UNUSED(activated);
Q_UNUSED(activated)
logEmptyContextWarning(Q_FUNC_INFO);
}
//! \copydoc IContextSimulator::requestWeatherGrid
virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override
virtual void requestWeatherGrid(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::CIdentifier &identifier) override
{
Q_UNUSED(weatherGrid);
Q_UNUSED(identifier);
Q_UNUSED(position)
Q_UNUSED(identifier)
logEmptyContextWarning(Q_FUNC_INFO);
}
//! \copydoc IContextSimulator::requestWeatherGrid
virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override
{
Q_UNUSED(situation);
Q_UNUSED(situation)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -375,8 +375,8 @@ namespace BlackCore
//! \copydoc IContextSimulator::findClosestElevationWithinRange
virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override
{
Q_UNUSED(reference);
Q_UNUSED(range);
Q_UNUSED(reference)
Q_UNUSED(range)
logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Geo::CElevationPlane::null();
}
@@ -392,7 +392,7 @@ namespace BlackCore
//! \copydoc IContextSimulator::enableMatchingMessages
virtual void enableMatchingMessages(BlackMisc::Simulation::MatchingLog enable) override
{
Q_UNUSED(enable);
Q_UNUSED(enable)
logEmptyContextWarning(Q_FUNC_INFO);
}
@@ -406,8 +406,8 @@ namespace BlackCore
//! \copydoc IContextSimulator::parseCommandLine
virtual bool parseCommandLine(const QString &commandLine, const BlackMisc::CIdentifier &originator) override
{
Q_UNUSED(commandLine);
Q_UNUSED(originator);
Q_UNUSED(commandLine)
Q_UNUSED(originator)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -415,7 +415,7 @@ namespace BlackCore
//! \copydoc IContextSimulator::getCurrentMatchingStatistics
virtual BlackMisc::Simulation::CMatchingStatistics getCurrentMatchingStatistics(bool missingOnly) const override
{
Q_UNUSED(missingOnly);
Q_UNUSED(missingOnly)
logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Simulation::CMatchingStatistics();
}
@@ -423,15 +423,15 @@ namespace BlackCore
//! \copydoc IContextSimulator::setMatchingSetup
virtual void setMatchingSetup(const BlackMisc::Simulation::CAircraftMatcherSetup &setup) override
{
Q_UNUSED(setup);
Q_UNUSED(setup)
logEmptyContextWarning(Q_FUNC_INFO);
}
//! \copydoc IContextSimulator::testRemoteAircraft
virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) override
{
Q_UNUSED(aircraft);
Q_UNUSED(add);
Q_UNUSED(aircraft)
Q_UNUSED(add)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -439,9 +439,9 @@ namespace BlackCore
//! \copydoc IContextSimulator::testUpdateRemoteAircraft
virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override
{
Q_UNUSED(cs);
Q_UNUSED(situation);
Q_UNUSED(parts);
Q_UNUSED(cs)
Q_UNUSED(situation)
Q_UNUSED(parts)
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
@@ -456,7 +456,7 @@ namespace BlackCore
//! \copydoc IContextSimulator::copyFsxTerrainProbe
virtual BlackMisc::CStatusMessageList copyFsxTerrainProbe(const BlackMisc::Simulation::CSimulatorInfo &simulator) override
{
Q_UNUSED(simulator);
Q_UNUSED(simulator)
return BlackMisc::CStatusMessageList();
}

View File

@@ -77,7 +77,8 @@ namespace BlackCore
m_plugins->collectPlugins();
this->restoreSimulatorPlugins();
connect(&m_weatherManager, &CWeatherManager::weatherGridReceived, this, &CContextSimulator::weatherGridReceived, Qt::QueuedConnection);
connect(&m_weatherManager, &CWeatherManager::weatherGridReceived, this, &CContextSimulator::weatherGridReceived, Qt::QueuedConnection);
connect(&m_weatherManager, &CWeatherManager::weatherGridReceived, this, &CContextSimulator::onWeatherGridReceived, Qt::QueuedConnection);
connect(&m_aircraftMatcher, &CAircraftMatcher::setupChanged, this, &CContextSimulator::matchingSetupChanged);
connect(&CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance(), &CCentralMultiSimulatorModelSetCachesProvider::cacheChanged, this, &CContextSimulator::modelSetChanged);
@@ -870,6 +871,16 @@ namespace BlackCore
emit this->addingRemoteModelFailed(remoteAircraft, disabled, failover, message);
}
void CContextSimulator::onWeatherGridReceived(const CWeatherGrid &weatherGrid, const CIdentifier &identifier)
{
if (!this->isSimulatorPluginAvailable()) { return; }
if (!m_simulatorPlugin.second) { return; }
if (m_simulatorPlugin.second->identifier() == identifier)
{
m_simulatorPlugin.second->injectWeatherGrid(weatherGrid);
}
}
void CContextSimulator::xCtxUpdateSimulatorCockpitFromContext(const CSimulatedAircraft &ownAircraft, const CIdentifier &originator)
{
if (!this->isSimulatorAvailable()) { return; }
@@ -1141,10 +1152,10 @@ namespace BlackCore
m_simulatorPlugin.second->setWeatherActivated(activated);
}
void CContextSimulator::requestWeatherGrid(const CWeatherGrid &weatherGrid, const CIdentifier &identifier)
void CContextSimulator::requestWeatherGrid(const CCoordinateGeodetic &position, const CIdentifier &identifier)
{
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << identifier; }
m_weatherManager.requestWeatherGrid(weatherGrid, identifier);
m_weatherManager.requestWeatherGrid(position, identifier);
}
bool CContextSimulator::requestElevationBySituation(const CAircraftSituation &situation)
@@ -1240,7 +1251,7 @@ namespace BlackCore
{
const bool s = QMetaObject::invokeMethod(listener, &ISimulatorListener::stop);
Q_ASSERT_X(s, Q_FUNC_INFO, "Cannot invoke stop");
Q_UNUSED(s);
Q_UNUSED(s)
}
}
}

View File

@@ -117,7 +117,7 @@ namespace BlackCore
virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
virtual bool isWeatherActivated() const override;
virtual void setWeatherActivated(bool activated) override;
virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override;
virtual void requestWeatherGrid(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::CIdentifier &identifier) override;
virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override;
virtual int doMatchingsAgain() override;
@@ -236,6 +236,9 @@ namespace BlackCore
//! Failed adding remote aircraft
void onAddingRemoteAircraftFailed(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, bool disabled, bool requestFailover, const BlackMisc::CStatusMessage &message);
//! Weather request was received
void onWeatherGridReceived(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier);
//! Relay status message to simulator under consideration of settings
void relayStatusMessageToSimulator(const BlackMisc::CStatusMessage &message);

View File

@@ -42,7 +42,7 @@ namespace BlackCore
// connect signals, asserts when failures
QDBusConnection con = QDBusConnection::sessionBus();
CContextSimulatorProxy c(CDBusServer::coreServiceName(), con, CCoreFacadeConfig::Remote, nullptr);
Q_UNUSED(c);
Q_UNUSED(c)
}
void CContextSimulatorProxy::relaySignals(const QString &serviceName, QDBusConnection &connection)
@@ -104,7 +104,7 @@ namespace BlackCore
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
"validatedModelSet", this, SIGNAL(validatedModelSet(BlackMisc::Simulation::CSimulatorInfo, BlackMisc::Simulation::CAircraftModelList, BlackMisc::Simulation::CAircraftModelList, bool, BlackMisc::CStatusMessageList)));
Q_ASSERT(s);
Q_UNUSED(s);
Q_UNUSED(s)
this->relayBaseClassSignals(serviceName, connection, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName());
}
@@ -318,9 +318,9 @@ namespace BlackCore
m_dBusInterface->callDBus(QLatin1String("setWeatherActivated"), activated);
}
void CContextSimulatorProxy::requestWeatherGrid(const Weather::CWeatherGrid &weatherGrid, const CIdentifier &identifier)
void CContextSimulatorProxy::requestWeatherGrid(const CCoordinateGeodetic &position, const CIdentifier &identifier)
{
m_dBusInterface->callDBus(QLatin1String("requestWeatherGrid"), weatherGrid, identifier);
m_dBusInterface->callDBus(QLatin1String("requestWeatherGrid"), position, identifier);
}
bool CContextSimulatorProxy::requestElevationBySituation(const CAircraftSituation &situation)

View File

@@ -100,7 +100,7 @@ namespace BlackCore
virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
virtual bool isWeatherActivated() const override;
virtual void setWeatherActivated(bool activated) override;
virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override;
virtual void requestWeatherGrid(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::CIdentifier &identifier) override;
virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override;
virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;

View File

@@ -148,6 +148,10 @@ namespace BlackCore
this->injectWeatherGrid(CWeatherGrid::getByScenario(selectedWeatherScenario));
}
}
else
{
m_lastWeatherPosition = {}; // clean up so next time we fetch weather again
}
}
void ISimulator::setFlightNetworkConnected(bool connected)

View File

@@ -270,6 +270,9 @@ namespace BlackCore
//! \remark public for testing purposes
virtual void callbackReceivedRequestedElevation(const BlackMisc::Geo::CElevationPlane &plane, const BlackMisc::Aviation::CCallsign &callsign, bool isWater);
//! Inject weather grid to simulator
virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid);
//! Allows to print out simulator specific statistics
virtual QString getStatisticsSimulatorSpecific() const { return QString(); }
@@ -524,9 +527,6 @@ namespace BlackCore
//! Kill timer if id is valid
void safeKillTimer();
//! Inject weather grid to simulator
virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid);
//! Blink the highlighted aircraft
void blinkHighlightedAircraft();