Make originators calling updateAircraftModel identifable

refs #765
This commit is contained in:
Roland Winklmeier
2016-09-09 21:48:57 +02:00
parent 004ca4f0ca
commit 40d4c7774d
16 changed files with 46 additions and 27 deletions

View File

@@ -65,6 +65,7 @@ namespace BlackCore
CAirspaceMonitor::CAirspaceMonitor(BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, INetwork *network, QObject *parent)
: QObject(parent),
COwnAircraftAware(ownAircraftProvider),
CIdentifiable(this),
m_network(network),
m_analyzer(new CAirspaceAnalyzer(ownAircraftProvider, this, network, this))
{
@@ -214,8 +215,9 @@ namespace BlackCore
return c > 0;
}
bool CAirspaceMonitor::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model)
bool CAirspaceMonitor::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
{
if (CIdentifiable::isMyIdentifier(originator)) { return false; }
const CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexModel, CVariant::from(model));
const int c = this->updateAircraftInRange(callsign, vm);
return c > 0;
@@ -923,7 +925,9 @@ namespace BlackCore
{
CAircraftModel model = CAircraftMatcher::reverselLookupModel(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log);
model.updateMissingParts(aircraft.getModel());
this->updateAircraftModel(callsign, model);
// Use anonymous as originator here, since the remote aircraft provider is ourselves and the call to updateAircraftModel() would
// return without doing anything.
this->updateAircraftModel(callsign, model, CIdentifier::anonymous());
}
else
{

View File

@@ -33,6 +33,7 @@
#include "blackmisc/aviation/callsignset.h"
#include "blackmisc/aviation/flightplan.h"
#include "blackmisc/geo/coordinategeodetic.h"
#include "blackmisc/identifiable.h"
#include "blackmisc/identifier.h"
#include "blackmisc/network/clientlist.h"
#include "blackmisc/network/userlist.h"
@@ -68,7 +69,8 @@ namespace BlackCore
class BLACKCORE_EXPORT CAirspaceMonitor :
public QObject,
public BlackMisc::Simulation::IRemoteAircraftProvider, // those data will be provided from the class CAirspaceMonitor
public BlackMisc::Simulation::COwnAircraftAware // used to obtain in memory information about own aircraft
public BlackMisc::Simulation::COwnAircraftAware, // used to obtain in memory information about own aircraft
public BlackMisc::CIdentifiable
{
Q_OBJECT
Q_INTERFACES(BlackMisc::Simulation::IRemoteAircraftProvider)
@@ -94,7 +96,7 @@ namespace BlackCore
virtual bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const override;
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) override;
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model) override;
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override;
virtual bool updateFastPositionEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enableFastPositonUpdates) override;
virtual bool updateAircraftRendered(const BlackMisc::Aviation::CCallsign &callsign, bool rendered) override;
virtual void updateMarkAllAsNotRendered() override;

View File

@@ -26,6 +26,7 @@
#include "blackmisc/aviation/atcstationlist.h"
#include "blackmisc/aviation/callsignset.h"
#include "blackmisc/aviation/flightplan.h"
#include "blackmisc/identifiable.h"
#include "blackmisc/identifier.h"
#include "blackmisc/network/clientlist.h"
#include "blackmisc/network/server.h"
@@ -126,7 +127,7 @@ namespace BlackCore
//! Aircraft model was changed
//! \details All remote aircraft are stored in the network context. The model can be updated here
//! via \sa updateAircraftModel and then this signal is fired
void changedRemoteAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
void changedRemoteAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const BlackMisc::CIdentifier &originator);
//! Aircraft enabled / disabled
//! \details All remote aircraft are stored in the network context. The aircraft can be enabled (for rendering) here
@@ -257,7 +258,7 @@ namespace BlackCore
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) = 0;
//! Change model string
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model) = 0;
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) = 0;
//! Change fast position updates
virtual bool updateFastPositionEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enableFastPositionSending) = 0;

View File

@@ -262,10 +262,11 @@ namespace BlackCore
}
//! \copydoc IContextNetwork::updateAircraftModel
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model) override
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override
{
Q_UNUSED(callsign);
Q_UNUSED(model);
Q_UNUSED(originator);
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}

View File

@@ -562,14 +562,14 @@ namespace BlackCore
return c;
}
bool CContextNetwork::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model)
bool CContextNetwork::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
{
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << model; }
bool c = this->m_airspace->updateAircraftModel(callsign, model);
bool c = this->m_airspace->updateAircraftModel(callsign, model, originator);
if (c)
{
CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign));
emit this->changedRemoteAircraftModel(aircraft);
emit this->changedRemoteAircraftModel(aircraft, originator);
}
return c;
}

View File

@@ -136,7 +136,7 @@ namespace BlackCore
//! \copydoc IContextNetwork::updateAircraftModel
//! \ingroup remoteaircraftprovider
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model) override;
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override;
//! \copydoc IContextNetwork::updateFastPositionEnabled
//! \ingroup remoteaircraftprovider

View File

@@ -190,9 +190,9 @@ namespace BlackCore
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateAircraftEnabled"), callsign, enabledForRedering);
}
bool CContextNetworkProxy::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model)
bool CContextNetworkProxy::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateAircraftModel"), callsign, model);
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateAircraftModel"), callsign, model, originator);
}
bool CContextNetworkProxy::updateFastPositionEnabled(const CCallsign &callsign, bool enableFastPositionSending)

View File

@@ -158,7 +158,7 @@ namespace BlackCore
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) override;
//! \copydoc IContextNetwork::updateAircraftModel
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model) override;
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override;
//! \copydoc IContextNetwork::updateFastPositionEnabled
virtual bool updateFastPositionEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enableFastPositionSending) override;

View File

@@ -47,6 +47,7 @@ namespace BlackCore
{
CContextSimulator::CContextSimulator(CCoreFacadeConfig::ContextMode mode, CCoreFacade *runtime) :
IContextSimulator(mode, runtime),
CIdentifiable(this),
m_plugins(new CPluginManagerSimulator(this))
{
this->setObjectName("CContextSimulator");
@@ -526,8 +527,9 @@ namespace BlackCore
getIContextOwnAircraft()->changedAircraftCockpit(ownAircraft, IContextSimulator::InterfaceName());
}
void CContextSimulator::ps_changedRemoteAircraftModel(const CSimulatedAircraft &aircraft)
void CContextSimulator::ps_changedRemoteAircraftModel(const CSimulatedAircraft &aircraft, const BlackMisc::CIdentifier &originator)
{
if (CIdentifiable::isMyIdentifier(originator)) { return; }
if (!isSimulatorSimulating()) { return; }
m_simulatorPlugin.second->changeRemoteAircraftModel(aircraft);
}

View File

@@ -50,7 +50,9 @@ namespace BlackCore
namespace Context
{
//! Network simulator concrete implementation
class BLACKCORE_EXPORT CContextSimulator : public IContextSimulator
class BLACKCORE_EXPORT CContextSimulator :
public IContextSimulator,
public BlackMisc::CIdentifiable
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", BLACKCORE_CONTEXTSIMULATOR_INTERFACENAME)
@@ -173,7 +175,7 @@ namespace BlackCore
void ps_cockpitChangedFromSimulator(const BlackMisc::Simulation::CSimulatedAircraft &ownAircraft);
//! Changed remote aircraft model
void ps_changedRemoteAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
void ps_changedRemoteAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const BlackMisc::CIdentifier &originator);
//! Enable / disable aircraft
void ps_changedRemoteAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);

View File

@@ -58,6 +58,7 @@ namespace BlackGui
{
CMappingComponent::CMappingComponent(QWidget *parent) :
QFrame(parent),
CIdentifiable(this),
ui(new Ui::CMappingComponent),
m_updateTimer(new CUpdateTimer("CMappingComponent", &CMappingComponent::ps_backgroundUpdate, this))
{
@@ -273,7 +274,7 @@ namespace BlackGui
CAircraftModel model(models.front());
model.setModelType(CAircraftModel::TypeManuallySet);
CLogMessage(this).info("Requesting changes for %1") << callsign.asString();
sGui->getIContextNetwork()->updateAircraftModel(aircraftFromBackend.getCallsign(), model);
sGui->getIContextNetwork()->updateAircraftModel(aircraftFromBackend.getCallsign(), model, identifier());
changed = true;
}
if (aircraftFromBackend.isEnabled() != enabled)
@@ -324,8 +325,9 @@ namespace BlackGui
ui->le_AircraftModel->setCompleter(this->m_modelCompleter);
}
void CMappingComponent::ps_onRemoteAircraftModelChanged(const CSimulatedAircraft &aircraft)
void CMappingComponent::ps_onRemoteAircraftModelChanged(const CSimulatedAircraft &aircraft, const CIdentifier &originator)
{
if (CIdentifiable::isMyIdentifier(originator)) { return; }
this->updateSimulatedAircraftView();
Q_UNUSED(aircraft);
}

View File

@@ -15,6 +15,7 @@
#include "blackcore/network.h"
#include "blackgui/blackguiexport.h"
#include "blackgui/components/enablefordockwidgetinfoarea.h"
#include "blackmisc/identifiable.h"
#include "blackmisc/identifier.h"
#include "blackmisc/propertyindex.h"
#include "blackmisc/simulation/aircraftmodellist.h"
@@ -48,7 +49,8 @@ namespace BlackGui
//! Mappings, models etc.
class BLACKGUI_EXPORT CMappingComponent :
public QFrame,
public CEnableForDockWidgetInfoArea
public CEnableForDockWidgetInfoArea,
public BlackMisc::CIdentifiable
{
Q_OBJECT
@@ -105,7 +107,7 @@ namespace BlackGui
void ps_onModelsUpdateRequested();
//! Rendered aircraft changed in backend
void ps_onRemoteAircraftModelChanged(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
void ps_onRemoteAircraftModelChanged(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const BlackMisc::CIdentifier &originator);
//! Aircraft enabled, disabled in backend
void ps_onChangedAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);

View File

@@ -76,10 +76,10 @@ namespace BlackMisc
return this->m_remoteAircraftProvider->remoteAircraftSituationsCount(callsign);
}
bool CRemoteAircraftAware::updateAircraftModel(const Aviation::CCallsign &callsign, const CAircraftModel &model)
bool CRemoteAircraftAware::updateAircraftModel(const Aviation::CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
{
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
return this->m_remoteAircraftProvider->updateAircraftModel(callsign, model);
return this->m_remoteAircraftProvider->updateAircraftModel(callsign, model, originator);
}
bool CRemoteAircraftAware::updateAircraftRendered(const CCallsign &callsign, bool rendered)

View File

@@ -114,7 +114,7 @@ namespace BlackMisc
//! Change model string
//! \threadsafe
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model) = 0;
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) = 0;
//! Change fast position updates
//! \threadsafe
@@ -188,7 +188,7 @@ namespace BlackMisc
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering);
//! \copydoc IRemoteAircraftProvider::updateAircraftModel
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model);
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator);
//! \copydoc IRemoteAircraftProvider::updateAircraftRendered
virtual bool updateAircraftRendered(const BlackMisc::Aviation::CCallsign &callsign, bool rendered);

View File

@@ -19,6 +19,7 @@
#include <QHash>
using namespace BlackMisc::Aviation;
namespace BlackMisc
{
namespace Simulation
@@ -108,8 +109,9 @@ namespace BlackMisc
return n > 0;
}
bool CRemoteAircraftProviderDummy::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model)
bool CRemoteAircraftProviderDummy::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
{
Q_UNUSED(originator);
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexModel, CVariant::from(model));
int n = this->m_aircraft.applyIfCallsign(callsign, vm);
return n > 0;

View File

@@ -16,6 +16,7 @@
#include "blackmisc/aviation/aircraftsituationlist.h"
#include "blackmisc/aviation/callsignset.h"
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/identifiable.h"
#include "blackmisc/identifier.h"
#include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/airspaceaircraftsnapshot.h"
@@ -98,7 +99,7 @@ namespace BlackMisc
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override;
//! \copydoc IRemoteAircraftProvider::updateAircraftModel
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model) override;
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override;
//! \copydoc IRemoteAircraftProvider::updateFastPositionEnabled
virtual bool updateFastPositionEnabled(const Aviation::CCallsign &callsign, bool enableFastPositionUpdates) override;