#pragma once #include "logger.h" #include #include #include #ifdef QT6_WEBSOCKETS_AVAILABLE #include #include #else namespace LtsWebSocket { class QWebSocketServerStub; } using QWebSocketServer = LtsWebSocket::QWebSocketServerStub; namespace QWebSocketProtocol { enum class CloseCode { NormalClosure = 1000 }; } #endif namespace LtsWebSocket { class MessageHandler; class ClientConnection; class ReplyMessage; class ConnectionHandler : public QObject { Q_OBJECT public: explicit ConnectionHandler(QObject* parent = nullptr); ~ConnectionHandler(); #ifdef QT6_WEBSOCKETS_AVAILABLE bool init(const QString& serviceName, unsigned short port); void sendToAllClients(ReplyMessage* message); unsigned short webSocketPort() { return m_server->serverPort(); } #else bool init(const QString& /*serviceName*/, unsigned short /*port*/) { return false; } void sendToAllClients(ReplyMessage* /*message*/) {} unsigned short webSocketPort() { return 0; } #endif signals: void newTextMessageFromClient(ClientConnection* client, const QString& message); void clientDisconnected(ClientConnection* client); void clientConnected(ClientConnection* client); private slots: #ifdef QT6_WEBSOCKETS_AVAILABLE void onServerError(QWebSocketProtocol::CloseCode closeCode); void onNewConnection(); #endif private: NGL::INGLLogger& m_logger; #ifdef QT6_WEBSOCKETS_AVAILABLE QWebSocketServer* m_server; #else void* m_server; #endif QSet m_connections; }; } // namespace LtsWebSocket