Ref T261, Ref T251 gnd flag support in context/client provider

* allow to set gnd.flag capability via context/client
* utility functions in client provider
This commit is contained in:
Klaus Basan
2018-05-17 23:54:39 +02:00
parent 06a4efba51
commit e3465f432c
9 changed files with 72 additions and 8 deletions

View File

@@ -140,6 +140,9 @@ namespace BlackCore
//! Aircraft enabled / disabled
void changedFastPositionUpdates(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Changed gnd. flag capability
void changedGndFlagCapability(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Connection status changed for online station
void changedAtcStationOnlineConnectionStatus(const BlackMisc::Aviation::CAtcStation &atcStation, bool connected);
@@ -261,7 +264,10 @@ namespace BlackCore
virtual void requestAtisUpdates() = 0;
//! Enable/disable rendering
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) = 0;
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) = 0;
//! Enable/disable support of gnd. flag
virtual bool updateAircraftSupportingGndFLag(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) = 0;
//! Change model
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) = 0;

View File

@@ -299,10 +299,19 @@ namespace BlackCore
}
//! \copydoc IContextNetwork::updateAircraftEnabled
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) override
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override
{
Q_UNUSED(callsign);
Q_UNUSED(enabledForRedering);
Q_UNUSED(enabledForRendering);
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
//! \copydoc IContextNetwork::updateAircraftSupportingGndFLag
virtual bool updateAircraftSupportingGndFLag(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) override
{
Q_UNUSED(callsign);
Q_UNUSED(supportGndFlag);
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}

View File

@@ -422,6 +422,11 @@ namespace BlackCore
return m_airspace->addClientGndCapability(callsign);
}
bool CContextNetwork::setClientGndCapability(const Aviation::CCallsign &callsign, bool supportGndFlag)
{
return m_airspace->setClientGndCapability(callsign, supportGndFlag);
}
CServerList CContextNetwork::getVatsimFsdServers() const
{
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing data reader");
@@ -700,7 +705,7 @@ namespace BlackCore
{
Q_ASSERT(m_airspace);
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << enabledForRendering; }
bool c = m_airspace->updateAircraftEnabled(callsign, enabledForRendering);
const bool c = m_airspace->updateAircraftEnabled(callsign, enabledForRendering);
if (c)
{
CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign));
@@ -742,13 +747,26 @@ namespace BlackCore
const bool c = m_airspace->updateFastPositionEnabled(callsign, enableFastPositonUpdates);
if (c)
{
CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign));
const CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign));
CLogMessage(this).info("Callsign %1 sets fast positions ") << aircraft.getCallsign() << BlackMisc::boolToOnOff(aircraft.fastPositionUpdates());
emit this->changedFastPositionUpdates(aircraft);
}
return c;
}
bool CContextNetwork::updateAircraftSupportingGndFLag(const CCallsign &callsign, bool supportGndFlag)
{
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << supportGndFlag; }
const bool c = m_airspace->setClientGndCapability(callsign, supportGndFlag);
if (c)
{
const CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign));
CLogMessage(this).info("Callsign %1 set gnd.capability ") << aircraft.getCallsign() << BlackMisc::boolToOnOff(aircraft.fastPositionUpdates());
emit this->changedGndFlagCapability(aircraft);
}
return c;
}
bool CContextNetwork::updateCG(const Aviation::CCallsign &callsign, const CLength &cg)
{
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << cg.valueRoundedWithUnit(1); }

View File

@@ -121,6 +121,7 @@ namespace BlackCore
virtual int removeClient(const BlackMisc::Aviation::CCallsign &callsign) override;
virtual bool autoAdjustCientGndCapability(const BlackMisc::Aviation::CAircraftSituation &situation) override;
virtual bool addClientGndCapability(const BlackMisc::Aviation::CCallsign &callsign) override;
virtual bool setClientGndCapability(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) override;
//! @}
public slots:
@@ -131,6 +132,7 @@ namespace BlackCore
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override;
virtual bool updateAircraftNetworkModel(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 updateAircraftSupportingGndFLag(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) override;
virtual bool updateCG(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CLength &cg) override;
virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override;
virtual BlackMisc::Aviation::CCallsignSet getAircraftInRangeCallsigns() const override;

View File

@@ -87,6 +87,9 @@ namespace BlackCore
s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(),
"changedFastPositionUpdates", this, SIGNAL(changedFastPositionUpdates(BlackMisc::Simulation::CSimulatedAircraft)));
Q_ASSERT(s);
s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(),
"changedGndFlagCapability", this, SIGNAL(changedGndFlagCapability(BlackMisc::Simulation::CSimulatedAircraft)));
Q_ASSERT(s);
s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(),
"addedAircraft", this, SIGNAL(addedAircraft(BlackMisc::Simulation::CSimulatedAircraft)));
Q_ASSERT(s);
@@ -225,6 +228,11 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<bool>(QLatin1String("updateFastPositionEnabled"), callsign, enableFastPositionSending);
}
bool CContextNetworkProxy::updateAircraftSupportingGndFLag(const CCallsign &callsign, bool supportGndFlag)
{
return m_dBusInterface->callDBusRet<bool>(QLatin1String("updateAircraftSupportingGndFLag"), callsign, supportGndFlag);
}
void CContextNetworkProxy::setFastPositionEnabledCallsigns(CCallsignSet &callsigns)
{
m_dBusInterface->callDBus(QLatin1String("setFastPositionEnabledCallsigns"), callsigns);

View File

@@ -109,6 +109,7 @@ namespace BlackCore
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override;
virtual bool updateAircraftNetworkModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::CIdentifier &originator) override;
virtual bool updateFastPositionEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enableFastPositionSending) override;
virtual bool updateAircraftSupportingGndFLag(const BlackMisc::Aviation::CCallsign &callsign, bool supportGndFlag) override;
virtual void setFastPositionEnabledCallsigns(BlackMisc::Aviation::CCallsignSet &callsigns) override;
virtual BlackMisc::Aviation::CCallsignSet getFastPositionEnabledCallsigns() const override;
virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;

View File

@@ -14,6 +14,7 @@
#include "blackcore/context/contextsimulator.h"
#include "blackcore/application/applicationsettings.h"
#include "blackcore/simulator.h"
#include "blackcore/corefacadeconfig.h"
#include "blackcore/aircraftmatcher.h"
#include "blackcore/blackcoreexport.h"
@@ -130,6 +131,9 @@ namespace BlackCore
//! Access to simulator (i.e. the plugin)
ISimulator *simulator() const;
//! Simulator available?
bool hasSimulator() const { return this->simulator(); }
//! Register dot commands
static void registerHelp()
{

View File

@@ -100,14 +100,25 @@ namespace BlackMisc
}
bool CClientProvider::addClientGndCapability(const CCallsign &callsign)
{
return this->setClientGndCapability(callsign, true);
}
bool CClientProvider::setClientGndCapability(const CCallsign &callsign, bool supportGndFlag)
{
CClient client = this->getClientOrDefaultForCallsign(callsign);
// need to change?
if (!client.isValid()) { return false; } // no client
if (client.hasGndFlagCapability()) { return true; } // already set, but set
client.addCapability(CClient::FsdWithGroundFlag);
if (client.hasGndFlagCapability() == supportGndFlag) { return true; } // already set, but set
if (supportGndFlag)
{
client.addCapability(CClient::FsdWithGroundFlag);
}
else
{
client.removeCapability(CClient::FsdWithGroundFlag);
}
QWriteLocker l(&m_lockClient);
m_clients.replaceOrAddObjectByCallsign(client);
return true;

View File

@@ -73,6 +73,10 @@ namespace BlackMisc
//! Add gnd.flag capability
//! \threadsafe
virtual bool addClientGndCapability(const Aviation::CCallsign &callsign) = 0;
//! Set gnd.flag capability
//! \threadsafe
virtual bool setClientGndCapability(const Aviation::CCallsign &callsign, bool supportGndFlag) = 0;
};
//! Direct in memory access to client (network client) data
@@ -93,6 +97,7 @@ namespace BlackMisc
virtual int removeClient(const Aviation::CCallsign &callsign) override;
virtual bool autoAdjustCientGndCapability(const Aviation::CAircraftSituation &situation) override;
virtual bool addClientGndCapability(const Aviation::CCallsign &callsign) override;
virtual bool setClientGndCapability(const Aviation::CCallsign &callsign, bool supportGndFlag) override;
//! @}
private: