From 898b4fc9354d2d5d8b9f24384357b9c37a5576f2 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 23 Sep 2015 19:38:04 +0200 Subject: [PATCH] refs #452, changed DB read signals to combined signal with flags --- src/blackcore/context_network.h | 18 ++---------- src/blackcore/context_network_impl.cpp | 39 ++++++++++++++++--------- src/blackcore/context_network_impl.h | 11 +++++-- src/blackcore/context_network_proxy.cpp | 1 - 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/blackcore/context_network.h b/src/blackcore/context_network.h index 19c5c3c0c..8167a22d3 100644 --- a/src/blackcore/context_network.h +++ b/src/blackcore/context_network.h @@ -20,6 +20,7 @@ #include "blackmisc/simulation/simulatedaircraftlist.h" #include "blackmisc/statusmessage.h" #include "blackmisc/statusmessagelist.h" +#include "blackmisc/network/dbflags.h" #include "blackmisc/network/textmessagelist.h" #include "blackmisc/network/userlist.h" #include "blackmisc/network/clientlist.h" @@ -39,7 +40,6 @@ namespace BlackCore { - //! Network context proxy class BLACKCORE_EXPORT IContextNetwork : public CContext { @@ -144,20 +144,8 @@ namespace BlackCore //! Metar read void vatsimMetarsRead(int number); - //! ICAO codes read - void aircraftIcaoCodeRead(int number); - - //! ICAO codes read - void airlineIcaoCodeRead(int number); - - //! Liveries read - void liveriesRead(int number); - - //! Distributors read - void distributorsRead(int number); - - //! Number of models read - void modelsRead(int number); + //! swift DB data read + void swiftDbDataRead(BlackMisc::Network::CDbFlags::Entity entity, BlackMisc::Network::CDbFlags::ReadState, int number); public slots: //! Reload bookings from booking service diff --git a/src/blackcore/context_network_impl.cpp b/src/blackcore/context_network_impl.cpp index 9dff18a0b..270cf5f18 100644 --- a/src/blackcore/context_network_impl.cpp +++ b/src/blackcore/context_network_impl.cpp @@ -16,7 +16,7 @@ #include "network_vatlib.h" #include "vatsim_metar_reader.h" #include "airspace_monitor.h" -#include "web_datareader.h" +#include "webdataservices.h" #include "blackmisc/networkutils.h" #include "blackmisc/aviation/atcstationlist.h" #include "blackmisc/logmessage.h" @@ -58,20 +58,18 @@ namespace BlackCore this->m_dataUpdateTimer->start(30 * 1000); // 3. data reader - this->m_webDataReader = new CWebDataReader(CWebDataReader::AllReaders, this); + this->m_webDataReader = new CWebDataServices(CWebReaderFlags::AllReaders, this); this->m_webReaderSignalConnections = this->m_webDataReader->connectVatsimDataSignals( + this, // the object here must be the same as in the bind std::bind(&CContextNetwork::vatsimBookingsRead, this, std::placeholders::_1), std::bind(&CContextNetwork::vatsimDataFileRead, this, std::placeholders::_1), std::bind(&CContextNetwork::vatsimMetarsRead, this, std::placeholders::_1)); this->m_webReaderSignalConnections.append( this->m_webDataReader->connectSwiftDatabaseSignals( this, // the object here must be the same as in the bind - std::bind(&CContextNetwork::aircraftIcaoCodeRead, this, std::placeholders::_1), - std::bind(&CContextNetwork::airlineIcaoCodeRead, this, std::placeholders::_1), - std::bind(&CContextNetwork::liveriesRead, this, std::placeholders::_1), - std::bind(&CContextNetwork::distributorsRead, this, std::placeholders::_1), - std::bind(&CContextNetwork::modelsRead, this, std::placeholders::_1) - )); + std::bind(&CContextNetwork::swiftDbDataRead, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3) + ) + ); this->m_webDataReader->readAllInBackground(1000); // 4. Airspace contents @@ -143,7 +141,7 @@ namespace BlackCore void CContextNetwork::gracefulShutdown() { this->disconnect(); // all signals - this->m_webReaderSignalConnections.clear(); // disconnect + this->disconnectReaderSignals(); // disconnect this->m_webDataReader->gracefulShutdown(); if (this->isConnected()) { this->disconnectFromNetwork(); } @@ -158,7 +156,7 @@ namespace BlackCore { return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, "Invalid user credentials"); } - else if (!this->ownAircraft().getIcaoInfo().hasAircraftDesignator()) + else if (!this->ownAircraft().getAircraftIcaoCode().hasDesignator()) { return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, "Invalid ICAO data for own aircraft"); } @@ -180,11 +178,11 @@ namespace BlackCore this->m_airspace->setConnected(true); INetwork::LoginMode mode = static_cast(loginMode); this->getIContextOwnAircraft()->updateOwnAircraftPilot(server.getUser()); - const CAircraft ownAircraft = this->ownAircraft(); + const CSimulatedAircraft ownAircraft(this->ownAircraft()); this->m_network->presetServer(server); this->m_network->presetLoginMode(mode); this->m_network->presetCallsign(ownAircraft.getCallsign()); - this->m_network->presetIcaoCodes(ownAircraft.getIcaoInfo()); + this->m_network->presetIcaoCodes(ownAircraft); if (getIContextSimulator()) { this->m_network->presetSimulatorInfo(getIContextSimulator()->getSimulatorPluginInfo()); @@ -469,6 +467,15 @@ namespace BlackCore return this->getRuntime()->getCContextOwnAircraft()->getOwnAircraft(); } + void CContextNetwork::disconnectReaderSignals() + { + for (QMetaObject::Connection c : m_webReaderSignalConnections) + { + QObject::disconnect(c); + } + m_webReaderSignalConnections.clear(); + } + CAtcStationList CContextNetwork::getAtcStationsOnline() const { if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } @@ -496,7 +503,13 @@ namespace BlackCore CSimulatedAircraft CContextNetwork::getAircraftInRangeForCallsign(const CCallsign &callsign) const { if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; } - return this->m_airspace->getAircraftInRange().findFirstByCallsign(callsign); + return this->m_airspace->getAircraftInRangeForCallsign(callsign); + } + + CAircraftModel CContextNetwork::getAircraftInRangeModelForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const + { + if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; } + return this->m_airspace->getAircraftInRangeModelForCallsign(callsign); } CAtcStation CContextNetwork::getOnlineStationForCallsign(const CCallsign &callsign) const diff --git a/src/blackcore/context_network_impl.h b/src/blackcore/context_network_impl.h index f8b67a2ea..3f7e8be5b 100644 --- a/src/blackcore/context_network_impl.h +++ b/src/blackcore/context_network_impl.h @@ -33,8 +33,8 @@ namespace BlackCore { class CAirspaceMonitor; - class CWebDataReader; class CVatsimMetarReader; + class CWebDataServices; //! Network context implementation class BLACKCORE_EXPORT CContextNetwork : @@ -131,6 +131,10 @@ namespace BlackCore //! \ingroup remoteaircraftprovider virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftInRangeForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; + //! \copydoc IContextNetwork::getAircraftinRangeModelForCallsign + //! \ingroup remoteaircraftprovider + virtual BlackMisc::Simulation::CAircraftModel getAircraftInRangeModelForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; + //! \copydoc IContextNetwork::getOnlineStationForCallsign virtual BlackMisc::Aviation::CAtcStation getOnlineStationForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; @@ -236,7 +240,7 @@ namespace BlackCore private: CAirspaceMonitor *m_airspace = nullptr; INetwork *m_network = nullptr; - CWebDataReader *m_webDataReader = nullptr; //!< web service readers + CWebDataServices *m_webDataReader = nullptr; //!< web service readers QList m_webReaderSignalConnections; INetwork::ConnectionStatus m_currentStatus = INetwork::Disconnected; //!< used to detect pending connections QTimer *m_dataUpdateTimer = nullptr; //!< general updates such as ATIS, frequencies, see requestDataUpdates() @@ -250,6 +254,9 @@ namespace BlackCore //! Own aircraft from \sa CContextOwnAircraft const BlackMisc::Simulation::CSimulatedAircraft ownAircraft() const; + //! Disconnect all signals from swift DB readers + void disconnectReaderSignals(); + private slots: //! Update METAR collection void ps_updateMetars(const BlackMisc::Weather::CMetarSet &metars); diff --git a/src/blackcore/context_network_proxy.cpp b/src/blackcore/context_network_proxy.cpp index 4775b75e5..58b667f74 100644 --- a/src/blackcore/context_network_proxy.cpp +++ b/src/blackcore/context_network_proxy.cpp @@ -20,7 +20,6 @@ using namespace BlackMisc::Weather; namespace BlackCore { - /* * Constructor for DBus */