/** * Websocket interface to the training area proxy * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-01-11 */ #pragma once #include #include #include #include #include #include #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, std::shared_ptr participantHandler, std::shared_ptr ismHandler, quint16 listenPort); template bool sendTelegram(const T *data, int exerciseId) { if (!data) return false; sendTelegramInternal(data, TrainingAreaBase::TetraIcd::Constraints::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 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 m_wlsHandler; std::shared_ptr m_ismHandler; std::shared_ptr m_participantHandler; LtsCoordTrans::UtmCoordinate m_basePoint; LOGGER_T m_logger; }; } // namespace WirelessLocationSystem