diff --git a/src/blackcore/vatsim/networkvatlib.cpp b/src/blackcore/vatsim/networkvatlib.cpp index f091ddf77..6a9696707 100644 --- a/src/blackcore/vatsim/networkvatlib.cpp +++ b/src/blackcore/vatsim/networkvatlib.cpp @@ -801,8 +801,7 @@ namespace BlackCore { CTextMessage tm(cbvar_cast(cbvar)->fromFSD(msg), CCallsign(cbvar_cast(cbvar)->fromFSD(from)), CCallsign(cbvar_cast(cbvar)->fromFSD(to))); tm.setCurrentUtcTime(); - const CTextMessageList messages(tm); - emit cbvar_cast(cbvar)->textMessagesReceived(messages); + cbvar_cast(cbvar)->consolidateTextMessage(tm); } void CNetworkVatlib::onRadioMessageReceived(VatSessionID, const char *from, int numFreq, int *freqList, const char *msg, void *cbvar) @@ -986,6 +985,25 @@ namespace BlackCore } } + void CNetworkVatlib::consolidateTextMessage(const CTextMessage &textMessage) + { + if (textMessage.isSupervisorMessage()) + { + emit this->textMessagesReceived(textMessage); + } + else + { + m_textMessagesToConsolidate.addConsolidatedTextMessage(textMessage); + m_dsSendTextMessage.inputSignal(); // trigger + } + } + + void CNetworkVatlib::emitConsolidatedTextMessages() + { + emit this->textMessagesReceived(m_textMessagesToConsolidate); + m_textMessagesToConsolidate.clear(); + } + void CNetworkVatlib::onMetarReceived(VatSessionID, const char *data, void *cbvar) { auto *self = cbvar_cast(cbvar); diff --git a/src/blackcore/vatsim/networkvatlib.h b/src/blackcore/vatsim/networkvatlib.h index e13c95b34..1d2988746 100644 --- a/src/blackcore/vatsim/networkvatlib.h +++ b/src/blackcore/vatsim/networkvatlib.h @@ -27,6 +27,7 @@ #include "blackmisc/network/server.h" #include "blackmisc/network/textmessagelist.h" #include "blackmisc/settingscache.h" +#include "blackmisc/digestsignal.h" #include #include @@ -199,6 +200,13 @@ namespace BlackCore void terminate(); //!< \private private: + //! Consolidate text messages if we receive multiple messages which belong together + //! \remark causes a slight delay + void consolidateTextMessage(const BlackMisc::Network::CTextMessage &textMessage); + + //! Send the consolidatedTextMessages + void emitConsolidatedTextMessages(); + //! Deletion policy for QScopedPointer struct VatlibQScopedPointerDeleter { @@ -220,6 +228,9 @@ namespace BlackCore BlackMisc::Aviation::CAircraftParts m_sentAircraftConfig; //!< aircraft parts sent BlackMisc::CTokenBucket m_tokenBucket; //!< used with aircraft parts messages + BlackMisc::CDigestSignal m_dsSendTextMessage { this, &CNetworkVatlib::emitConsolidatedTextMessages, 500, 10 }; + BlackMisc::Network::CTextMessageList m_textMessagesToConsolidate; + QTimer m_scheduledConfigUpdate; QTimer m_processingTimer; QTimer m_positionUpdateTimer;