#pragma once #include "PrtCnvSocketThread.hpp" #include "PrtCnvDbThread.hpp" #include namespace N_CoPrtCnv { class CoPrtCnvRadioTelegram; } namespace PrtCnv { class PrtCnvRadioThread; class PrtCnvThreadStarter; class PrtCnvCentralThread : public PrtCnv::PrtCnvThread { Q_OBJECT private: public: ~PrtCnvCentralThread(); explicit PrtCnvCentralThread(PrtCnvThreadStarter* a_parent); int32_t create(NGL::Settings *settings) override; int32_t deinit() override; int32_t destroy() override; int32_t init() override; int32_t start() override; int32_t stop() override; void onDirectTextMessageReceived(const QByteArray &baJson); signals: void directTextMessage(const QByteArray &baJson); void checkSendToCentral(); void checkSendToRadio(); void stopRadio(); void cleanRadio(); void startRadio(); protected: QWebSocket *m_webSocket; int32_t m_SendCounter; public slots: void checkSend(); void radioStopped(); void radioCleant(); void permanentStored(int32_t a_centralCounter); void onTetraConnectionState(bool bConnected); void onPlayerLicencedChanged(int equipNo, N_CoPrtCnv::E_LicensingKind kind); protected slots: void onAreaEffectSimulationDeactivated(int wirkfeldKennung); void onAreaEffectSimulationActivated(int wirkfeldKennung); void onRadioThreadInitDone(); void connected(); void disconnected(); void timeoutTick(); void timeoutAliveAndConnection(); void onTextMessageReceived(const QString &msg); void stateChanged(QAbstractSocket::SocketState newState); protected: void sendAck(); void handleTelegram(N_CoPrtCnv::CoPrtCnvCentralTelegram *a_telegram); bool checkAndUpdateReceiveCounter(const int32_t a_counter); void sendTelegram(N_CoPrtCnv::CoPrtCnvCentralTelegram *a_telegram, PrtCnvStoredCentralTelegram *a_handle); void handleAnforderungStatistikBroadcastNachforderungen(); void handleAck(N_CoPrtCnv::CoPrtCnvCentralTelegram *a_telegram); void cleanAndReinit(); bool handleSpecialTelegram(N_CoPrtCnv::CoPrtCnvCentralTelegram *a_telegram); void sendTelegram(N_CoPrtCnv::CoPrtCnvCentralTelegram *a_telegram); void connectSocket(); void disconnectSocket(); protected: PrtCnvRadioThread *m_RadioThread; bool m_RadioStopped; bool m_CentralStopped; int32_t m_LastSendCounter; uint16_t m_VirtualTeilnehmerId; uint16_t m_maxEqID; QTimer *m_aliveTimer; QTimer *m_sendAckTimer; QTimer *m_reconnectTimer; QAtomicInt m_DoCleanup; PrtCnvDbThread *m_DbThread; PrtCnvTelegramLogThread *m_LogThread; PrtCnvInjectionThread *m_InjectionThread; int32_t m_ReceiveCounter; int32_t m_ReceiveAckCounter; PrtCnvSocketThread::E_State m_State; QSet m_deactivatedAreaEffectSimulations; QHash> m_alreadyTriggeredMines; bool m_bDirectConnection; bool m_bRadioThreadInitDone; }; }