diff --git a/src/blackcore/context_network.h b/src/blackcore/context_network.h index ef740eeb9..52eafeaae 100644 --- a/src/blackcore/context_network.h +++ b/src/blackcore/context_network.h @@ -160,6 +160,12 @@ namespace BlackCore //! Known FSD servers, available when data file was first read virtual BlackMisc::Network::CServerList getVatsimFsdServers() const = 0; + //! Is interim position sending enabled? + virtual bool isInterimPositionSendingEnabled() const = 0; + + //! Enable interim position sending + virtual void enableInterimPositionSending(bool enable) = 0; + /*! * Connect to Network * \return messages gererated during connecting diff --git a/src/blackcore/context_network_empty.h b/src/blackcore/context_network_empty.h index b6a941b5a..fc083771c 100644 --- a/src/blackcore/context_network_empty.h +++ b/src/blackcore/context_network_empty.h @@ -231,6 +231,21 @@ namespace BlackCore logEmptyContextWarning(Q_FUNC_INFO); return false; } + + //! \copydoc IContextNetwork::isInterimPositionSendingEnabled + virtual bool isInterimPositionSendingEnabled() const override + { + logEmptyContextWarning(Q_FUNC_INFO); + return false; + } + + //! \copydoc IContextNetwork::enableInterimPositionSending + virtual void enableInterimPositionSending(bool enable) override + { + Q_UNUSED(enable); + logEmptyContextWarning(Q_FUNC_INFO); + } + }; } // namespace diff --git a/src/blackcore/context_network_impl.cpp b/src/blackcore/context_network_impl.cpp index 5cc12e11b..6f905044e 100644 --- a/src/blackcore/context_network_impl.cpp +++ b/src/blackcore/context_network_impl.cpp @@ -416,6 +416,20 @@ namespace BlackCore return c; } + bool CContextNetwork::isInterimPositionSendingEnabled() const + { + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; + Q_ASSERT(this->m_network); + return m_network->isInterimPositionSendingEnabled(); + } + + void CContextNetwork::enableInterimPositionSending(bool enable) + { + CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << enable; + Q_ASSERT(this->m_network); + m_network->enableInterimPositionSending(enable); + } + void CContextNetwork::testCreateDummyOnlineAtcStations(int number) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << number; diff --git a/src/blackcore/context_network_impl.h b/src/blackcore/context_network_impl.h index 122d05f3c..e117ad457 100644 --- a/src/blackcore/context_network_impl.h +++ b/src/blackcore/context_network_impl.h @@ -159,6 +159,12 @@ namespace BlackCore //! \copydoc IContextNetwork::updateAircraftModel virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override; + //! \copydoc IContextNetwork::isInterimPositionSendingEnabled + virtual bool isInterimPositionSendingEnabled() const override; + + //! \copydoc IContextNetwork::enableInterimPositionSending + virtual void enableInterimPositionSending(bool enable) override; + //! \copydoc IContextNetwork::testCreateDummyOnlineAtcStations virtual void testCreateDummyOnlineAtcStations(int number) override; diff --git a/src/blackcore/context_network_proxy.cpp b/src/blackcore/context_network_proxy.cpp index 3db9126e9..b298e42ba 100644 --- a/src/blackcore/context_network_proxy.cpp +++ b/src/blackcore/context_network_proxy.cpp @@ -73,10 +73,10 @@ namespace BlackCore "vatsimBookingsRead", this, SIGNAL(vatsimBookingsRead())); Q_ASSERT(s); s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), - "changedRenderedAircraftModel", this, SIGNAL(changedRenderedAircraftModel(BlackMisc::Simulation::CSimulatedAircraft,QString))); + "changedRenderedAircraftModel", this, SIGNAL(changedRenderedAircraftModel(BlackMisc::Simulation::CSimulatedAircraft, QString))); Q_ASSERT(s); s = connection.connect(serviceName, IContextNetwork::ObjectPath(), IContextNetwork::InterfaceName(), - "changedAircraftEnabled", this, SIGNAL(changedAircraftEnabled(BlackMisc::Simulation::CSimulatedAircraft,QString))); + "changedAircraftEnabled", this, SIGNAL(changedAircraftEnabled(BlackMisc::Simulation::CSimulatedAircraft, QString))); Q_ASSERT(s); Q_UNUSED(s); } @@ -104,7 +104,7 @@ namespace BlackCore Simulation::CSimulatedAircraft CContextNetworkProxy::getAircraftForCallsign(const CCallsign &callsign) const { return this->m_dBusInterface->callDBusRet(QLatin1Literal("getAircraftForCallsign"), callsign); - } + } BlackMisc::Network::CUserList CContextNetworkProxy::getUsers() const { @@ -171,6 +171,16 @@ namespace BlackCore return this->m_dBusInterface->callDBusRet(QLatin1Literal("updateAircraftModel"), callsign, model, originator); } + bool CContextNetworkProxy::isInterimPositionSendingEnabled() const + { + return this->m_dBusInterface->callDBusRet(QLatin1Literal("isInterimPositionSendingEnabled")); + } + + void CContextNetworkProxy::enableInterimPositionSending(bool enable) + { + this->m_dBusInterface->callDBus(QLatin1Literal("enableInterimPositionSending"), enable); + } + void CContextNetworkProxy::testCreateDummyOnlineAtcStations(int number) { this->m_dBusInterface->callDBus(QLatin1Literal("testCreateDummyOnlineAtcStations"), number); diff --git a/src/blackcore/context_network_proxy.h b/src/blackcore/context_network_proxy.h index 476853dd5..250d15239 100644 --- a/src/blackcore/context_network_proxy.h +++ b/src/blackcore/context_network_proxy.h @@ -131,6 +131,12 @@ namespace BlackCore //! \copydoc IContextNetwork::updateAircraftModel virtual bool updateAircraftModel(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override; + //! \copydoc IContextNetwork::isInterimPositionSendingEnabled + virtual bool isInterimPositionSendingEnabled() const override; + + //! \copydoc IContextNetwork::enableInterimPositionSending + virtual void enableInterimPositionSending(bool enable) override; + //! \copydoc IContextNetwork::testCreateDummyOnlineAtcStations virtual void testCreateDummyOnlineAtcStations(int number) override; diff --git a/src/blackcore/network.h b/src/blackcore/network.h index 9dda6eb2b..48de0bad8 100644 --- a/src/blackcore/network.h +++ b/src/blackcore/network.h @@ -191,6 +191,12 @@ namespace BlackCore */ virtual void terminateConnection() = 0; + //! Is interim position sending enabled? + virtual bool isInterimPositionSendingEnabled() const = 0; + + //! Enable interim position sending + virtual void enableInterimPositionSending(bool enable) = 0; + /*! * Send a ping message to a user with a specific callsign. * \pre Network must be connected when calling this function. diff --git a/src/blackcore/network_vatlib.cpp b/src/blackcore/network_vatlib.cpp index eba0a8bc2..570a91dcd 100644 --- a/src/blackcore/network_vatlib.cpp +++ b/src/blackcore/network_vatlib.cpp @@ -36,10 +36,10 @@ namespace BlackCore CNetworkVatlib::CNetworkVatlib(Simulation::IOwnAircraftProvider *ownAircraft, QObject *parent) : INetwork(parent), COwnAircraftProviderSupport(ownAircraft), - m_loginMode(LoginNormal), - m_status(vatStatusIdle), - m_fsdTextCodec(QTextCodec::codecForName("latin1")), - m_tokenBucket(10, CTime(5, CTimeUnit::s()), 1) + m_loginMode(LoginNormal), + m_status(vatStatusIdle), + m_fsdTextCodec(QTextCodec::codecForName("latin1")), + m_tokenBucket(10, CTime(5, CTimeUnit::s()), 1) { connect(this, &CNetworkVatlib::terminate, this, &INetwork::terminateConnection, Qt::QueuedConnection); connect(this, &INetwork::customPacketReceived, this, &CNetworkVatlib::customPacketDispatcher); @@ -567,6 +567,16 @@ namespace BlackCore sendCustomPacket(callsign, "FSIPIR", data); } + void CNetworkVatlib::enableInterimPositionSending(bool enable) + { + m_sendInterimPositions = enable; + } + + bool CNetworkVatlib::isInterimPositionSendingEnabled() const + { + return m_sendInterimPositions; + } + void CNetworkVatlib::broadcastAircraftConfig(const QJsonObject &config) { // Fixme: Use QJsonObject with std::initializer_list once 5.4 is baseline @@ -687,11 +697,11 @@ namespace BlackCore QJsonDocument doc = QJsonDocument::fromJson(json, &parserError); if (parserError.error != QJsonParseError::NoError) - CLogMessage(static_cast(nullptr)).warning("Failed to parse aircraft config packet: %1") << parserError.errorString(); + CLogMessage(static_cast(nullptr)).warning("Failed to parse aircraft config packet: %1") << parserError.errorString(); QJsonObject packet = doc.object(); - if (packet == JsonPackets::aircraftConfigRequest() ) + if (packet == JsonPackets::aircraftConfigRequest()) { cbvar_cast(cbvar)->replyToConfigQuery(cbvar_cast(cbvar)->fromFSD(callsign)); return; diff --git a/src/blackcore/network_vatlib.h b/src/blackcore/network_vatlib.h index de2f80a7a..716163c4d 100644 --- a/src/blackcore/network_vatlib.h +++ b/src/blackcore/network_vatlib.h @@ -45,7 +45,6 @@ namespace BlackCore virtual bool isPendingConnection() const override { return m_status == vatStatusConnecting; } // Network slots - //! \copydoc INetwork::presetLoginMode virtual void presetLoginMode(LoginMode mode) override; virtual void presetServer(const BlackMisc::Network::CServer &server) override; virtual void presetCallsign(const BlackMisc::Aviation::CCallsign &callsign) override; @@ -61,14 +60,11 @@ namespace BlackCore const QString &aircraftDesignator, const QString &combinedType, const QString &modelString) override; virtual void sendFsipirCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, const QString &airlineDesignator, const QString &aircraftDesignator, const QString &combinedType, const QString &modelString) override; - - //! \copydoc INetwork::broadcastAircraftConfig + virtual bool isInterimPositionSendingEnabled() const override; + virtual void enableInterimPositionSending(bool enable) override; virtual void broadcastAircraftConfig(const QJsonObject &config) override; - - //! \copydoc INetwork::sendAircraftConfigQuery virtual void sendAircraftConfigQuery(const BlackMisc::Aviation::CCallsign &callsign) override; - // Text message slots virtual void sendTextMessages(const BlackMisc::Network::CTextMessageList &messages) override; @@ -98,9 +94,7 @@ namespace BlackCore private: //shimlib callbacks static void onConnectionStatusChanged(VatSessionID, VatConnectionStatus oldStatus, VatConnectionStatus newStatus, void *cbvar); static void onTextMessageReceived(VatSessionID, const char *from, const char *to, const char *msg, void *cbvar); - static void onRadioMessageReceived(VatSessionID, const char *from, int freqCount, int *freqList, const char *message, void *cbvar); - static void onControllerDisconnected(VatSessionID, const char *callsign, void *cbvar); static void onInterimPilotPositionUpdate(VatSessionID, const char *callsign, const VatPilotPosition *position, void *cbvar); static void onAtcPositionUpdate(VatSessionID, const char *callsign, const VatAtcPosition *pos, void *cbvar); @@ -164,6 +158,7 @@ namespace BlackCore BlackMisc::Network::CServer m_server; BlackMisc::Aviation::CCallsign m_callsign; //!< "buffered callsign", as this must not change when connected BlackMisc::Aviation::CAircraftIcao m_icaoCode; //!< "buffered icao", as this must not change when connected + bool m_sendInterimPositions = false; //!< send interim positions QTimer m_processingTimer; QTimer m_updateTimer;