refs #812, use individual signals for web services

* trigger other operations directly when data have been read (do not wait for "all data read")
* avoid retriggering for no reason
* new entity flag for all data req. for model matching
This commit is contained in:
Klaus Basan
2016-11-19 22:25:49 +01:00
parent 10d43798b0
commit 1f57f7ca61
9 changed files with 97 additions and 17 deletions

View File

@@ -71,6 +71,8 @@ namespace BlackCore
if (sApp && sApp->getWebDataServices()) if (sApp && sApp->getWebDataServices())
{ {
connect(sApp->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, &CSimulatorCommon::ps_allSwiftDataRead); connect(sApp->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, &CSimulatorCommon::ps_allSwiftDataRead);
connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbAirportsRead, this, &CSimulatorCommon::ps_airportsRead);
connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbModelMatchingEntities, this, &CSimulatorCommon::ps_modelMatchingEntities);
} }
// info // info
@@ -215,7 +217,7 @@ namespace BlackCore
else else
{ {
// we wait for the data // we wait for the data
connect(sApp->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, [ = ] connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbModelMatchingEntities, this, [ = ]
{ {
this->reverseLookupAndUpdateOwnAircraftModel(model); this->reverseLookupAndUpdateOwnAircraftModel(model);
}); });
@@ -246,6 +248,16 @@ namespace BlackCore
// void // void
} }
void CSimulatorCommon::ps_modelMatchingEntities()
{
// void
}
void CSimulatorCommon::ps_airportsRead()
{
// void
}
CAircraftModel CSimulatorCommon::getDefaultModel() const CAircraftModel CSimulatorCommon::getDefaultModel() const
{ {
return m_defaultModel; return m_defaultModel;

View File

@@ -104,6 +104,12 @@ namespace BlackCore
//! All swift data read from DB //! All swift data read from DB
virtual void ps_allSwiftDataRead(); virtual void ps_allSwiftDataRead();
//! DB models read
virtual void ps_modelMatchingEntities();
//! DB Airports read
virtual void ps_airportsRead();
protected: protected:
//! Constructor //! Constructor
CSimulatorCommon(const BlackMisc::Simulation::CSimulatorPluginInfo &info, CSimulatorCommon(const BlackMisc::Simulation::CSimulatorPluginInfo &info,

View File

@@ -170,6 +170,11 @@ namespace BlackCore
return false; return false;
} }
void CWebDataServices::resetSignalFlags()
{
m_signaledEntities.clear();
}
bool CWebDataServices::hasDbAircraftData() const bool CWebDataServices::hasDbAircraftData() const
{ {
return (this->getModelsCount() > 0) && (this->getLiveriesCount() > 0) && (this->getDistributorsCount() > 0) && (this->getAircraftIcaoCodesCount() > 0); return (this->getModelsCount() > 0) && (this->getLiveriesCount() > 0) && (this->getDistributorsCount() > 0) && (this->getAircraftIcaoCodesCount() > 0);
@@ -825,6 +830,13 @@ namespace BlackCore
this); this);
} }
bool CWebDataServices::signalEntitiesRead(CEntityFlags::Entity entities)
{
if (m_signaledEntities.contains(entities)) { return false; }
m_signaledEntities.insert(entities);
return true;
}
void CWebDataServices::ps_receivedBookings(const CAtcStationList &stations) void CWebDataServices::ps_receivedBookings(const CAtcStationList &stations)
{ {
CLogMessage(this).info("Read %1 ATC bookings from network") << stations.size(); CLogMessage(this).info("Read %1 ATC bookings from network") << stations.size();
@@ -840,7 +852,7 @@ namespace BlackCore
CLogMessage(this).info("Read VATSIM data file, %1 lines") << lines; CLogMessage(this).info("Read VATSIM data file, %1 lines") << lines;
} }
void CWebDataServices::ps_readFromSwiftDb(CEntityFlags::Entity entity, CEntityFlags::ReadState state, int number) void CWebDataServices::ps_readFromSwiftDb(CEntityFlags::Entity entities, CEntityFlags::ReadState state, int number)
{ {
static const CLogCategoryList cats(CLogCategoryList(this).join({ CLogCategory::webservice()})); static const CLogCategoryList cats(CLogCategoryList(this).join({ CLogCategory::webservice()}));
@@ -850,24 +862,41 @@ namespace BlackCore
const CStatusMessage::StatusSeverity severity = CEntityFlags::flagToSeverity(state); const CStatusMessage::StatusSeverity severity = CEntityFlags::flagToSeverity(state);
if (severity == CStatusMessage::SeverityWarning) if (severity == CStatusMessage::SeverityWarning)
{ {
CLogMessage(cats).warning("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state); CLogMessage(cats).warning("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entities) << number << CEntityFlags::flagToString(state);
} }
else else
{ {
CLogMessage(cats).error("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state); CLogMessage(cats).error("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entities) << number << CEntityFlags::flagToString(state);
} }
} }
else else
{ {
CLogMessage(cats).info("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state); CLogMessage(cats).info("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entities) << number << CEntityFlags::flagToString(state);
} }
this->m_swiftDbEntitiesRead |= entity; this->m_swiftDbEntitiesRead |= entities;
const int allUsedEntities = static_cast<int>(this->allDbEntiiesForUsedReaders()); const int allUsedEntities = static_cast<int>(this->allDbEntiiesForUsedReaders());
if (((static_cast<int>(this->m_swiftDbEntitiesRead)) & allUsedEntities) == allUsedEntities) if (((static_cast<int>(this->m_swiftDbEntitiesRead)) & allUsedEntities) == allUsedEntities)
{ {
emit allSwiftDbDataRead(); emit allSwiftDbDataRead();
} }
// individual signals
if (state == CEntityFlags::ReadFinished || state == CEntityFlags::ReadFinishedRestricted)
{
if (entities.testFlag(CEntityFlags::AirportEntity) && signalEntitiesRead(CEntityFlags::AirportEntity)) { emit swiftDbAirportsRead(); }
if (entities.testFlag(CEntityFlags::AirlineIcaoEntity) && signalEntitiesRead(CEntityFlags::AirlineIcaoEntity)) { emit swiftDbAirlineIcaoRead(); }
if (entities.testFlag(CEntityFlags::AircraftIcaoEntity) && signalEntitiesRead(CEntityFlags::AircraftIcaoEntity)) { emit swiftDbAircraftIcaoRead(); }
if (entities.testFlag(CEntityFlags::ModelEntity) && signalEntitiesRead(CEntityFlags::ModelEntity)) { emit swiftDbModelsRead(); }
if (m_swiftDbEntitiesRead.testFlag(CEntityFlags::AllIcaoEntities) && signalEntitiesRead(CEntityFlags::AllIcaoEntities))
{
emit swiftDbAllIcaoEntities();
}
if (m_swiftDbEntitiesRead.testFlag(CEntityFlags::ModelMatchingEntities) && signalEntitiesRead(CEntityFlags::ModelMatchingEntities))
{
emit swiftDbModelMatchingEntities();
}
}
} }
void CWebDataServices::readDeferredInBackground(CEntityFlags::Entity entities, int delayMs) void CWebDataServices::readDeferredInBackground(CEntityFlags::Entity entities, int delayMs)

View File

@@ -350,6 +350,9 @@ namespace BlackCore
//! Can connect to swift DB? //! Can connect to swift DB?
bool canConnectSwiftDb() const; bool canConnectSwiftDb() const;
//! Reset the flags what was already signaled
void resetSignalFlags();
//! All DB data for an aircraft entity available? //! All DB data for an aircraft entity available?
bool hasDbAircraftData() const; bool hasDbAircraftData() const;
@@ -369,7 +372,32 @@ namespace BlackCore
//! All swift DB data have been read //! All swift DB data have been read
void allSwiftDbDataRead(); void allSwiftDbDataRead();
//! Header of shared file read // simplified signals
// 1) simple signature
// 2) fired direct after read, no need to wait for other entities
//! \name Simplified read signals
//! @{
//! All models read
void swiftDbModelsRead();
//! Aircraft ICAO data read
void swiftDbAircraftIcaoRead();
//! Airline ICAO data read
void swiftDbAirlineIcaoRead();
//! Airports read
void swiftDbAirportsRead();
//! All ICAO entities
void swiftDbAllIcaoEntities();
//! All entities needed for model matching
void swiftDbModelMatchingEntities();
//! @}
//! //! Header of shared file read
void sharedFileHeaderRead(BlackMisc::Network::CEntityFlags::Entity entity, const QString &fileName, bool success); void sharedFileHeaderRead(BlackMisc::Network::CEntityFlags::Entity entity, const QString &fileName, bool success);
public slots: public slots:
@@ -390,7 +418,7 @@ namespace BlackCore
void ps_vatsimDataFileRead(int lines); void ps_vatsimDataFileRead(int lines);
//! Read finished from reader //! Read finished from reader
void ps_readFromSwiftDb(BlackMisc::Network::CEntityFlags::Entity entity, BlackMisc::Network::CEntityFlags::ReadState state, int number); void ps_readFromSwiftDb(BlackMisc::Network::CEntityFlags::Entity entities, BlackMisc::Network::CEntityFlags::ReadState state, int number);
private: private:
//! Init the readers //! Init the readers
@@ -402,12 +430,16 @@ namespace BlackCore
//! Init the writers //! Init the writers
void initWriters(); void initWriters();
//! Remember this entity/those enties already have been signaled
bool signalEntitiesRead(BlackMisc::Network::CEntityFlags::Entity entities);
CWebReaderFlags::WebReader m_readers = CWebReaderFlags::WebReaderFlag::None; //!< which readers are available CWebReaderFlags::WebReader m_readers = CWebReaderFlags::WebReaderFlag::None; //!< which readers are available
BlackCore::Db::CDatabaseReaderConfigList m_dbReaderConfig; //!< how to read DB data BlackCore::Db::CDatabaseReaderConfigList m_dbReaderConfig; //!< how to read DB data
BlackMisc::Network::CEntityFlags::Entity m_entitiesPeriodicallyRead = BlackMisc::Network::CEntityFlags::NoEntity; //!< those entities which are permanently updated by timers BlackMisc::Network::CEntityFlags::Entity m_entitiesPeriodicallyRead = BlackMisc::Network::CEntityFlags::NoEntity; //!< those entities which are permanently updated by timers
BlackMisc::Network::CEntityFlags::Entity m_swiftDbEntitiesRead = BlackMisc::Network::CEntityFlags::NoEntity; //!< entities read BlackMisc::Network::CEntityFlags::Entity m_swiftDbEntitiesRead = BlackMisc::Network::CEntityFlags::NoEntity; //!< entities read
bool m_initialRead = false; //!< Initial read started bool m_initialRead = false; //!< Initial read started
int m_infoObjectTrials = 0; //!< Tried to read info objects int m_infoObjectTrials = 0; //!< Tried to read info objects
QSet<BlackMisc::Network::CEntityFlags::Entity> m_signaledEntities; //!< remember signales entites
// for reading XML and VATSIM data files // for reading XML and VATSIM data files
Vatsim::CVatsimStatusFileReader *m_vatsimStatusReader = nullptr; Vatsim::CVatsimStatusFileReader *m_vatsimStatusReader = nullptr;
@@ -420,7 +452,7 @@ namespace BlackCore
Db::CAirportDataReader *m_airportDataReader = nullptr; Db::CAirportDataReader *m_airportDataReader = nullptr;
// writing objects directly into DB // writing objects directly into DB
Db::CDatabaseWriter *m_databaseWriter = nullptr; Db::CDatabaseWriter *m_databaseWriter = nullptr;
}; };
} // namespace } // namespace

View File

@@ -36,7 +36,7 @@ namespace BlackGui
ui->le_modelString->setValidator(new CUpperCaseValidator(ui->le_modelString)); ui->le_modelString->setValidator(new CUpperCaseValidator(ui->le_modelString));
connect(ui->le_modelString, &QLineEdit::editingFinished, this, &CAircraftModelStringCompleter::ps_textChanged); connect(ui->le_modelString, &QLineEdit::editingFinished, this, &CAircraftModelStringCompleter::ps_textChanged);
connect(sGui->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, &CAircraftModelStringCompleter::ps_swiftWebDataRead); connect(sGui->getWebDataServices(), &CWebDataServices::swiftDbModelsRead, this, &CAircraftModelStringCompleter::ps_swiftModelDataRead);
connect(ui->rb_Db, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui); connect(ui->rb_Db, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui);
connect(ui->rb_ModelSet, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui); connect(ui->rb_ModelSet, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui);
connect(ui->rb_OwnModels, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui); connect(ui->rb_OwnModels, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui);
@@ -156,7 +156,7 @@ namespace BlackGui
this->ps_initGui(); this->ps_initGui();
} }
void CAircraftModelStringCompleter::ps_swiftWebDataRead() void CAircraftModelStringCompleter::ps_swiftModelDataRead()
{ {
this->ps_initGui(); this->ps_initGui();
} }

View File

@@ -92,7 +92,7 @@ namespace BlackGui
void ps_simulatorConnected(int status); void ps_simulatorConnected(int status);
//! All swift data have been read //! All swift data have been read
void ps_swiftWebDataRead(); void ps_swiftModelDataRead();
private: private:
QScopedPointer <Ui::CAircraftModelStringCompleter> ui; QScopedPointer <Ui::CAircraftModelStringCompleter> ui;

View File

@@ -49,6 +49,7 @@ namespace BlackMisc
AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes
AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries
DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded
ModelMatchingEntities = AllIcaoEntities | LiveryEntity | ModelEntity, //!< all needed for model matching
AllDbEntities = AllIcaoAndCountries | DistributorLiveryModel | InfoObjectEntity | AirportEntity, //!< All DB stuff AllDbEntities = AllIcaoAndCountries | DistributorLiveryModel | InfoObjectEntity | AirportEntity, //!< All DB stuff
AllDbEntitiesNoInfoObjects = AllIcaoAndCountries | DistributorLiveryModel | AirportEntity, //!< All DB entities, no info objects AllDbEntitiesNoInfoObjects = AllIcaoAndCountries | DistributorLiveryModel | AirportEntity, //!< All DB entities, no info objects
AllDbEntitiesNoInfoObjectsNoAirports = AllIcaoAndCountries | DistributorLiveryModel //!< All DB entities, no info objects and airports AllDbEntitiesNoInfoObjectsNoAirports = AllIcaoAndCountries | DistributorLiveryModel //!< All DB entities, no info objects and airports

View File

@@ -110,14 +110,14 @@ namespace BlackSimPlugin
return true; return true;
} }
void CSimulatorFsCommon::ps_allSwiftDataRead() void CSimulatorFsCommon::ps_airportsRead()
{ {
const CAirportList webServiceAirports = this->getWebServiceAirports(); const CAirportList webServiceAirports = this->getWebServiceAirports();
if (!webServiceAirports.isEmpty()) if (!webServiceAirports.isEmpty())
{ {
this->m_airportsInRangeFromSimulator.updateMissingParts(webServiceAirports); this->m_airportsInRangeFromSimulator.updateMissingParts(webServiceAirports);
} }
CSimulatorCommon::ps_allSwiftDataRead(); CSimulatorCommon::ps_airportsRead();
} }
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -47,7 +47,7 @@ namespace BlackSimPlugin
protected slots: protected slots:
//! \copydoc BlackCore::CSimulatorCommon::ps_allSwiftDataRead //! \copydoc BlackCore::CSimulatorCommon::ps_allSwiftDataRead
virtual void ps_allSwiftDataRead() override; virtual void ps_airportsRead() override;
protected: protected:
//! Constructor //! Constructor