Files
qt6-migration-pipeline/TetraIF/PrtCnv/PrtCnvCentralThread.hpp
T
2026-07-14 12:07:36 +02:00

239 lines
3.3 KiB
C++

#pragma once
#include "PrtCnvSocketThread.hpp"
#include "PrtCnvDbThread.hpp"
#include <QWebSocket>
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<int> m_deactivatedAreaEffectSimulations;
QHash<int, QSet<int>> m_alreadyTriggeredMines;
bool m_bDirectConnection;
bool m_bRadioThreadInitDone;
};
}