Ref T261, correct implementation of client provider

* made the interface a "real" interface and provided implementation as CCLientProvider
* aligned some function names with networl context
* network context "impl" also implements ICLientProvider
This commit is contained in:
Klaus Basan
2018-05-04 22:13:02 +02:00
committed by Roland Winklmeier
parent 3031e5b648
commit 5bf21c2937
19 changed files with 185 additions and 65 deletions

View File

@@ -312,7 +312,7 @@ namespace BlackCore
void CAirspaceMonitor::testAddAircraftParts(const CCallsign &callsign, const CAircraftParts &parts, bool incremental) void CAirspaceMonitor::testAddAircraftParts(const CCallsign &callsign, const CAircraftParts &parts, bool incremental)
{ {
this->onAircraftConfigReceived(callsign, this->onAircraftConfigReceived(callsign,
incremental ? parts.toIncrementalJson() : parts.toJson(), incremental ? parts.toIncrementalJson() : parts.toFullJson(),
5000); 5000);
} }
@@ -911,8 +911,7 @@ namespace BlackCore
CClient client = this->getClientOrDefaultForCallsign(callsign); CClient client = this->getClientOrDefaultForCallsign(callsign);
if (client.hasCapability(CClient::FsdWithAircraftConfig)) { return; } if (client.hasCapability(CClient::FsdWithAircraftConfig)) { return; }
client.addCapability(CClient::FsdWithAircraftConfig); client.addCapability(CClient::FsdWithAircraftConfig);
const int caps = client.getCapabilities(); this->setOtherClient(client);
this->updateOrAddClient(callsign, CPropertyIndexVariantMap(CClient::IndexCapabilities, CVariant::from(caps)));
} }
void CAirspaceMonitor::storeAircraftSituation(const CAircraftSituation &situation) void CAirspaceMonitor::storeAircraftSituation(const CAircraftSituation &situation)

View File

@@ -56,8 +56,8 @@ namespace BlackCore
class BLACKCORE_EXPORT CAirspaceMonitor : class BLACKCORE_EXPORT CAirspaceMonitor :
public BlackMisc::Simulation::CRemoteAircraftProvider, // those data will be provided from the class CAirspaceMonitor public BlackMisc::Simulation::CRemoteAircraftProvider, // 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::Simulation::CSimulationEnvironmentAware, // elevation info etc. public BlackMisc::Simulation::CSimulationEnvironmentAware, // elevation info etc. from simulator
public BlackMisc::Network::IClientProvider // those data will be provided from the class CAirspaceMonitor public BlackMisc::Network::CClientProvider // those data will be provided from the class CAirspaceMonitor
{ {
Q_OBJECT Q_OBJECT
Q_INTERFACES(BlackMisc::Network::IClientProvider) Q_INTERFACES(BlackMisc::Network::IClientProvider)

View File

@@ -205,10 +205,13 @@ namespace BlackCore
virtual BlackMisc::Network::CUser getUserForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const = 0; virtual BlackMisc::Network::CUser getUserForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
//! Information about other clients //! Information about other clients
virtual BlackMisc::Network::CClientList getOtherClients() const = 0; virtual BlackMisc::Network::CClientList getClients() const = 0;
//! Clients for given callsign, e.g. to test/fetch direct aircraft model //! Clients for given callsign, e.g. to test/fetch direct aircraft model
virtual BlackMisc::Network::CClientList getOtherClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const = 0; virtual BlackMisc::Network::CClientList getClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const = 0;
//! Set client for given callsign
virtual bool setOtherClient(const BlackMisc::Network::CClient &client) = 0;
//! Known voice servers, available when data file was first read //! Known voice servers, available when data file was first read
virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const = 0; virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const = 0;

View File

@@ -193,21 +193,29 @@ namespace BlackCore
return BlackMisc::Network::CUser(); return BlackMisc::Network::CUser();
} }
//! \copydoc IContextNetwork::getOtherClients //! \copydoc IContextNetwork::getClients
virtual BlackMisc::Network::CClientList getOtherClients() const override virtual BlackMisc::Network::CClientList getClients() const override
{ {
logEmptyContextWarning(Q_FUNC_INFO); logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Network::CClientList(); return BlackMisc::Network::CClientList();
} }
//! \copydoc IContextNetwork::getOtherClientsForCallsigns //! \copydoc IContextNetwork::getClientsForCallsigns
virtual BlackMisc::Network::CClientList getOtherClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override virtual BlackMisc::Network::CClientList getClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override
{ {
Q_UNUSED(callsigns); Q_UNUSED(callsigns);
logEmptyContextWarning(Q_FUNC_INFO); logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Network::CClientList(); return BlackMisc::Network::CClientList();
} }
//! \copydoc IContextNetwork::setOtherClient
virtual bool setOtherClient(const BlackMisc::Network::CClient &client) override
{
Q_UNUSED(client);
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
//! \copydoc IContextNetwork::requestDataUpdates //! \copydoc IContextNetwork::requestDataUpdates
virtual void requestDataUpdates()override virtual void requestDataUpdates()override
{ {

View File

@@ -389,18 +389,34 @@ namespace BlackCore
return users[0]; return users[0];
} }
CClientList CContextNetwork::getOtherClients() const CClientList CContextNetwork::getClients() const
{ {
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
return m_airspace->getClients(); return m_airspace->getClients();
} }
CClientList CContextNetwork::getOtherClientsForCallsigns(const CCallsignSet &callsigns) const CClientList CContextNetwork::getClientsForCallsigns(const CCallsignSet &callsigns) const
{ {
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
return m_airspace->getClientsForCallsigns(callsigns); return m_airspace->getClientsForCallsigns(callsigns);
} }
bool CContextNetwork::setOtherClient(const CClient &client)
{
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
return m_airspace->setOtherClient(client);
}
int CContextNetwork::removeClient(const Aviation::CCallsign &callsign)
{
return m_airspace->removeClient(callsign);
}
bool CContextNetwork::autoAdjustCientGndCapability(const Aviation::CAircraftSituation &situation)
{
return m_airspace->autoAdjustCientGndCapability(situation);
}
CServerList CContextNetwork::getVatsimFsdServers() const CServerList CContextNetwork::getVatsimFsdServers() const
{ {
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing data reader"); Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing data reader");
@@ -762,6 +778,36 @@ namespace BlackCore
return m_airspace->getLatestAirspaceAircraftSnapshot(); return m_airspace->getLatestAirspaceAircraftSnapshot();
} }
void CContextNetwork::setClients(const CClientList &clients)
{
m_airspace->setClients(clients);
}
void CContextNetwork::clearClients()
{
m_airspace->clearClients();
}
CClient CContextNetwork::getClientOrDefaultForCallsign(const Aviation::CCallsign &callsign) const
{
return m_airspace->getClientOrDefaultForCallsign(callsign);
}
bool CContextNetwork::hasClientInfo(const Aviation::CCallsign &callsign) const
{
return m_airspace->hasClientInfo(callsign);
}
bool CContextNetwork::addNewClient(const CClient &client)
{
return m_airspace->addNewClient(client);
}
int CContextNetwork::updateOrAddClient(const Aviation::CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues)
{
return m_airspace->updateOrAddClient(callsign, vm, skipEqualValues);
}
void CContextNetwork::setFastPositionEnabledCallsigns(CCallsignSet &callsigns) void CContextNetwork::setFastPositionEnabledCallsigns(CCallsignSet &callsigns)
{ {
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsigns; } if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsigns; }

View File

@@ -32,6 +32,7 @@
#include "blackmisc/aviation/callsignset.h" #include "blackmisc/aviation/callsignset.h"
#include "blackmisc/aviation/flightplan.h" #include "blackmisc/aviation/flightplan.h"
#include "blackmisc/network/clientlist.h" #include "blackmisc/network/clientlist.h"
#include "blackmisc/network/clientprovider.h"
#include "blackmisc/network/server.h" #include "blackmisc/network/server.h"
#include "blackmisc/network/serverlist.h" #include "blackmisc/network/serverlist.h"
#include "blackmisc/network/textmessagelist.h" #include "blackmisc/network/textmessagelist.h"
@@ -73,10 +74,12 @@ namespace BlackCore
//! Network context implementation //! Network context implementation
class BLACKCORE_EXPORT CContextNetwork : class BLACKCORE_EXPORT CContextNetwork :
public IContextNetwork, public IContextNetwork,
public BlackMisc::Simulation::IRemoteAircraftProvider public BlackMisc::Simulation::IRemoteAircraftProvider,
public BlackMisc::Network::IClientProvider
{ {
Q_OBJECT Q_OBJECT
Q_INTERFACES(BlackMisc::Simulation::IRemoteAircraftProvider) Q_INTERFACES(BlackMisc::Simulation::IRemoteAircraftProvider)
Q_INTERFACES(BlackMisc::Network::IClientProvider)
Q_CLASSINFO("D-Bus Interface", BLACKCORE_CONTEXTNETWORK_INTERFACENAME) Q_CLASSINFO("D-Bus Interface", BLACKCORE_CONTEXTNETWORK_INTERFACENAME)
friend class IContextNetwork; friend class IContextNetwork;
@@ -107,6 +110,18 @@ namespace BlackCore
virtual BlackMisc::Simulation::CAirspaceAircraftSnapshot getLatestAirspaceAircraftSnapshot() const override; virtual BlackMisc::Simulation::CAirspaceAircraftSnapshot getLatestAirspaceAircraftSnapshot() const override;
//! @} //! @}
//! \ingroup clientprovider
//! @{
virtual void setClients(const BlackMisc::Network::CClientList &clients) override;
virtual void clearClients() override;
virtual BlackMisc::Network::CClient getClientOrDefaultForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual bool hasClientInfo(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual bool addNewClient(const BlackMisc::Network::CClient &client) override;
virtual int updateOrAddClient(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::CPropertyIndexVariantMap &vm, bool skipEqualValues = true) override;
virtual int removeClient(const BlackMisc::Aviation::CCallsign &callsign) override;
virtual bool autoAdjustCientGndCapability(const BlackMisc::Aviation::CAircraftSituation &situation) override;
//! @}
public slots: public slots:
// from context and provider interface // from context and provider interface
//! \ingroup remoteaircraftprovider //! \ingroup remoteaircraftprovider
@@ -138,6 +153,13 @@ namespace BlackCore
virtual bool testAddAltitudeOffset(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CLength &offset = BlackMisc::PhysicalQuantities::CLength::null()) override; virtual bool testAddAltitudeOffset(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CLength &offset = BlackMisc::PhysicalQuantities::CLength::null()) override;
//! @} //! @}
//! \ingroup clientprovider
//! @{
virtual BlackMisc::Network::CClientList getClients() const override;
virtual BlackMisc::Network::CClientList getClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override;
virtual bool setOtherClient(const BlackMisc::Network::CClient &client) override;
//! @}
//! In transition state, e.g. connecting, disconnecting. //! In transition state, e.g. connecting, disconnecting.
//! \details In such a state it is advisable to wait until an end state (connected/disconnected) is reached //! \details In such a state it is advisable to wait until an end state (connected/disconnected) is reached
//! \remarks Intentionally only running locally, not in interface //! \remarks Intentionally only running locally, not in interface
@@ -183,8 +205,6 @@ namespace BlackCore
virtual BlackMisc::Network::CUserList getUsers() const override; virtual BlackMisc::Network::CUserList getUsers() const override;
virtual BlackMisc::Network::CUserList getUsersForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override; virtual BlackMisc::Network::CUserList getUsersForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override;
virtual BlackMisc::Network::CUser getUserForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual BlackMisc::Network::CUser getUserForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual BlackMisc::Network::CClientList getOtherClients() const override;
virtual BlackMisc::Network::CClientList getOtherClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override;
virtual BlackMisc::Network::CServerList getVatsimFsdServers() const override; virtual BlackMisc::Network::CServerList getVatsimFsdServers() const override;
virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const override; virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const override;
virtual void requestDataUpdates()override; virtual void requestDataUpdates()override;

View File

@@ -160,9 +160,9 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<BlackMisc::Network::CUser>(QLatin1String("getUserForCallsign"), callsign); return m_dBusInterface->callDBusRet<BlackMisc::Network::CUser>(QLatin1String("getUserForCallsign"), callsign);
} }
CClientList CContextNetworkProxy::getOtherClients() const CClientList CContextNetworkProxy::getClients() const
{ {
return m_dBusInterface->callDBusRet<BlackMisc::Network::CClientList>(QLatin1String("getOtherClients")); return m_dBusInterface->callDBusRet<BlackMisc::Network::CClientList>(QLatin1String("getClients"));
} }
CServerList CContextNetworkProxy::getVatsimFsdServers() const CServerList CContextNetworkProxy::getVatsimFsdServers() const
@@ -175,9 +175,14 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<BlackMisc::Network::CServerList>(QLatin1String("getVatsimVoiceServers")); return m_dBusInterface->callDBusRet<BlackMisc::Network::CServerList>(QLatin1String("getVatsimVoiceServers"));
} }
CClientList CContextNetworkProxy::getOtherClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const CClientList CContextNetworkProxy::getClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const
{ {
return m_dBusInterface->callDBusRet<BlackMisc::Network::CClientList>(QLatin1String("getOtherClientsForCallsigns"), callsigns); return m_dBusInterface->callDBusRet<BlackMisc::Network::CClientList>(QLatin1String("getClientsForCallsigns"), callsigns);
}
bool CContextNetworkProxy::setOtherClient(const CClient &client)
{
return m_dBusInterface->callDBusRet<bool>(QLatin1String("setOtherClientForCallsign"), client);
} }
CVoiceRoomList CContextNetworkProxy::getSelectedVoiceRooms() const CVoiceRoomList CContextNetworkProxy::getSelectedVoiceRooms() const

View File

@@ -98,10 +98,11 @@ namespace BlackCore
virtual BlackMisc::Network::CUserList getUsers() const override; virtual BlackMisc::Network::CUserList getUsers() const override;
virtual BlackMisc::Network::CUserList getUsersForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override; virtual BlackMisc::Network::CUserList getUsersForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override;
virtual BlackMisc::Network::CUser getUserForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual BlackMisc::Network::CUser getUserForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual BlackMisc::Network::CClientList getOtherClients() const override; virtual BlackMisc::Network::CClientList getClients() const override;
virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const override; virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const override;
virtual BlackMisc::Network::CServerList getVatsimFsdServers() const override; virtual BlackMisc::Network::CServerList getVatsimFsdServers() const override;
virtual BlackMisc::Network::CClientList getOtherClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override; virtual BlackMisc::Network::CClientList getClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override;
virtual bool setOtherClient(const BlackMisc::Network::CClient &client) override;
virtual void requestDataUpdates()override; virtual void requestDataUpdates()override;
virtual void requestAtisUpdates() override; virtual void requestAtisUpdates() override;
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) override; virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering) override;

View File

@@ -342,7 +342,8 @@ namespace BlackCore
Q_ASSERT_X(this->getIContextNetwork()->isUsingImplementingObject(), Q_FUNC_INFO, "Need implementing object"); Q_ASSERT_X(this->getIContextNetwork()->isUsingImplementingObject(), Q_FUNC_INFO, "Need implementing object");
IOwnAircraftProvider *ownAircraftProvider = this->getRuntime()->getCContextOwnAircraft(); IOwnAircraftProvider *ownAircraftProvider = this->getRuntime()->getCContextOwnAircraft();
IRemoteAircraftProvider *renderedAircraftProvider = this->getRuntime()->getCContextNetwork(); IRemoteAircraftProvider *renderedAircraftProvider = this->getRuntime()->getCContextNetwork();
ISimulator *simulator = factory->create(simulatorPluginInfo, ownAircraftProvider, renderedAircraftProvider, &m_weatherManager); IClientProvider *clientProvider = this->getRuntime()->getCContextNetwork();
ISimulator *simulator = factory->create(simulatorPluginInfo, ownAircraftProvider, renderedAircraftProvider, &m_weatherManager, clientProvider);
Q_ASSERT_X(simulator, Q_FUNC_INFO, "no simulator driver can be created"); Q_ASSERT_X(simulator, Q_FUNC_INFO, "no simulator driver can be created");
this->setRemoteAircraftProvider(renderedAircraftProvider); this->setRemoteAircraftProvider(renderedAircraftProvider);

View File

@@ -88,13 +88,17 @@ namespace BlackCore
return (status.testFlag(Connected) || status.testFlag(Simulating) || status.testFlag(Paused)); return (status.testFlag(Connected) || status.testFlag(Simulating) || status.testFlag(Paused));
} }
ISimulator::ISimulator( ISimulator::ISimulator(const CSimulatorPluginInfo &pluginInfo,
const CSimulatorPluginInfo &pluginInfo, IOwnAircraftProvider *ownAircraftProvider, IOwnAircraftProvider *ownAircraftProvider,
IRemoteAircraftProvider *remoteAircraftProvider, IWeatherGridProvider *weatherGridProvider, QObject *parent) : IRemoteAircraftProvider *remoteAircraftProvider,
IWeatherGridProvider *weatherGridProvider,
IClientProvider *clientProvider,
QObject *parent) :
QObject(parent), QObject(parent),
COwnAircraftAware(ownAircraftProvider), COwnAircraftAware(ownAircraftProvider),
CRemoteAircraftAware(remoteAircraftProvider), CRemoteAircraftAware(remoteAircraftProvider),
CWeatherGridAware(weatherGridProvider), CWeatherGridAware(weatherGridProvider),
CClientAware(clientProvider),
ISimulationEnvironmentProvider(pluginInfo), ISimulationEnvironmentProvider(pluginInfo),
IInterpolationSetupProvider(), IInterpolationSetupProvider(),
CIdentifiable(this) CIdentifiable(this)

View File

@@ -37,6 +37,7 @@ using namespace BlackConfig;
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Geo; using namespace BlackMisc::Geo;
using namespace BlackMisc::Aviation; using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network;
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
@@ -49,8 +50,9 @@ namespace BlackCore
IOwnAircraftProvider *ownAircraftProvider, IOwnAircraftProvider *ownAircraftProvider,
IRemoteAircraftProvider *remoteAircraftProvider, IRemoteAircraftProvider *remoteAircraftProvider,
IWeatherGridProvider *weatherGridProvider, IWeatherGridProvider *weatherGridProvider,
IClientProvider *clientProvider,
QObject *parent) QObject *parent)
: ISimulator(info, ownAircraftProvider, remoteAircraftProvider, weatherGridProvider, parent) : ISimulator(info, ownAircraftProvider, remoteAircraftProvider, weatherGridProvider, clientProvider, parent)
{ {
this->setObjectName("Simulator: " + info.getIdentifier()); this->setObjectName("Simulator: " + info.getIdentifier());
CSimulatorCommon::registerHelp(); CSimulatorCommon::registerHelp();

View File

@@ -119,6 +119,7 @@ namespace BlackCore
BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider,
BlackMisc::Simulation::IRemoteAircraftProvider *remoteAircraftProvider, BlackMisc::Simulation::IRemoteAircraftProvider *remoteAircraftProvider,
BlackMisc::Weather::IWeatherGridProvider *weatherGridProvider, BlackMisc::Weather::IWeatherGridProvider *weatherGridProvider,
BlackMisc::Network::IClientProvider *clientProvider,
QObject *parent); QObject *parent);
//! \name Interface implementations, called from context //! \name Interface implementations, called from context

View File

@@ -76,7 +76,7 @@ namespace BlackGui
} }
// load data // load data
ui->tvp_Clients->updateContainer(sGui->getIContextNetwork()->getOtherClients()); ui->tvp_Clients->updateContainer(sGui->getIContextNetwork()->getClients());
ui->tvp_AllUsers->updateContainer(sGui->getIContextNetwork()->getUsers()); ui->tvp_AllUsers->updateContainer(sGui->getIContextNetwork()->getUsers());
} }
} }

View File

@@ -29,7 +29,6 @@ namespace BlackGui
//! Client list model //! Client list model
class BLACKGUI_EXPORT CClientListModel : public CListModelBase<BlackMisc::Network::CClient, BlackMisc::Network::CClientList> class BLACKGUI_EXPORT CClientListModel : public CListModelBase<BlackMisc::Network::CClient, BlackMisc::Network::CClientList>
{ {
public: public:
//! Constructor //! Constructor
explicit CClientListModel(QObject *parent = nullptr); explicit CClientListModel(QObject *parent = nullptr);
@@ -39,7 +38,6 @@ namespace BlackGui
//! \copydoc QAbstractListModel::data() //! \copydoc QAbstractListModel::data()
virtual QVariant data(const QModelIndex &index, int role) const override; virtual QVariant data(const QModelIndex &index, int role) const override;
}; };
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -50,7 +50,6 @@ namespace BlackMisc
Capabilities cap = this->getCapabilities(); Capabilities cap = this->getCapabilities();
cap &= ~capability; cap &= ~capability;
this->setCapabilities(cap); this->setCapabilities(cap);
} }
void CClient::setCapabilities(const Capabilities &capabilities) void CClient::setCapabilities(const Capabilities &capabilities)
@@ -60,8 +59,8 @@ namespace BlackMisc
QString CClient::getCapabilitiesAsString() const QString CClient::getCapabilitiesAsString() const
{ {
const Capabilities cap = this->getCapabilities();
QStringList sl; QStringList sl;
const Capabilities cap = this->getCapabilities();
if (cap.testFlag(FsdAtisCanBeReceived)) sl << "ATIS"; if (cap.testFlag(FsdAtisCanBeReceived)) sl << "ATIS";
if (cap.testFlag(FsdWithInterimPositions)) sl << "interim pos."; if (cap.testFlag(FsdWithInterimPositions)) sl << "interim pos.";
if (cap.testFlag(FsdWithIcaoCodes)) sl << "ICAO"; if (cap.testFlag(FsdWithIcaoCodes)) sl << "ICAO";

View File

@@ -52,12 +52,12 @@ namespace BlackMisc
enum Capability enum Capability
{ {
None = 0, None = 0,
FsdWithInterimPositions = 1 << 0, FsdWithInterimPositions = 1 << 0, //!< fast position updates
FsdWithIcaoCodes = 1 << 1, //!< basically means it is a pilot client handling ICAO code packages FsdWithIcaoCodes = 1 << 1, //!< basically means it is a pilot client handling ICAO code packages
FsdAtisCanBeReceived = 1 << 2, //!< ATIS FsdAtisCanBeReceived = 1 << 2, //!< ATIS
FsdWithAircraftConfig = 1 << 3, //!< Aircraft parts FsdWithAircraftConfig = 1 << 3, //!< Aircraft parts
FsdWithGroundFlag = 1 << 4, //!< supports gnd. flag (in position) FsdWithGroundFlag = 1 << 4, //!< supports gnd. flag (in position)
FsdModelString = 1 << 5 FsdModelString = 1 << 5 //!< model string can be queried
}; };
Q_DECLARE_FLAGS(Capabilities, Capability) Q_DECLARE_FLAGS(Capabilities, Capability)
@@ -171,5 +171,6 @@ namespace BlackMisc
} // namespace } // namespace
Q_DECLARE_METATYPE(BlackMisc::Network::CClient) Q_DECLARE_METATYPE(BlackMisc::Network::CClient)
Q_DECLARE_METATYPE(BlackMisc::Network::CClient::Capability)
#endif // guard #endif // guard

View File

@@ -16,41 +16,48 @@ namespace BlackMisc
{ {
namespace Network namespace Network
{ {
CClientList IClientProvider::getClients() const CClientList CClientProvider::getClients() const
{ {
QReadLocker l(&m_lockClient); QReadLocker l(&m_lockClient);
return m_clients; return m_clients;
} }
void IClientProvider::setClients(const CClientList &clients) void CClientProvider::setClients(const CClientList &clients)
{ {
QWriteLocker l(&m_lockClient); QWriteLocker l(&m_lockClient);
m_clients = clients; m_clients = clients;
} }
void IClientProvider::clearClients() void CClientProvider::clearClients()
{ {
QWriteLocker l(&m_lockClient); QWriteLocker l(&m_lockClient);
m_clients.clear(); m_clients.clear();
} }
CClientList IClientProvider::getClientsForCallsigns(const CCallsignSet &callsigns) const CClientList CClientProvider::getClientsForCallsigns(const CCallsignSet &callsigns) const
{ {
return this->getClients().findByCallsigns(callsigns); return this->getClients().findByCallsigns(callsigns);
} }
CClient IClientProvider::getClientOrDefaultForCallsign(const CCallsign &callsign) const CClient CClientProvider::getClientOrDefaultForCallsign(const CCallsign &callsign) const
{ {
const CClientList clients(this->getClients()); const CClientList clients(this->getClients());
return clients.findFirstByCallsign(callsign); return clients.findFirstByCallsign(callsign);
} }
bool IClientProvider::hasClientInfo(const CCallsign &callsign) const bool CClientProvider::setOtherClient(const CClient &client)
{
QWriteLocker l(&m_lockClient);
m_clients.replaceOrAddObjectByCallsign(client);
return true;
}
bool CClientProvider::hasClientInfo(const CCallsign &callsign) const
{ {
return this->getClients().containsCallsign(callsign); return this->getClients().containsCallsign(callsign);
} }
bool IClientProvider::addNewClient(const CClient &client) bool CClientProvider::addNewClient(const CClient &client)
{ {
const CCallsign callsign = client.getCallsign(); const CCallsign callsign = client.getCallsign();
Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "invalid callsign"); Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "invalid callsign");
@@ -60,7 +67,7 @@ namespace BlackMisc
return true; return true;
} }
int IClientProvider::updateOrAddClient(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues) int CClientProvider::updateOrAddClient(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues)
{ {
Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Missing callsign"); Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Missing callsign");
int c = 0; int c = 0;
@@ -78,13 +85,13 @@ namespace BlackMisc
return c; return c;
} }
int IClientProvider::removeClient(const CCallsign &callsign) int CClientProvider::removeClient(const CCallsign &callsign)
{ {
QWriteLocker l(&m_lockClient); QWriteLocker l(&m_lockClient);
return m_clients.removeByCallsign(callsign); return m_clients.removeByCallsign(callsign);
} }
bool IClientProvider::autoAdjustCientGndCapability(const CAircraftSituation &situation) bool CClientProvider::autoAdjustCientGndCapability(const CAircraftSituation &situation)
{ {
if (situation.getCallsign().isEmpty()) { return false; } // no callsign if (situation.getCallsign().isEmpty()) { return false; } // no callsign
if (!situation.isOnGround()) { return false; } // nothing to adjust if (!situation.isOnGround()) { return false; } // nothing to adjust

View File

@@ -28,43 +28,67 @@ namespace BlackMisc
public: public:
//! Get other clients //! Get other clients
//! \threadsafe //! \threadsafe
CClientList getClients() const; virtual CClientList getClients() const = 0;
//! Set other clients //! Set other clients
//! \threadsafe //! \threadsafe
void setClients(const CClientList &clients); virtual void setClients(const CClientList &clients) = 0;
//! Set other clients //! Set other clients
//! \threadsafe //! \threadsafe
void clearClients(); virtual void clearClients() = 0;
//! Returns a list of other clients corresponding to the given callsigns //! Returns a list of other clients corresponding to the given callsigns
//! \threadsafe //! \threadsafe
BlackMisc::Network::CClientList getClientsForCallsigns(const Aviation::CCallsignSet &callsigns) const; virtual CClientList getClientsForCallsigns(const Aviation::CCallsignSet &callsigns) const = 0;
//! Other client for the given callsigns //! Other client for the given callsigns
//! \threadsafe //! \threadsafe
BlackMisc::Network::CClient getClientOrDefaultForCallsign(const Aviation::CCallsign &callsign) const; virtual CClient getClientOrDefaultForCallsign(const Aviation::CCallsign &callsign) const = 0;
//! Client info for given callsign? //! Client info for given callsign?
//! \threadsafe //! \threadsafe
bool hasClientInfo(const Aviation::CCallsign &callsign) const; virtual bool hasClientInfo(const Aviation::CCallsign &callsign) const = 0;
//! Add a new client, if existing nothing will be added //! Add a new client, if existing nothing will be added
//! \threadsafe //! \threadsafe
bool addNewClient(const CClient &client); virtual bool addNewClient(const CClient &client) = 0;
//! Set client for its callsign
//! \threadsafe
virtual bool setOtherClient(const BlackMisc::Network::CClient &client) = 0;
//! Update or add a client //! Update or add a client
//! \threadsafe //! \threadsafe
int updateOrAddClient(const Aviation::CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues = true); virtual int updateOrAddClient(const Aviation::CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues = true) = 0;
//! Remove client //! Remove client
//! \threadsafe //! \threadsafe
int removeClient(const Aviation::CCallsign &callsign); virtual int removeClient(const Aviation::CCallsign &callsign) = 0;
//! Adjust gnd.flag capability from situation //! Adjust gnd.flag capability from situation
//! \threadsafe //! \threadsafe
bool autoAdjustCientGndCapability(const Aviation::CAircraftSituation &situation); virtual bool autoAdjustCientGndCapability(const Aviation::CAircraftSituation &situation) = 0;
};
//! Direct in memory access to client (network client) data
class BLACKMISC_EXPORT CClientProvider : public IClientProvider
{
public:
//! \ingroup clientprovider
//! @{
virtual CClientList getClients() const override;
virtual void setClients(const CClientList &clients) override;
virtual void clearClients() override;
virtual CClientList getClientsForCallsigns(const Aviation::CCallsignSet &callsigns) const override;
virtual CClient getClientOrDefaultForCallsign(const Aviation::CCallsign &callsign) const override;
virtual bool hasClientInfo(const Aviation::CCallsign &callsign) const override;
virtual bool addNewClient(const CClient &client) override;
virtual bool setOtherClient(const BlackMisc::Network::CClient &client) override;
virtual int updateOrAddClient(const Aviation::CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues = true) override;
virtual int removeClient(const Aviation::CCallsign &callsign) override;
virtual bool autoAdjustCientGndCapability(const Aviation::CAircraftSituation &situation) override;
//! @}
private: private:
CClientList m_clients; CClientList m_clients;
@@ -75,35 +99,35 @@ namespace BlackMisc
class BLACKMISC_EXPORT CClientAware : public IProviderAware<IClientProvider> class BLACKMISC_EXPORT CClientAware : public IProviderAware<IClientProvider>
{ {
public: public:
//! \copydoc IClientProvider::getClients //! \copydoc CClientProvider::getClients
CClientList getClients() const; CClientList getClients() const;
//! \copydoc IClientProvider::setClients //! \copydoc CClientProvider::setClients
void setClients(const CClientList &clients); void setClients(const CClientList &clients);
//! \copydoc IClientProvider::clearClients //! \copydoc CClientProvider::clearClients
void clearClients(); void clearClients();
//! \copydoc IClientProvider::getClientsForCallsigns //! \copydoc CClientProvider::getClientsForCallsigns
BlackMisc::Network::CClientList getClientsForCallsigns(const Aviation::CCallsignSet &callsigns) const; BlackMisc::Network::CClientList getClientsForCallsigns(const Aviation::CCallsignSet &callsigns) const;
//! \copydoc IClientProvider::getClientOrDefaultForCallsign //! \copydoc CClientProvider::getClientOrDefaultForCallsign
BlackMisc::Network::CClient getClientOrDefaultForCallsign(const Aviation::CCallsign &callsign) const; BlackMisc::Network::CClient getClientOrDefaultForCallsign(const Aviation::CCallsign &callsign) const;
//! \copydoc IClientProvider::hasClientInfo //! \copydoc CClientProvider::hasClientInfo
bool hasClientInfo(const Aviation::CCallsign &callsign) const; bool hasClientInfo(const Aviation::CCallsign &callsign) const;
//! \copydoc IClientProvider::addNewClient //! \copydoc CClientProvider::addNewClient
bool addNewClient(const CClient &client); bool addNewClient(const CClient &client);
//! \copydoc IClientProvider::updateOrAddClient //! \copydoc CClientProvider::updateOrAddClient
int updateOrAddClient(const Aviation::CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues); int updateOrAddClient(const Aviation::CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues);
//! \copydoc IClientProvider::removeClient //! \copydoc CClientProvider::removeClient
int removeClient(const Aviation::CCallsign &callsign); int removeClient(const Aviation::CCallsign &callsign);
//! Provider //! Provider
void setClientProvider(IClientProvider *provider) { this->setProvider(provider); } void setClientProvider(CClientProvider *provider) { this->setProvider(provider); }
protected: protected:
//! Default constructor //! Default constructor
@@ -114,7 +138,7 @@ namespace BlackMisc
}; };
//! Client provider dummy for testing //! Client provider dummy for testing
class BLACKMISC_EXPORT CClientProviderDummy: public IClientProvider class BLACKMISC_EXPORT CClientProviderDummy: public CClientProvider
{ {
public: public:
//! Dummy instance //! Dummy instance

View File

@@ -18,6 +18,7 @@ namespace BlackMisc
{ {
CAuthenticatedUser::registerMetadata(); CAuthenticatedUser::registerMetadata();
CClient::registerMetadata(); CClient::registerMetadata();
qDBusRegisterMetaType<CClient::Capability>();
CClientList::registerMetadata(); CClientList::registerMetadata();
CEcosystem::registerMetadata(); CEcosystem::registerMetadata();
CEcosystemList::registerMetadata(); CEcosystemList::registerMetadata();