refs #844, react on unchanged bookings in airspace monitor

* renamed functions for consistency
* fixed typos/docu
This commit is contained in:
Klaus Basan
2016-12-29 23:44:57 +01:00
committed by Mathew Sutcliffe
parent 85ca3b7a1a
commit 82ab88b5a8
2 changed files with 48 additions and 27 deletions

View File

@@ -93,7 +93,8 @@ namespace BlackCore
// AutoConnection: this should also avoid race conditions by updating the bookings // AutoConnection: this should also avoid race conditions by updating the bookings
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing data reader"); Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing data reader");
this->connect(sApp->getWebDataServices()->getBookingReader(), &CVatsimBookingReader::atcBookingsRead, this, &CAirspaceMonitor::ps_receivedBookings); this->connect(sApp->getWebDataServices()->getBookingReader(), &CVatsimBookingReader::atcBookingsRead, this, &CAirspaceMonitor::ps_receivedAtcBookings);
this->connect(sApp->getWebDataServices()->getBookingReader(), &CVatsimBookingReader::atcBookingsReadUnchanged, this, &CAirspaceMonitor::ps_readUnchangedAtcBookings);
this->connect(sApp->getWebDataServices()->getVatsimDataFileReader(), &CVatsimDataFileReader::dataFileRead, this, &CAirspaceMonitor::ps_receivedDataFile); this->connect(sApp->getWebDataServices()->getVatsimDataFileReader(), &CVatsimDataFileReader::dataFileRead, this, &CAirspaceMonitor::ps_receivedDataFile);
// Force snapshot in the main event loop // Force snapshot in the main event loop
@@ -468,6 +469,13 @@ namespace BlackCore
} }
} }
void CAirspaceMonitor::requestAtcBookingsUpdate()
{
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "missing reader");
sApp->getWebDataServices()->readInBackground(BlackMisc::Network::CEntityFlags::BookingEntity);
this->m_bookingsRequested = true;
}
void CAirspaceMonitor::testCreateDummyOnlineAtcStations(int number) void CAirspaceMonitor::testCreateDummyOnlineAtcStations(int number)
{ {
if (number < 1) { return; } if (number < 1) { return; }
@@ -508,8 +516,8 @@ namespace BlackCore
{ {
// very likely and ATC callsign // very likely and ATC callsign
vm = CPropertyIndexVariantMap({CAtcStation::IndexController, CUser::IndexRealName}, realname); vm = CPropertyIndexVariantMap({CAtcStation::IndexController, CUser::IndexRealName}, realname);
const int c1 = this->updateOnlineStations(callsign, vm, false, true); const int c1 = this->updateOnlineStation(callsign, vm, false, true);
const int c2 = this->updateBookedStations(callsign, vm, false, true); const int c2 = this->updateBookedStation(callsign, vm, false, true);
wasAtc = c1 > 0 || c2 > 0; wasAtc = c1 > 0 || c2 > 0;
} }
@@ -596,7 +604,7 @@ namespace BlackCore
this->m_reverseLookupMessages.remove(callsign); this->m_reverseLookupMessages.remove(callsign);
} }
void CAirspaceMonitor::ps_receivedBookings(const CAtcStationList &bookedStations) void CAirspaceMonitor::ps_receivedAtcBookings(const CAtcStationList &bookedStations)
{ {
Q_ASSERT(CThreadUtils::isCurrentThreadObjectThread(this)); Q_ASSERT(CThreadUtils::isCurrentThreadObjectThread(this));
if (bookedStations.isEmpty()) if (bookedStations.isEmpty())
@@ -613,9 +621,17 @@ namespace BlackCore
} }
this->m_atcStationsBooked = newBookedStations; this->m_atcStationsBooked = newBookedStations;
} }
this->m_bookingsRequested = false; // we already emit here
emit this->changedAtcStationsBooked(); // all booked stations reloaded emit this->changedAtcStationsBooked(); // all booked stations reloaded
} }
void CAirspaceMonitor::ps_readUnchangedAtcBookings()
{
if (!this->m_bookingsRequested) { return; }
this->m_bookingsRequested = false;
emit this->changedAtcStationsBooked(); // treat as stations were changed
}
void CAirspaceMonitor::ps_receivedDataFile() void CAirspaceMonitor::ps_receivedDataFile()
{ {
Q_ASSERT(CThreadUtils::isCurrentThreadObjectThread(this)); Q_ASSERT(CThreadUtils::isCurrentThreadObjectThread(this));
@@ -728,7 +744,7 @@ namespace BlackCore
} }
// booked // booked
this->updateBookedStations(callsign, CPropertyIndexVariantMap(CAtcStation::IndexIsOnline, CVariant::from(false)), true, false); this->updateBookedStation(callsign, CPropertyIndexVariantMap(CAtcStation::IndexIsOnline, CVariant::from(false)), true, false);
} }
void CAirspaceMonitor::ps_atisReceived(const CCallsign &callsign, const CInformationMessage &atisMessage) void CAirspaceMonitor::ps_atisReceived(const CCallsign &callsign, const CInformationMessage &atisMessage)
@@ -736,11 +752,11 @@ namespace BlackCore
Q_ASSERT(CThreadUtils::isCurrentThreadObjectThread(this)); Q_ASSERT(CThreadUtils::isCurrentThreadObjectThread(this));
if (!this->isConnected() || callsign.isEmpty()) return; if (!this->isConnected() || callsign.isEmpty()) return;
CPropertyIndexVariantMap vm(CAtcStation::IndexAtis, CVariant::from(atisMessage)); CPropertyIndexVariantMap vm(CAtcStation::IndexAtis, CVariant::from(atisMessage));
this->updateOnlineStations(callsign, vm); this->updateOnlineStation(callsign, vm);
// receiving an ATIS means station is online, update in bookings // receiving an ATIS means station is online, update in bookings
vm.addValue(CAtcStation::IndexIsOnline, true); vm.addValue(CAtcStation::IndexIsOnline, true);
this->updateBookedStations(callsign, vm); this->updateBookedStation(callsign, vm);
} }
void CAirspaceMonitor::ps_atisVoiceRoomReceived(const CCallsign &callsign, const QString &url) void CAirspaceMonitor::ps_atisVoiceRoomReceived(const CCallsign &callsign, const QString &url)
@@ -749,7 +765,7 @@ namespace BlackCore
if (!this->isConnected()) { return; } if (!this->isConnected()) { return; }
const QString trimmedUrl = url.trimmed(); const QString trimmedUrl = url.trimmed();
CPropertyIndexVariantMap vm({ CAtcStation::IndexVoiceRoom, CVoiceRoom::IndexUrl }, trimmedUrl); CPropertyIndexVariantMap vm({ CAtcStation::IndexVoiceRoom, CVoiceRoom::IndexUrl }, trimmedUrl);
const int changedOnline = this->updateOnlineStations(callsign, vm, true, true); const int changedOnline = this->updateOnlineStation(callsign, vm, true, true);
if (changedOnline < 1) { return; } if (changedOnline < 1) { return; }
Q_ASSERT(changedOnline == 1); Q_ASSERT(changedOnline == 1);
@@ -757,7 +773,7 @@ namespace BlackCore
emit this->changedAtcStationOnlineConnectionStatus(station, true); // send when voice room url is available emit this->changedAtcStationOnlineConnectionStatus(station, true); // send when voice room url is available
vm.addValue(CAtcStation::IndexIsOnline, true); // with voice room ATC is online vm.addValue(CAtcStation::IndexIsOnline, true); // with voice room ATC is online
this->updateBookedStations(callsign, vm); this->updateBookedStation(callsign, vm);
// receiving voice room means ATC has voice // receiving voice room means ATC has voice
vm = CPropertyIndexVariantMap(CClient::IndexVoiceCapabilities, CVariant::from(CVoiceCapabilities::fromVoiceCapabilities(CVoiceCapabilities::Voice))); vm = CPropertyIndexVariantMap(CClient::IndexVoiceCapabilities, CVariant::from(CVoiceCapabilities::fromVoiceCapabilities(CVoiceCapabilities::Voice)));
@@ -780,8 +796,8 @@ namespace BlackCore
logoffDateTime.setTime(QTime(h, m)); logoffDateTime.setTime(QTime(h, m));
const CPropertyIndexVariantMap vm(CAtcStation::IndexBookedUntil, CVariant(logoffDateTime)); const CPropertyIndexVariantMap vm(CAtcStation::IndexBookedUntil, CVariant(logoffDateTime));
this->updateOnlineStations(callsign, vm); this->updateOnlineStation(callsign, vm);
this->updateBookedStations(callsign, vm); this->updateBookedStation(callsign, vm);
} }
} }
@@ -876,7 +892,7 @@ namespace BlackCore
this->addReverseLookupMessage(callsign, m); this->addReverseLookupMessage(callsign, m);
} }
bool CAirspaceMonitor::addNewAircraftinRange(const CSimulatedAircraft &aircraft) bool CAirspaceMonitor::addNewAircraftInRange(const CSimulatedAircraft &aircraft)
{ {
const CCallsign callsign = aircraft.getCallsign(); const CCallsign callsign = aircraft.getCallsign();
Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Missing callsign"); Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Missing callsign");
@@ -939,7 +955,7 @@ namespace BlackCore
return c; return c;
} }
int CAirspaceMonitor::updateOnlineStations(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues, bool sendSignal) int CAirspaceMonitor::updateOnlineStation(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues, bool sendSignal)
{ {
const int c = this->m_atcStationsOnline.applyIfCallsign(callsign, vm, skipEqualValues); const int c = this->m_atcStationsOnline.applyIfCallsign(callsign, vm, skipEqualValues);
if (c > 0 && sendSignal) if (c > 0 && sendSignal)
@@ -949,7 +965,7 @@ namespace BlackCore
return c; return c;
} }
int CAirspaceMonitor::updateBookedStations(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues, bool sendSignal) int CAirspaceMonitor::updateBookedStation(const CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues, bool sendSignal)
{ {
// do not used applyFirst here, more stations wit callsign at a time // do not used applyFirst here, more stations wit callsign at a time
const int c = this->m_atcStationsBooked.applyIfCallsign(callsign, vm, skipEqualValues); const int c = this->m_atcStationsBooked.applyIfCallsign(callsign, vm, skipEqualValues);
@@ -983,7 +999,7 @@ namespace BlackCore
else else
{ {
aircraft = CAirspaceMonitor::initNewAircraft(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log); aircraft = CAirspaceMonitor::initNewAircraft(callsign, aircraftIcao, airlineIcao, livery, modelString, type, log);
this->addNewAircraftinRange(aircraft); this->addNewAircraftInRange(aircraft);
} }
return aircraft; return aircraft;
} }
@@ -1016,7 +1032,7 @@ namespace BlackCore
aircraft.setCallsign(callsign); aircraft.setCallsign(callsign);
aircraft.setSituation(situation); aircraft.setSituation(situation);
aircraft.setTransponder(transponder); aircraft.setTransponder(transponder);
this->addNewAircraftinRange(aircraft); this->addNewAircraftInRange(aircraft);
this->sendInitialPilotQueries(callsign, !hasFsInnPacket); this->sendInitialPilotQueries(callsign, !hasFsInnPacket);
// new client, there is a chance it has been already created by custom packet // new client, there is a chance it has been already created by custom packet

View File

@@ -140,10 +140,10 @@ namespace BlackCore
//! \threadsafe //! \threadsafe
bool isAircraftInRange(const BlackMisc::Aviation::CCallsign &callsign) const; bool isAircraftInRange(const BlackMisc::Aviation::CCallsign &callsign) const;
//! Returns the current online ATC stations //! Returns the current online ATC stations (consolidated with booked stations)
BlackMisc::Aviation::CAtcStationList getAtcStationsOnline() const { return m_atcStationsOnline; } BlackMisc::Aviation::CAtcStationList getAtcStationsOnline() const { return m_atcStationsOnline; }
//! Returns the current booked ATC stations //! Returns the current booked ATC stations (consolidated with online stations)
BlackMisc::Aviation::CAtcStationList getAtcStationsBooked() const { return m_atcStationsBooked; } BlackMisc::Aviation::CAtcStationList getAtcStationsBooked() const { return m_atcStationsBooked; }
//! Returns the closest ATC station operating on the given frequency, if any //! Returns the closest ATC station operating on the given frequency, if any
@@ -158,6 +158,9 @@ namespace BlackCore
//! Request to update ATC stations' ATIS data from the network //! Request to update ATC stations' ATIS data from the network
void requestAtisUpdates(); void requestAtisUpdates();
//! Request updates of bookings
void requestAtcBookingsUpdate();
//! Create dummy entries for performance tests //! Create dummy entries for performance tests
void testCreateDummyOnlineAtcStations(int number); void testCreateDummyOnlineAtcStations(int number);
@@ -246,8 +249,9 @@ namespace BlackCore
INetwork *m_network = nullptr; //!< corresponding network interface INetwork *m_network = nullptr; //!< corresponding network interface
CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer
bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process
bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts
bool m_bookingsRequested = false; //!< bookings have been requested, it can happen we receive an BlackCore::Vatsim::CVatsimBookingReader::atcBookingsReadUnchanged signal
// locks // locks
mutable QReadWriteLock m_lockSituations; //!< lock for situations: m_situationsByCallsign mutable QReadWriteLock m_lockSituations; //!< lock for situations: m_situationsByCallsign
@@ -298,7 +302,7 @@ namespace BlackCore
//! Add new aircraft, ignored if aircraft already exists //! Add new aircraft, ignored if aircraft already exists
//! \remark position to own aircraft set, VATSIM data file data considered //! \remark position to own aircraft set, VATSIM data file data considered
//! \threadsafe //! \threadsafe
bool addNewAircraftinRange(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); bool addNewAircraftInRange(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Init a new aircraft and add it or update model of existing aircraft //! Init a new aircraft and add it or update model of existing aircraft
//! \threadsafe //! \threadsafe
@@ -316,15 +320,15 @@ namespace BlackCore
//! \threadsafe //! \threadsafe
bool addNewClient(const BlackMisc::Network::CClient &client); bool addNewClient(const BlackMisc::Network::CClient &client);
//! Update client //! Update client by callsign
//! \threadsafe //! \threadsafe
int updateOrAddClient(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::CPropertyIndexVariantMap &vm, bool skipEqualValues = true); int updateOrAddClient(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::CPropertyIndexVariantMap &vm, bool skipEqualValues = true);
//! Update online stations //! Update online stations by callsign
int updateOnlineStations(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::CPropertyIndexVariantMap &vm, bool skipEqualValues = true, bool sendSignal = true); int updateOnlineStation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::CPropertyIndexVariantMap &vm, bool skipEqualValues = true, bool sendSignal = true);
//! Update booked stations //! Update booked station by callsign
int updateBookedStations(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::CPropertyIndexVariantMap &vm, bool skipEqualValues = true, bool sendSignal = true); int updateBookedStation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::CPropertyIndexVariantMap &vm, bool skipEqualValues = true, bool sendSignal = true);
//! Call ps_customFSInnPacketReceived with stored packet //! Call ps_customFSInnPacketReceived with stored packet
void recallFsInnPacket(const BlackMisc::Aviation::CCallsign &callsign); void recallFsInnPacket(const BlackMisc::Aviation::CCallsign &callsign);
@@ -376,7 +380,8 @@ namespace BlackCore
void ps_icaoCodesReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &aircraftIcaoDesignator, const QString &airlineIcaoDesignator, const QString &livery); void ps_icaoCodesReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &aircraftIcaoDesignator, const QString &airlineIcaoDesignator, const QString &livery);
void ps_pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign); void ps_pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign);
void ps_frequencyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &frequency); void ps_frequencyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &frequency);
void ps_receivedBookings(const BlackMisc::Aviation::CAtcStationList &bookedStations); void ps_receivedAtcBookings(const BlackMisc::Aviation::CAtcStationList &bookedStations);
void ps_readUnchangedAtcBookings();
void ps_receivedDataFile(); void ps_receivedDataFile();
void ps_aircraftConfigReceived(const BlackMisc::Aviation::CCallsign &callsign, const QJsonObject &jsonObject, bool isFull); void ps_aircraftConfigReceived(const BlackMisc::Aviation::CCallsign &callsign, const QJsonObject &jsonObject, bool isFull);
void ps_aircraftInterimUpdateReceived(const BlackMisc::Aviation::CAircraftSituation &situation); void ps_aircraftInterimUpdateReceived(const BlackMisc::Aviation::CAircraftSituation &situation);