#pragma once #include "logger.h" #include "ltswebsocketserver_export.h" #include "reply_message.h" #include #include #include #ifdef QT6_WEBSOCKETS_AVAILABLE class QWebSocket; #else namespace LtsWebSocket { class QWebSocketStub; } using QWebSocket = LtsWebSocket::QWebSocketStub; namespace LtsWebSocket { class QWebSocketStub { public: QWebSocketStub(QObject *parent = nullptr) { Q_UNUSED(parent); } virtual ~QWebSocketStub() = default; void sendTextMessage(const QString & /*message*/) {} void close() {} bool isValid() const { return false; } QString errorString() const { return QString(); } }; } // namespace LtsWebSocket #endif namespace LtsWebSocket { class LTSWEBSOCKETSERVER_EXPORT ClientConnection : public QThread , public ReplyHandler { Q_OBJECT public: explicit ClientConnection(QWebSocket *socket, QObject *parent = nullptr); ~ClientConnection(); #ifdef QT6_WEBSOCKETS_AVAILABLE bool init(); void addReply(ReplyMessage *message) override; QWebSocket *webSocket() { return m_socket; } #else bool init() { return false; } void addReply(ReplyMessage * /*message*/) override {} QWebSocket *webSocket() { return nullptr; } #endif signals: void newTextMessage(ClientConnection *client, const QString &message); void disconnected(ClientConnection *client); private slots: #ifdef QT6_WEBSOCKETS_AVAILABLE void onNewTextMessageFromSocket(const QString &message); void sendMessagesFromQueue(); void onSocketDisconnect(); #endif private: NGL::INGLLogger &m_logger; #ifdef QT6_WEBSOCKETS_AVAILABLE void sendMessages(); #endif QWebSocket *m_socket; QQueue m_messageQueue; }; } // namespace LtsWebSocket