refs #369, adjusted contexts

* using CSimulatedAircraft / CSimulatedAircraftList
* new functions as getAircraftForCallsign or getInstalledModelsStartingWith
* fixes such as override missing fixed
* return values (success/failed) for member functions (e.g. setTimeSynchronization)
* getMaxRenderedAircraft / setMaxRenderedAircraft
This commit is contained in:
Klaus Basan
2015-02-06 00:21:35 +01:00
parent caa5aab34c
commit f56a401505
11 changed files with 239 additions and 102 deletions

View File

@@ -72,7 +72,7 @@ namespace BlackCore
void removedAircraft(const BlackMisc::Aviation::CCallsign &callsign); void removedAircraft(const BlackMisc::Aviation::CCallsign &callsign);
//! Read for model matching //! Read for model matching
void readyForModelMatching(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft); void readyForModelMatching(const BlackMisc::Simulation::CSimulatedAircraft &renderedAircraft);
//! ATC station (online) list has been changed //! ATC station (online) list has been changed
void changedAtcStationsOnline(); void changedAtcStationsOnline();
@@ -92,8 +92,11 @@ namespace BlackCore
//! Digest signal changedAircraftInRange() //! Digest signal changedAircraftInRange()
void changedAircraftInRangeDigest(); void changedAircraftInRangeDigest();
//! Aircraft situation update //! Aircraft model was changed
void changedAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation); void changedRenderedAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator);
//! Aircraft enabled / disabled
void changedAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator);
//! Connection status changed for online station //! Connection status changed for online station
void changedAtcStationOnlineConnectionStatus(const BlackMisc::Aviation::CAtcStation &atcStation, bool connected); void changedAtcStationOnlineConnectionStatus(const BlackMisc::Aviation::CAtcStation &atcStation, bool connected);
@@ -133,6 +136,9 @@ namespace BlackCore
//! Aircraft list //! Aircraft list
virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const = 0; virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const = 0;
//! Aircraft for given callsign
virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
//! Get all users //! Get all users
virtual BlackMisc::Network::CUserList getUsers() const = 0; virtual BlackMisc::Network::CUserList getUsers() const = 0;
@@ -182,11 +188,7 @@ namespace BlackCore
//! Command line was entered //! Command line was entered
virtual bool parseCommandLine(const QString &commandLine) = 0; virtual bool parseCommandLine(const QString &commandLine) = 0;
/*! //! Get METAR, if not available request it (code such as EDDF, KLAX)
* Get METAR, if not available request it
* \param airportIcaoCode such as EDDF, KLAX
* \return
*/
virtual BlackMisc::Aviation::CInformationMessage getMetar(const BlackMisc::Aviation::CAirportIcao &airportIcaoCode) = 0; virtual BlackMisc::Aviation::CInformationMessage getMetar(const BlackMisc::Aviation::CAirportIcao &airportIcaoCode) = 0;
//! Use the selected COM1/2 frequencies, and get the corresponding voice room for it //! Use the selected COM1/2 frequencies, and get the corresponding voice room for it
@@ -201,6 +203,12 @@ namespace BlackCore
//! Request ATIS updates (for all stations) //! Request ATIS updates (for all stations)
virtual void requestAtisUpdates() = 0; virtual void requestAtisUpdates() = 0;
//! Enable/disable rendering
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator) = 0;
//! Change model string
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) = 0;
//! Create dummy ATC stations for performance tests etc. //! Create dummy ATC stations for performance tests etc.
virtual void testCreateDummyOnlineAtcStations(int number) = 0; virtual void testCreateDummyOnlineAtcStations(int number) = 0;

View File

@@ -60,6 +60,14 @@ namespace BlackCore
return BlackMisc::Simulation::CSimulatedAircraftList(); return BlackMisc::Simulation::CSimulatedAircraftList();
} }
//! \copydoc IContextNetwork::getAircraftForCallsign
virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override
{
Q_UNUSED(callsign);
logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Simulation::CSimulatedAircraft();
}
//! \copydoc IContextNetwork::connectToNetwork //! \copydoc IContextNetwork::connectToNetwork
virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override
{ {
@@ -194,18 +202,38 @@ namespace BlackCore
} }
//! \copydoc IContextNetwork::getVatsimVoiceServers //! \copydoc IContextNetwork::getVatsimVoiceServers
virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const override
{ {
logEmptyContextWarning(Q_FUNC_INFO); logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Network::CServerList(); return BlackMisc::Network::CServerList();
} }
//! \copydoc IContextNetwork::getVatsimFsdServers //! \copydoc IContextNetwork::getVatsimFsdServers
virtual BlackMisc::Network::CServerList getVatsimFsdServers() const virtual BlackMisc::Network::CServerList getVatsimFsdServers() const override
{ {
logEmptyContextWarning(Q_FUNC_INFO); logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Network::CServerList(); return BlackMisc::Network::CServerList();
} }
//! \copydoc IContextNetwork::updateAircraftEnabled
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator) override
{
Q_UNUSED(callsign);
Q_UNUSED(originator);
Q_UNUSED(enabledForRedering);
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
//! \copydoc IContextNetwork::updateAircraftModel
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override
{
Q_UNUSED(callsign);
Q_UNUSED(originator);
Q_UNUSED(model);
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
}; };
} // namespace } // namespace

View File

@@ -76,13 +76,8 @@ namespace BlackCore
connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationsBooked, this, &CContextNetwork::changedAtcStationsBooked); connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationsBooked, this, &CContextNetwork::changedAtcStationsBooked);
connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationOnlineConnectionStatus, this, &CContextNetwork::changedAtcStationOnlineConnectionStatus); connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationOnlineConnectionStatus, this, &CContextNetwork::changedAtcStationOnlineConnectionStatus);
connect(this->m_airspace, &CAirspaceMonitor::changedAircraftInRange, this, &CContextNetwork::changedAircraftInRange); connect(this->m_airspace, &CAirspaceMonitor::changedAircraftInRange, this, &CContextNetwork::changedAircraftInRange);
connect(this->m_airspace, &CAirspaceMonitor::changedAircraftSituation, this, &CContextNetwork::changedAircraftSituation);
connect(this->m_airspace, &CAirspaceMonitor::removedAircraft, this, &CContextNetwork::removedAircraft); connect(this->m_airspace, &CAirspaceMonitor::removedAircraft, this, &CContextNetwork::removedAircraft);
connect(this->m_airspace, &CAirspaceMonitor::readyForModelMatching, this, &CContextNetwork::readyForModelMatching); connect(this->m_airspace, &CAirspaceMonitor::readyForModelMatching, this, &CContextNetwork::readyForModelMatching);
//! \todo Should be set in runtime, but this would require airspace to be a context
// connect(this->getIContextOwnAircraft(), &IContextOwnAircraft::changedAircraft, this->m_airspace, &CAirspaceMonitor::setOwnAircraft);
// connect(this->getIContextSimulator(), &IContextSimulator::ownAircraftModelChanged, this->m_airspace, &CAirspaceMonitor::setOwnAircraftModel);
} }
CContextNetwork::~CContextNetwork() CContextNetwork::~CContextNetwork()
@@ -90,6 +85,30 @@ namespace BlackCore
this->gracefulShutdown(); this->gracefulShutdown();
} }
const CSimulatedAircraftList &CContextNetwork::renderedAircraft() const
{
Q_ASSERT(this->m_airspace);
return m_airspace->renderedAircraft();
}
CSimulatedAircraftList &CContextNetwork::renderedAircraft()
{
Q_ASSERT(this->m_airspace);
return m_airspace->renderedAircraft();
}
CAircraftSituationList &CContextNetwork::renderedAircraftSituations()
{
Q_ASSERT(this->m_airspace);
return m_airspace->renderedAircraftSituations();
}
const CAircraftSituationList &CContextNetwork::renderedAircraftSituations() const
{
Q_ASSERT(this->m_airspace);
return m_airspace->renderedAircraftSituations();
}
void CContextNetwork::gracefulShutdown() void CContextNetwork::gracefulShutdown()
{ {
if (this->m_vatsimBookingReader) { this->m_vatsimBookingReader->quit(); } if (this->m_vatsimBookingReader) { this->m_vatsimBookingReader->quit(); }
@@ -297,9 +316,22 @@ namespace BlackCore
void CContextNetwork::readAtcBookingsFromSource() const void CContextNetwork::readAtcBookingsFromSource() const
{ {
Q_ASSERT(this->m_vatsimBookingReader); Q_ASSERT(this->m_vatsimBookingReader);
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
this->m_vatsimBookingReader->read(); this->m_vatsimBookingReader->read();
} }
CSimulatedAircraftList CContextNetwork::getAircraftInRange() const
{
BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
return this->m_airspace->renderedAircraft();
}
CSimulatedAircraft CContextNetwork::getAircraftForCallsign(const CCallsign &callsign) const
{
BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign;
return this->m_airspace->renderedAircraft().findFirstByCallsign(callsign);
}
void CContextNetwork::ps_receivedBookings(const CAtcStationList &) void CContextNetwork::ps_receivedBookings(const CAtcStationList &)
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
@@ -310,7 +342,8 @@ namespace BlackCore
void CContextNetwork::requestDataUpdates() void CContextNetwork::requestDataUpdates()
{ {
Q_ASSERT(this->m_network); Q_ASSERT(this->m_network);
if (!this->isConnected()) return; CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
if (!this->isConnected()) { return; }
this->requestAtisUpdates(); this->requestAtisUpdates();
this->m_airspace->requestDataUpdates(); this->m_airspace->requestDataUpdates();
@@ -319,13 +352,37 @@ namespace BlackCore
void CContextNetwork::requestAtisUpdates() void CContextNetwork::requestAtisUpdates()
{ {
Q_ASSERT(this->m_network); Q_ASSERT(this->m_network);
if (!this->isConnected()) return; CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
if (!this->isConnected()) { return; }
this->m_airspace->requestAtisUpdates(); this->m_airspace->requestAtisUpdates();
} }
bool CContextNetwork::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRedering, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << enabledForRedering << originator;
bool c = this->m_airspace->updateAircraftEnabled(callsign, enabledForRedering, originator);
if (c)
{
emit this->changedAircraftEnabled(this->renderedAircraft().findFirstByCallsign(callsign), originator);
}
return c;
}
bool CContextNetwork::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign << model << originator;
bool c = this->m_airspace->updateAircraftModel(callsign, model, originator);
if (c)
{
emit this->changedRenderedAircraftModel(this->renderedAircraft().findFirstByCallsign(callsign), originator);
}
return c;
}
void CContextNetwork::testCreateDummyOnlineAtcStations(int number) void CContextNetwork::testCreateDummyOnlineAtcStations(int number)
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << number;
this->m_airspace->testCreateDummyOnlineAtcStations(number); this->m_airspace->testCreateDummyOnlineAtcStations(number);
} }

View File

@@ -15,6 +15,7 @@
#include "blackcore/context_network.h" #include "blackcore/context_network.h"
#include "blackcore/context_settings.h" #include "blackcore/context_settings.h"
#include "blackcore/context_runtime.h" #include "blackcore/context_runtime.h"
#include "blackmisc/simulation/simdirectaccessrenderedaircraft.h"
#include "blackcore/dbus_server.h" #include "blackcore/dbus_server.h"
#include "blackcore/network.h" #include "blackcore/network.h"
#include "blackcore/airspace_monitor.h" #include "blackcore/airspace_monitor.h"
@@ -26,8 +27,7 @@
#include "blackmisc/avaircraftsituationlist.h" #include "blackmisc/avaircraftsituationlist.h"
#include <QMap> #include <QMap>
#include <QTimer>
class QTimer;
namespace BlackCore namespace BlackCore
{ {
@@ -35,7 +35,9 @@ namespace BlackCore
class CVatsimDataFileReader; class CVatsimDataFileReader;
//! Network context implementation //! Network context implementation
class CContextNetwork : public IContextNetwork class CContextNetwork :
public IContextNetwork,
public BlackMisc::Simulation::IRenderedAircraftProvider
{ {
Q_OBJECT Q_OBJECT
Q_CLASSINFO("D-Bus Interface", BLACKCORE_CONTEXTNETWORK_INTERFACENAME) Q_CLASSINFO("D-Bus Interface", BLACKCORE_CONTEXTNETWORK_INTERFACENAME)
@@ -46,6 +48,18 @@ namespace BlackCore
//! Destructor //! Destructor
virtual ~CContextNetwork(); virtual ~CContextNetwork();
//! \copydoc IRenderedAircraftProviderReadOnly::renderedAircraft
virtual const BlackMisc::Simulation::CSimulatedAircraftList &renderedAircraft() const override;
//! \copydoc IRenderedAircraftProvider::renderedAircraft
virtual BlackMisc::Simulation::CSimulatedAircraftList &renderedAircraft() override;
//! \copydoc IRenderedAircraftProviderReadOnly::renderedAircraftSituations
virtual const BlackMisc::Aviation::CAircraftSituationList &renderedAircraftSituations() const override;
//! \copydoc IRenderedAircraftProviderReadOnly::renderedAircraftSituations
virtual BlackMisc::Aviation::CAircraftSituationList &renderedAircraftSituations() override;
public slots: public slots:
//! \copydoc IContextNetwork::readAtcBookingsFromSource() //! \copydoc IContextNetwork::readAtcBookingsFromSource()
@@ -66,11 +80,10 @@ namespace BlackCore
} }
//! \copydoc IContextNetwork::getAircraftInRange() //! \copydoc IContextNetwork::getAircraftInRange()
virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override;
{
BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; //! \copydoc IContextNetwork::getAircraftForCallsign
return this->m_airspace->renderedAircraft(); virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override;
}
//! \copydoc IContextNetwork::connectToNetwork() //! \copydoc IContextNetwork::connectToNetwork()
virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override; virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override;
@@ -136,6 +149,12 @@ namespace BlackCore
//! \copydoc IContextNetwork::requestAtisUpdates //! \copydoc IContextNetwork::requestAtisUpdates
virtual void requestAtisUpdates() override; virtual void requestAtisUpdates() override;
//! \copydoc IContextNetwork::updateAircraftEnabled
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator) override;
//! \copydoc IContextNetwork::updateAircraftModel
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override;
//! \copydoc IContextNetwork::testCreateDummyOnlineAtcStations //! \copydoc IContextNetwork::testCreateDummyOnlineAtcStations
virtual void testCreateDummyOnlineAtcStations(int number) override; virtual void testCreateDummyOnlineAtcStations(int number) override;

View File

@@ -72,6 +72,12 @@ namespace BlackCore
s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(),
"vatsimBookingsRead", this, SIGNAL(vatsimBookingsRead())); "vatsimBookingsRead", this, SIGNAL(vatsimBookingsRead()));
Q_ASSERT(s); Q_ASSERT(s);
s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(),
"changedRenderedAircraftModel", this, SIGNAL(changedRenderedAircraftModel(BlackMisc::Simulation::CSimulatedAircraft,QString)));
Q_ASSERT(s);
s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(),
"changedAircraftEnabled", this, SIGNAL(changedAircraftEnabled(BlackMisc::Simulation::CSimulatedAircraft,QString)));
Q_ASSERT(s);
Q_UNUSED(s); Q_UNUSED(s);
} }
@@ -95,6 +101,11 @@ namespace BlackCore
return this->m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatedAircraftList>(QLatin1Literal("getAircraftInRange")); return this->m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatedAircraftList>(QLatin1Literal("getAircraftInRange"));
} }
Simulation::CSimulatedAircraft CContextNetworkProxy::getAircraftForCallsign(const CCallsign &callsign) const
{
return this->m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatedAircraft>(QLatin1Literal("getAircraftForCallsign"), callsign);
}
BlackMisc::Network::CUserList CContextNetworkProxy::getUsers() const BlackMisc::Network::CUserList CContextNetworkProxy::getUsers() const
{ {
return this->m_dBusInterface->callDBusRet<BlackMisc::Network::CUserList>(QLatin1Literal("getUsers")); return this->m_dBusInterface->callDBusRet<BlackMisc::Network::CUserList>(QLatin1Literal("getUsers"));
@@ -150,6 +161,16 @@ namespace BlackCore
this->m_dBusInterface->callDBus(QLatin1Literal("requestAtisUpdates")); this->m_dBusInterface->callDBus(QLatin1Literal("requestAtisUpdates"));
} }
bool CContextNetworkProxy::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRedering, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateAircraftEnabled"), callsign, enabledForRedering, originator);
}
bool CContextNetworkProxy::updateAircraftModel(const CCallsign &callsign, const Simulation::CAircraftModel &model, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateAircraftModel"), callsign, model, originator);
}
void CContextNetworkProxy::testCreateDummyOnlineAtcStations(int number) void CContextNetworkProxy::testCreateDummyOnlineAtcStations(int number)
{ {
this->m_dBusInterface->callDBus(QLatin1Literal("testCreateDummyOnlineAtcStations"), number); this->m_dBusInterface->callDBus(QLatin1Literal("testCreateDummyOnlineAtcStations"), number);

View File

@@ -26,7 +26,7 @@
namespace BlackCore namespace BlackCore
{ {
//! \brief Network context proxy //! Network context proxy
//! \ingroup dbus //! \ingroup dbus
class CContextNetworkProxy : public IContextNetwork class CContextNetworkProxy : public IContextNetwork
{ {
@@ -65,6 +65,9 @@ namespace BlackCore
//! \copydoc IContextNetwork::getAircraftInRange() //! \copydoc IContextNetwork::getAircraftInRange()
virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override; virtual BlackMisc::Simulation::CSimulatedAircraftList getAircraftInRange() const override;
//! \copydoc IContextNetwork::getAircraftForCallsign
virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override;
//! \copydoc IContextNetwork::connectToNetwork //! \copydoc IContextNetwork::connectToNetwork
virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override; virtual BlackMisc::CStatusMessage connectToNetwork(const BlackMisc::Network::CServer &server, uint mode) override;
@@ -122,6 +125,12 @@ namespace BlackCore
//! \copydoc IContextNetwork::requestAtisUpdates //! \copydoc IContextNetwork::requestAtisUpdates
virtual void requestAtisUpdates() override; virtual void requestAtisUpdates() override;
//! \copydoc IContextNetwork::updateAircraftEnabled
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRedering, const QString &originator) override;
//! \copydoc IContextNetwork::updateAircraftModel
virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override;
//! \copydoc IContextNetwork::testCreateDummyOnlineAtcStations //! \copydoc IContextNetwork::testCreateDummyOnlineAtcStations
virtual void testCreateDummyOnlineAtcStations(int number) override; virtual void testCreateDummyOnlineAtcStations(int number) override;

View File

@@ -81,12 +81,9 @@ namespace BlackCore
//! Installed aircraft models ready or changed //! Installed aircraft models ready or changed
void installedAircraftModelsChanged(); void installedAircraftModelsChanged();
//! A single model has been matched for given Aircraft //! A single model has been matched for given aircraft
void modelMatchingCompleted(BlackMisc::Simulation::CSimulatedAircraft aircraft); void modelMatchingCompleted(BlackMisc::Simulation::CSimulatedAircraft aircraft);
//! A remote aircraft got changed
void remoteAircraftChanged(BlackMisc::Simulation::CSimulatedAircraft aircraft);
//! Emitted when own aircraft model changes //! Emitted when own aircraft model changes
//! \todo move to own aircraft context? //! \todo move to own aircraft context?
void ownAircraftModelChanged(BlackMisc::Simulation::CSimulatedAircraft aircraft); void ownAircraftModelChanged(BlackMisc::Simulation::CSimulatedAircraft aircraft);
@@ -124,25 +121,24 @@ namespace BlackCore
//! Installed models in simulator eco system //! Installed models in simulator eco system
virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const = 0; virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const = 0;
//! Simulated other aircraft in range //! Model for model string
virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const = 0; virtual BlackMisc::Simulation::CAircraftModelList getInstalledModelsStartingWith(const QString modelString) const = 0;
//! Changed remote aircraft (e.g. by disabling aircraft) //! ICAO data for model string
//! \todo tbd No add/remove remote aircraft function as those are added implicitly by accessing airspace monitor virtual BlackMisc::Aviation::CAircraftIcao getIcaoForModelString(const QString &modelString) const = 0;
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &toChangeAircraft, const BlackMisc::CPropertyIndexVariantMap &changeValues) = 0;
//! Set time synchronization between simulator and user's computer time //! Set time synchronization between simulator and user's computer time
//! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature //! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) = 0; virtual bool setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) = 0;
//! Is time synchronization on? //! Is time synchronization on?
virtual bool isTimeSynchronized() const = 0; virtual bool isTimeSynchronized() const = 0;
//! Max. number of remote aircraft rendered //! Max. number of remote aircraft rendered
virtual int getMaxRenderedRemoteAircraft() const = 0; virtual int getMaxRenderedAircraft() const = 0;
//! Max. number of remote aircraft rendered //! Max. number of remote aircraft rendered
virtual void setMaxRenderedRemoteAircraft(int number) = 0; virtual void setMaxRenderedAircraft(int number) = 0;
//! Time synchronization offset //! Time synchronization offset
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const = 0; virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const = 0;

View File

@@ -116,33 +116,35 @@ namespace BlackCore
return this->m_simulator->getInstalledModels(); return this->m_simulator->getInstalledModels();
} }
CSimulatedAircraftList CContextSimulator::getRemoteAircraft() const CAircraftModelList CContextSimulator::getInstalledModelsStartingWith(const QString modelString) const
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << modelString;
// If no ISimulator object is available, return a dummy. if (!m_simulator) { return CAircraftModelList(); }
if (!m_simulator) { return CSimulatedAircraftList(); } return this->m_simulator->getInstalledModels().findModelsStartingWith(modelString);
return this->m_simulator->getRemoteAircraft();
} }
int CContextSimulator::changeRemoteAircraft(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues) CAircraftIcao CContextSimulator::getIcaoForModelString(const QString &modelString) const
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << modelString;
if (!m_simulator) { return 0; } if (!m_simulator) { return CAircraftIcao(); }
int c = this->m_simulator->changeRemoteAircraft(changedAircraft, changedValues); return this->m_simulator->getIcaoForModelString(modelString);
if (c > 0)
{
// really changed something
emit this->remoteAircraftChanged(this->getRemoteAircraft().findFirstByCallsign(changedAircraft.getCallsign()));
}
return c;
} }
void CContextSimulator::setTimeSynchronization(bool enable, CTime offset) bool CContextSimulator::setTimeSynchronization(bool enable, CTime offset)
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
if (!m_simulator) return; if (!m_simulator) { return false; }
this->m_simulator->setTimeSynchronization(enable, offset); bool c = this->m_simulator->setTimeSynchronization(enable, offset);
if (!c) { return false; }
if (enable)
{
CLogMessage(this).info("Set time syncronization to %1") << offset.toQString();
}
else
{
CLogMessage(this).info("Disabled time syncronization %1");
}
return true;
} }
bool CContextSimulator::isTimeSynchronized() const bool CContextSimulator::isTimeSynchronized() const
@@ -152,18 +154,17 @@ namespace BlackCore
return this->m_simulator->isTimeSynchronized(); return this->m_simulator->isTimeSynchronized();
} }
int CContextSimulator::getMaxRenderedRemoteAircraft() const int CContextSimulator::getMaxRenderedAircraft() const
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
if (!m_simulator) return 0; if (!m_simulator) return 0;
return 13; return 13;
} }
void CContextSimulator::setMaxRenderedRemoteAircraft(int number) void CContextSimulator::setMaxRenderedAircraft(int number)
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
//! \todo implement if (m_simulator) { this->m_simulator->setMaxRenderedAircraft(number); }
Q_UNUSED(number);
} }
CTime CContextSimulator::getTimeSynchronizationOffset() const CTime CContextSimulator::getTimeSynchronizationOffset() const
@@ -200,7 +201,6 @@ namespace BlackCore
return false; return false;
} }
// Factory for driver // Factory for driver
ISimulatorFactory *factory = *factoryIterator; ISimulatorFactory *factory = *factoryIterator;
Q_ASSERT(factory); Q_ASSERT(factory);
@@ -208,8 +208,10 @@ namespace BlackCore
// We assume we run in the same process as the own aircraft context // We assume we run in the same process as the own aircraft context
// Hence we pass in memory refernce to own aircraft object // Hence we pass in memory refernce to own aircraft object
Q_ASSERT(this->getIContextOwnAircraft()->isUsingImplementingObject()); Q_ASSERT(this->getIContextOwnAircraft()->isUsingImplementingObject());
IOwnAircraftProvider *ownAircraft = this->getRuntime()->getCContextOwnAircraft(); Q_ASSERT(this->getIContextNetwork()->isUsingImplementingObject());
ISimulator *newSimulator = factory->create(ownAircraft, this); IOwnAircraftProvider *ownAircraftProvider = this->getRuntime()->getCContextOwnAircraft();
IRenderedAircraftProvider *renderedAircraftProvider = this->getRuntime()->getCContextNetwork();
ISimulator *newSimulator = factory->create(ownAircraftProvider, renderedAircraftProvider, this);
Q_ASSERT(newSimulator); Q_ASSERT(newSimulator);
this->unloadSimulatorPlugin(); // old plugin unloaded this->unloadSimulatorPlugin(); // old plugin unloaded
@@ -233,16 +235,16 @@ namespace BlackCore
// use readyForModelMatching instead of CAirspaceMonitor::addedAircraft, as it contains client information // use readyForModelMatching instead of CAirspaceMonitor::addedAircraft, as it contains client information
bool c = connect(networkContext, &IContextNetwork::readyForModelMatching, this, &CContextSimulator::ps_addRemoteAircraft); bool c = connect(networkContext, &IContextNetwork::readyForModelMatching, this, &CContextSimulator::ps_addRemoteAircraft);
Q_ASSERT(c); Q_ASSERT(c);
c = connect(networkContext, &IContextNetwork::changedAircraftSituation, this, &CContextSimulator::ps_addAircraftSituation);
Q_ASSERT(c);
c = connect(networkContext, &IContextNetwork::removedAircraft, this, &CContextSimulator::ps_removeRemoteAircraft); c = connect(networkContext, &IContextNetwork::removedAircraft, this, &CContextSimulator::ps_removeRemoteAircraft);
Q_ASSERT(c); Q_ASSERT(c);
for (const auto &aircraft : networkContext->getAircraftInRange()) c = connect(networkContext, &IContextNetwork::changedRenderedAircraftModel, this->m_simulator, &ISimulator::changeRenderedAircraftModel);
Q_ASSERT(c);
c = connect(networkContext, &IContextNetwork::changedAircraftEnabled, this->m_simulator, &ISimulator::changeAircraftEnabled);
Q_ASSERT(c);
for (const CSimulatedAircraft &simAircraft : networkContext->getAircraftInRange())
{ {
Q_ASSERT(!aircraft.getCallsign().isEmpty()); Q_ASSERT(!simAircraft.getCallsign().isEmpty());
CClient client = networkContext->getOtherClients().findFirstByCallsign(aircraft.getCallsign());
CSimulatedAircraft simAircraft(aircraft);
simAircraft.setClient(client);
m_simulator->addRemoteAircraft(simAircraft); m_simulator->addRemoteAircraft(simAircraft);
} }
@@ -321,7 +323,7 @@ namespace BlackCore
{ {
Q_ASSERT(this->m_simulator); Q_ASSERT(this->m_simulator);
if (!this->m_simulator) return; if (!this->m_simulator) return;
this->m_simulator->removeRemoteAircraft(callsign); this->m_simulator->removeRenderedAircraft(callsign);
} }
void CContextSimulator::ps_onConnectionStatusChanged(ISimulator::ConnectionStatus status) void CContextSimulator::ps_onConnectionStatusChanged(ISimulator::ConnectionStatus status)

View File

@@ -74,23 +74,23 @@ namespace BlackCore
//! \copydoc IContextSimulator::getInstalledModels //! \copydoc IContextSimulator::getInstalledModels
virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override; virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override;
//! \copydoc IContextSimulator::getRemoteAircraft //! \copydoc IContextSimulator::getInstalledModelsStartingWith
virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const override; virtual BlackMisc::Simulation::CAircraftModelList getInstalledModelsStartingWith(const QString modelString) const override;
//! \copydoc IContextSimulator::changeRemoteAircraft //! \copydoc IContextSimulator::getIcaoForModelString
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changedValues) override; virtual BlackMisc::Aviation::CAircraftIcao getIcaoForModelString(const QString &modelString) const override;
//! \copydoc IContextSimulator::setTimeSynchronization //! \copydoc IContextSimulator::setTimeSynchronization
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override; virtual bool setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override;
//! \copydoc IContextSimulator::isTimeSynchronized //! \copydoc IContextSimulator::isTimeSynchronized
virtual bool isTimeSynchronized() const override; virtual bool isTimeSynchronized() const override;
//! \copydoc IContextSimulator::getMaxRenderedRemoteAircraft //! \copydoc IContextSimulator::getMaxRenderedAircraft
virtual int getMaxRenderedRemoteAircraft() const override; virtual int getMaxRenderedAircraft() const override;
//! \copydoc IContextSimulator::setMaxRenderedRemoteAircraft //! \copydoc IContextSimulator::setMaxRenderedAircraft
virtual void setMaxRenderedRemoteAircraft(int number) override; virtual void setMaxRenderedAircraft(int number) override;
//! \copydoc IContextSimulator::getTimeSynchronizationOffset //! \copydoc IContextSimulator::getTimeSynchronizationOffset
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override;

View File

@@ -51,9 +51,6 @@ namespace BlackCore
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
"modelMatchingCompleted", this, SIGNAL(modelMatchingCompleted(BlackMisc::Simulation::CSimulatedAircraft))); "modelMatchingCompleted", this, SIGNAL(modelMatchingCompleted(BlackMisc::Simulation::CSimulatedAircraft)));
Q_ASSERT(s); Q_ASSERT(s);
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
"remoteAircraftChanged", this, SIGNAL(remoteAircraftChanged(BlackMisc::Simulation::CSimulatedAircraft)));
Q_ASSERT(s);
Q_UNUSED(s); Q_UNUSED(s);
} }
@@ -97,14 +94,14 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CAircraftModelList>(QLatin1Literal("getInstalledModels")); return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CAircraftModelList>(QLatin1Literal("getInstalledModels"));
} }
CSimulatedAircraftList CContextSimulatorProxy::getRemoteAircraft() const CAircraftModelList CContextSimulatorProxy::getInstalledModelsStartingWith(const QString modelString) const
{ {
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatedAircraftList>(QLatin1Literal("getRemoteAircraft")); return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CAircraftModelList>(QLatin1Literal("getInstalledModelsStartingWith"));
} }
int CContextSimulatorProxy::changeRemoteAircraft(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues) CAircraftIcao CContextSimulatorProxy::getIcaoForModelString(const QString &modelString) const
{ {
return m_dBusInterface->callDBusRet<int>(QLatin1Literal("changeRemoteAircraft"), changedAircraft, changedValues); return m_dBusInterface->callDBusRet<CAircraftIcao>(QLatin1Literal("getIcaoForModelString"), modelString);
} }
BlackSim::CSimulatorInfo CContextSimulatorProxy::getSimulatorInfo() const BlackSim::CSimulatorInfo CContextSimulatorProxy::getSimulatorInfo() const
@@ -112,9 +109,9 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<BlackSim::CSimulatorInfo>(QLatin1Literal("getSimulatorInfo")); return m_dBusInterface->callDBusRet<BlackSim::CSimulatorInfo>(QLatin1Literal("getSimulatorInfo"));
} }
void CContextSimulatorProxy::setTimeSynchronization(bool enable, CTime offset) bool CContextSimulatorProxy::setTimeSynchronization(bool enable, CTime offset)
{ {
m_dBusInterface->callDBus(QLatin1Literal("setTimeSynchronization"), enable, offset); return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("setTimeSynchronization"), enable, offset);
} }
bool CContextSimulatorProxy::isTimeSynchronized() const bool CContextSimulatorProxy::isTimeSynchronized() const
@@ -122,14 +119,14 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isTimeSynchronized")); return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isTimeSynchronized"));
} }
void CContextSimulatorProxy::setMaxRenderedRemoteAircraft(int number) void CContextSimulatorProxy::setMaxRenderedAircraft(int number)
{ {
m_dBusInterface->callDBus(QLatin1Literal("setMaxRenderedRemoteAircraft"), number); m_dBusInterface->callDBus(QLatin1Literal("setMaxRenderedRemoteAircraft"), number);
} }
int CContextSimulatorProxy::getMaxRenderedRemoteAircraft() const int CContextSimulatorProxy::getMaxRenderedAircraft() const
{ {
return m_dBusInterface->callDBusRet<int>(QLatin1Literal("getMaxRenderedRemoteAircraft")); return m_dBusInterface->callDBusRet<int>(QLatin1Literal("getMaxRenderedAircraft"));
} }
CTime CContextSimulatorProxy::getTimeSynchronizationOffset() const CTime CContextSimulatorProxy::getTimeSynchronizationOffset() const

View File

@@ -74,26 +74,26 @@ namespace BlackCore
//! \copydoc IContextSimulator::getInstalledModels() //! \copydoc IContextSimulator::getInstalledModels()
virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override; virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override;
//! \copydoc IContextSimulator::getRemoteAircraft //! \copydoc IContextSimulator::getInstalledModelsStartingWith
virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const override; virtual BlackMisc::Simulation::CAircraftModelList getInstalledModelsStartingWith(const QString modelString) const override;
//! \copydoc IContextSimulator::changeRemoteAircraft //! \copydoc IContextSimulator::getIcaoForModelString
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changedValues) override; virtual BlackMisc::Aviation::CAircraftIcao getIcaoForModelString(const QString &modelString) const override;
//! \copydoc IContextSimulator::getSimulatorInfo //! \copydoc IContextSimulator::getSimulatorInfo
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override; virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
//! \copydoc IContextSimulator::setTimeSynchronization //! \copydoc IContextSimulator::setTimeSynchronization
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override; virtual bool setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override;
//! \copydoc IContextSimulator::isTimeSynchronized //! \copydoc IContextSimulator::isTimeSynchronized
virtual bool isTimeSynchronized() const override; virtual bool isTimeSynchronized() const override;
//! \copydoc IContextSimulator::getMaxRenderedRemoteAircraft //! \copydoc IContextSimulator::getMaxRenderedAircraft
virtual int getMaxRenderedRemoteAircraft() const override; virtual int getMaxRenderedAircraft() const override;
//! \copydoc IContextSimulator::setMaxRenderedRemoteAircraft //! \copydoc IContextSimulator::setMaxRenderedRemoteAircraft
virtual void setMaxRenderedRemoteAircraft(int number) override; virtual void setMaxRenderedAircraft(int number) override;
//! \copydoc IContextSimulator::getTimeSynchronizationOffset //! \copydoc IContextSimulator::getTimeSynchronizationOffset
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override;