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

View File

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

View File

@@ -170,6 +170,11 @@ namespace BlackCore
return false;
}
void CWebDataServices::resetSignalFlags()
{
m_signaledEntities.clear();
}
bool CWebDataServices::hasDbAircraftData() const
{
return (this->getModelsCount() > 0) && (this->getLiveriesCount() > 0) && (this->getDistributorsCount() > 0) && (this->getAircraftIcaoCodesCount() > 0);
@@ -825,6 +830,13 @@ namespace BlackCore
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)
{
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;
}
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()}));
@@ -850,24 +862,41 @@ namespace BlackCore
const CStatusMessage::StatusSeverity severity = CEntityFlags::flagToSeverity(state);
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
{
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
{
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());
if (((static_cast<int>(this->m_swiftDbEntitiesRead)) & allUsedEntities) == allUsedEntities)
{
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)

View File

@@ -350,6 +350,9 @@ namespace BlackCore
//! Can connect to swift DB?
bool canConnectSwiftDb() const;
//! Reset the flags what was already signaled
void resetSignalFlags();
//! All DB data for an aircraft entity available?
bool hasDbAircraftData() const;
@@ -369,7 +372,32 @@ namespace BlackCore
//! All swift DB data have been read
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);
public slots:
@@ -390,7 +418,7 @@ namespace BlackCore
void ps_vatsimDataFileRead(int lines);
//! 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:
//! Init the readers
@@ -402,12 +430,16 @@ namespace BlackCore
//! Init the writers
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
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_swiftDbEntitiesRead = BlackMisc::Network::CEntityFlags::NoEntity; //!< entities read
bool m_initialRead = false; //!< Initial read started
int m_infoObjectTrials = 0; //!< Tried to read info objects
bool m_initialRead = false; //!< Initial read started
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
Vatsim::CVatsimStatusFileReader *m_vatsimStatusReader = nullptr;
@@ -420,7 +452,7 @@ namespace BlackCore
Db::CAirportDataReader *m_airportDataReader = nullptr;
// writing objects directly into DB
Db::CDatabaseWriter *m_databaseWriter = nullptr;
Db::CDatabaseWriter *m_databaseWriter = nullptr;
};
} // namespace

View File

@@ -36,7 +36,7 @@ namespace BlackGui
ui->le_modelString->setValidator(new CUpperCaseValidator(ui->le_modelString));
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_ModelSet, &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();
}
void CAircraftModelStringCompleter::ps_swiftWebDataRead()
void CAircraftModelStringCompleter::ps_swiftModelDataRead()
{
this->ps_initGui();
}

View File

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

View File

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

View File

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

View File

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