mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-04 00:16:51 +08:00
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:
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user