239 lines
3.3 KiB
C++
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;
|
|
};
|
|
|
|
}
|