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