diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 4f561b68d..98f3952ed 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -298,7 +298,7 @@ namespace BlackCore return stations.front(); } - void CAirspaceMonitor::requestDataUpdates() + void CAirspaceMonitor::requestAircraftDataUpdates() { if (!this->isConnectedAndNotShuttingDown()) { return; } const CSimulatedAircraftList aircraftInRange(this->getAircraftInRange()); @@ -323,7 +323,8 @@ namespace BlackCore const CAtcStationList stations(this->getAtcStationsOnline()); for (const CAtcStation &station : stations) { - m_network->sendAtisQuery(station.getCallsign()); // for each online station + const CCallsign cs = station.getCallsign(); + m_network->sendAtisQuery(cs); // for each online station } } @@ -722,8 +723,11 @@ namespace BlackCore this->updateBookedStation(callsign, vm); // receiving voice room means ATC has voice - vm = CPropertyIndexVariantMap(CClient::IndexVoiceCapabilities, CVariant::from(CVoiceCapabilities::fromVoiceCapabilities(CVoiceCapabilities::Voice))); - this->updateOrAddClient(callsign, vm, false); + if (!trimmedUrl.isEmpty()) + { + vm = CPropertyIndexVariantMap(CClient::IndexVoiceCapabilities, CVariant::from(CVoiceCapabilities::fromVoiceCapabilities(CVoiceCapabilities::Voice))); + this->updateOrAddClient(callsign, vm, false); + } } void CAirspaceMonitor::onAtisLogoffTimeReceived(const CCallsign &callsign, const QString &zuluTime) diff --git a/src/blackcore/airspacemonitor.h b/src/blackcore/airspacemonitor.h index 30a1e2d50..edc0de9e4 100644 --- a/src/blackcore/airspacemonitor.h +++ b/src/blackcore/airspacemonitor.h @@ -119,7 +119,7 @@ namespace BlackCore void clear(); //! Request to update other clients' data from the network - void requestDataUpdates(); + void requestAircraftDataUpdates(); //! Request to update ATC stations' ATIS data from the network void requestAtisUpdates(); diff --git a/src/blackcore/context/contextnetwork.h b/src/blackcore/context/contextnetwork.h index 4c113f11c..0339bbc07 100644 --- a/src/blackcore/context/contextnetwork.h +++ b/src/blackcore/context/contextnetwork.h @@ -277,7 +277,7 @@ namespace BlackCore virtual BlackMisc::Aviation::CAtcStationList getSelectedAtcStations() const = 0; //! Request data updates (pilot's frequencies, ATIS, ..) - virtual void requestDataUpdates() = 0; + virtual void requestAircraftDataUpdates() = 0; //! Request ATIS updates (for all stations) virtual void requestAtisUpdates() = 0; diff --git a/src/blackcore/context/contextnetworkempty.h b/src/blackcore/context/contextnetworkempty.h index 564870740..ac1952267 100644 --- a/src/blackcore/context/contextnetworkempty.h +++ b/src/blackcore/context/contextnetworkempty.h @@ -255,8 +255,8 @@ namespace BlackCore return false; } - //! \copydoc IContextNetwork::requestDataUpdates - virtual void requestDataUpdates()override + //! \copydoc IContextNetwork::requestAircraftDataUpdates + virtual void requestAircraftDataUpdates()override { logEmptyContextWarning(Q_FUNC_INFO); } diff --git a/src/blackcore/context/contextnetworkimpl.cpp b/src/blackcore/context/contextnetworkimpl.cpp index be3b219cb..7f51cf367 100644 --- a/src/blackcore/context/contextnetworkimpl.cpp +++ b/src/blackcore/context/contextnetworkimpl.cpp @@ -80,9 +80,16 @@ namespace BlackCore connect(m_network, &INetwork::textMessageSent, this, &CContextNetwork::textMessageSent); // 2. Update timer for data (network data such as frequency) - m_networkDataUpdateTimer = new QTimer(this); - connect(m_networkDataUpdateTimer, &QTimer::timeout, this, &CContextNetwork::requestDataUpdates); - m_networkDataUpdateTimer->start(30 * 1000); + // we use 2 timers so we can query at different times (not too many queirs at once) + m_requestAircraftDataTimer = new QTimer(this); + connect(m_requestAircraftDataTimer, &QTimer::timeout, this, &CContextNetwork::requestAircraftDataUpdates); + m_requestAircraftDataTimer->start(30 * 1000); + m_requestAircraftDataTimer->setObjectName("CContextNetwork::m_requestAircraftDataTimer"); + + m_requestAtisTimer = new QTimer(this); + connect(m_requestAtisTimer, &QTimer::timeout, this, &CContextNetwork::requestAtisUpdates); + m_requestAtisTimer->start(13 * 1000); // should not be called at the same time as above + m_requestAtisTimer->setObjectName("CContextNetwork::m_requestAtisTimer"); // 3. Airspace contents Q_ASSERT_X(this->getRuntime()->getCContextOwnAircraft(), Q_FUNC_INFO, "this and own aircraft context must be local"); @@ -858,14 +865,14 @@ namespace BlackCore return m_airspace->getAtcStationsOnline().containsCallsign(callsign); } - void CContextNetwork::requestDataUpdates() + void CContextNetwork::requestAircraftDataUpdates() { Q_ASSERT(m_airspace); if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } if (!this->isConnected()) { return; } - this->requestAtisUpdates(); - m_airspace->requestDataUpdates(); + m_airspace->requestAircraftDataUpdates(); + if (m_requestAircraftDataTimer) { m_requestAircraftDataTimer->start(); } // restart } void CContextNetwork::requestAtisUpdates() @@ -875,6 +882,7 @@ namespace BlackCore if (!this->isConnected()) { return; } m_airspace->requestAtisUpdates(); + if (m_requestAtisTimer) { m_requestAtisTimer->start(); } // restart } bool CContextNetwork::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRendering) @@ -884,7 +892,7 @@ namespace BlackCore const bool c = m_airspace->updateAircraftEnabled(callsign, enabledForRendering); if (c) { - CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign)); + const CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign)); Q_ASSERT_X(!aircraft.getCallsign().isEmpty(), Q_FUNC_INFO, "missing callsign"); emit this->changedRemoteAircraftEnabled(aircraft); } diff --git a/src/blackcore/context/contextnetworkimpl.h b/src/blackcore/context/contextnetworkimpl.h index b6eb04e7d..b685ad00c 100644 --- a/src/blackcore/context/contextnetworkimpl.h +++ b/src/blackcore/context/contextnetworkimpl.h @@ -267,7 +267,7 @@ namespace BlackCore virtual BlackMisc::Network::CUser getUserForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual BlackMisc::Network::CServerList getVatsimFsdServers() const override; virtual BlackMisc::Network::CServerList getVatsimVoiceServers() const override; - virtual void requestDataUpdates()override; + virtual void requestAircraftDataUpdates()override; virtual void requestAtisUpdates() override; virtual void setFastPositionEnabledCallsigns(BlackMisc::Aviation::CCallsignSet &callsigns) override; virtual BlackMisc::Aviation::CCallsignSet getFastPositionEnabledCallsigns() const override; @@ -295,7 +295,8 @@ namespace BlackCore INetwork *m_network = nullptr; INetwork::ConnectionStatus m_currentStatus = INetwork::Disconnected; //!< used to detect pending connections INetwork::LoginMode m_currentMode = INetwork::LoginNormal; //!< current modeM - QTimer *m_networkDataUpdateTimer = nullptr; //!< general updates such as ATIS, frequencies, see requestDataUpdates() + QTimer *m_requestAircraftDataTimer = nullptr; //!< general updates such as frequencies, see requestAircraftDataUpdates() + QTimer *m_requestAtisTimer = nullptr; //!< general updates such as ATIS // Digest signals, only sending after some time BlackMisc::CDigestSignal m_dsAtcStationsBookedChanged { this, &IContextNetwork::changedAtcStationsBooked, &IContextNetwork::changedAtcStationsBookedDigest, 1000, 2 }; @@ -308,12 +309,12 @@ namespace BlackCore //! Update METAR collection void updateMetars(const BlackMisc::Weather::CMetarList &metars); - //! An ATIS has been received - void onChangedAtisReceived(const BlackMisc::Aviation::CCallsign &callsign); - //! Check if a supervisor message was received void checkForSupervisiorTextMessage(const BlackMisc::Network::CTextMessageList &messages); + //! An ATIS has been received + void onChangedAtisReceived(const BlackMisc::Aviation::CCallsign &callsign); + //! Connection status changed void onFsdConnectionStatusChanged(BlackCore::INetwork::ConnectionStatus from, BlackCore::INetwork::ConnectionStatus to); diff --git a/src/blackcore/context/contextnetworkproxy.cpp b/src/blackcore/context/contextnetworkproxy.cpp index 5f9ea5f54..a51e60cdb 100644 --- a/src/blackcore/context/contextnetworkproxy.cpp +++ b/src/blackcore/context/contextnetworkproxy.cpp @@ -213,9 +213,9 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("getSelectedAtcStations")); } - void CContextNetworkProxy::requestDataUpdates() + void CContextNetworkProxy::requestAircraftDataUpdates() { - m_dBusInterface->callDBus(QLatin1String("requestDataUpdates")); + m_dBusInterface->callDBus(QLatin1String("requestAircraftDataUpdates")); } void CContextNetworkProxy::requestAtisUpdates() diff --git a/src/blackcore/context/contextnetworkproxy.h b/src/blackcore/context/contextnetworkproxy.h index 961e95654..dee12c5f5 100644 --- a/src/blackcore/context/contextnetworkproxy.h +++ b/src/blackcore/context/contextnetworkproxy.h @@ -108,7 +108,7 @@ namespace BlackCore virtual BlackMisc::Network::CServerList getVatsimFsdServers() const override; virtual BlackMisc::Network::CClientList getClientsForCallsigns(const BlackMisc::Aviation::CCallsignSet &callsigns) const override; virtual bool setOtherClient(const BlackMisc::Network::CClient &client) override; - virtual void requestDataUpdates()override; + virtual void requestAircraftDataUpdates()override; virtual void requestAtisUpdates() override; virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override; virtual bool setAircraftEnabledFlag(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override; diff --git a/src/blackcore/vatsim/networkvatlib.cpp b/src/blackcore/vatsim/networkvatlib.cpp index c3f6d6a54..6bb7f7032 100644 --- a/src/blackcore/vatsim/networkvatlib.cpp +++ b/src/blackcore/vatsim/networkvatlib.cpp @@ -1606,15 +1606,17 @@ namespace BlackCore self->increaseStatisticsValue(__func__); const CCallsign cs(self->fromFSD(callsign), CCallsign::Atc); - emit self->atisVoiceRoomReplyReceived(cs, self->fromFSD(atis->voiceRoom)); - emit self->atisLogoffTimeReplyReceived(cs, self->fromFSD(atis->zuluLogoff)); + const QString voiceRoom(self->fromFSD(atis->voiceRoom)); + const QString zuluLogoff = self->fromFSD(atis->zuluLogoff); + emit self->atisVoiceRoomReplyReceived(cs, voiceRoom); + emit self->atisLogoffTimeReplyReceived(cs, zuluLogoff); CInformationMessage atisMessage; atisMessage.setType(CInformationMessage::ATIS); for (unsigned int i = 0; i < atis->textLineCount; ++i) { const QString fixed = cbvar_cast(cbvar)->fromFSD(atis->textLines[i]).trimmed(); - if (! fixed.isEmpty()) + if (!fixed.isEmpty()) { // detect the stupid z1, z2, z3 placeholders //! \fixme: Anything better as this stupid code here?