/** * Send / Receive telegrams to/from PrtCnv * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-09-26 */ #pragma once #include #include #include #include #include #include #include "convert_from_json.h" #include "convert_to_json.h" namespace TetraRadio { class SocketDispatcher final : public QObject, protected ConvertFromJson { Q_OBJECT public: explicit SocketDispatcher(TrainingAreaBase::Plugin::DataProvider *pdp, const std::shared_ptr &recvFromTabCb); ~SocketDispatcher(); bool init(PrtCnv::PrtCnvApplication *prtCnvApp); std::shared_ptr sendToTab(); quint16 randomListenPort() const; bool canSendData() const { return m_prtCnvApp != nullptr; } Q_SIGNALS: void tetraConnectionChanged(bool bConnected); void warehouseMessage(const QByteArray &jsonData); private Q_SLOTS: void onTextMessageReceived(const QByteArray &message); void onAckTimeout(); void onSendInitialData(); private: void disconnectSocket(QWebSocket *s); void handleTetraConnectionChanged(bool bConnected) override; void handleAcknowledge(qint64 timeStamp, int counter) override; private: std::shared_ptr m_txHandler; TrainingAreaBase::Plugin::DataProvider *m_dataProvider; PrtCnv::PrtCnvApplication *m_prtCnvApp; QTimer *m_ackTimer; bool m_bInitialAck; int m_receiveCounter; }; } // namespace TetraRadio