Files
qt5-legatus-legacy/Lts/Proxies/WirelessLocationSystem/web_socket_handler.h
T
2026-08-13 18:33:10 +02:00

87 lines
2.3 KiB
C++
Executable File

/**
* Websocket interface to the training area proxy
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2017-01-11
*/
#pragma once
#include <QObject>
#include <QQueue>
#include <QWebSocketServer>
#include <memory>
#include <TrainingAreaBase/training_area_telegrams.h>
#include <LtsCoordTrans/lts_coord_trans.h>
#include "logger.h"
namespace WirelessLocationSystem
{
class IsmHandler;
class WebSocketWrapper;
class WlsHandler;
class WlsParticipant;
class WlsParticipantHandler;
class WebSocketHandler : public QObject
{
Q_OBJECT
public:
explicit WebSocketHandler(QObject *parent = nullptr);
~WebSocketHandler();
bool init(std::shared_ptr<WlsHandler> wlsHandler,
std::shared_ptr<WlsParticipantHandler> participantHandler,
std::shared_ptr<IsmHandler> ismHandler,
quint16 listenPort);
template <typename T>
bool sendTelegram(const T *data, int exerciseId)
{
if (!data)
return false;
sendTelegramInternal(data,
TrainingAreaBase::TetraIcd::Constraints<T>::type(),
exerciseId);
return true;
}
bool sendWlsStateReport(int exerciseId = 0);
public slots:
void sendBinarySfmData(const WlsParticipant *participant);
void sendDataCommunicationState(const WlsParticipant *participant);
void sendGpsPositionUsage(const WlsParticipant *participant);
void sendPosition(const WlsParticipant *participant);
void forceSendPosition(const WlsParticipant *participant,
int moutObjectId, int moutRoomId);
private slots:
void onNewConnection();
void onTextMessageReceived(const QString &baJson);
signals:
void signalBroadcastMessage(const QString &msg, int exerciseId);
private:
template <typename T>
void setPosition(T &tele, const WlsParticipant *participant);
void sendTelegramInternal(const TrainingAreaBase::TetraIcd::TrainingAreaTelegram *data,
const QString &type, int exerciseId);
void sendParticipantConnectionStates(int exerciseId);
QWebSocketServer *m_webSocketServer;
std::shared_ptr<WlsHandler> m_wlsHandler;
std::shared_ptr<IsmHandler> m_ismHandler;
std::shared_ptr<WlsParticipantHandler> m_participantHandler;
LtsCoordTrans::UtmCoordinate m_basePoint;
LOGGER_T m_logger;
};
} // namespace WirelessLocationSystem