#pragma once #include "client_message_factory.h" #include "logger.h" #include "ltswebsocketserver_export.h" #include #include #include #include class QTimer; #ifdef QT6_WEBSOCKETS_AVAILABLE namespace LtsWebSocket { class ConnectionHandler; class ClientConnection; class LTSWEBSOCKETSERVER_EXPORT LtsWebSocketServer : public QObject { Q_OBJECT public: explicit LtsWebSocketServer(AbstractClientMessageFactory* messageFactory, QObject* parent = nullptr); virtual ~LtsWebSocketServer(); bool init(const QString& serviceName, const unsigned short port = 0); bool init(const QString& serviceName, const QPair& portRange); void sendToAllClients(ReplyMessage* message); unsigned short webSocketPort() const; void setMessageDelay(qint32 delay); signals: void clientDisconnected(ClientConnection* client); void clientConnected(ClientConnection* client); private slots: void onNewTextMessage(ReplyHandler* client, const QString& message); void onQueueTimerTimeout(); private: struct MessageCredentials { ReplyHandler* client{nullptr}; QString message; MessageCredentials(ReplyHandler* client, const QString& message) : client(client), message(message) {} }; QQueue m_messageQueue; QTimer* m_queueTimer{nullptr}; AbstractClientMessageFactory* m_messageFactory{nullptr}; std::unique_ptr m_connectionHandler; qint32 m_messageDelay{0}; LOGGER_T m_logger; }; } // namespace LtsWebSocket #else #include namespace LtsWebSocket { class LTSWEBSOCKETSERVER_EXPORT LtsWebSocketServer : public QObject { Q_OBJECT public: explicit LtsWebSocketServer(AbstractClientMessageFactory* /*messageFactory*/, QObject* parent = nullptr); virtual ~LtsWebSocketServer(); bool init(const QString& /*serviceName*/, const unsigned short /*port*/ = 0) { return false; } bool init(const QString& /*serviceName*/, const QPair& /*portRange*/) { return false; } void sendToAllClients(ReplyMessage* /*message*/) {} unsigned short webSocketPort() const { return 0; } void setMessageDelay(qint32 /*delay*/) {} signals: void clientDisconnected(void* /*client*/); void clientConnected(void* /*client*/); private slots: void onNewTextMessage(void* /*client*/, const QString& /*message*/) {} void onQueueTimerTimeout() {} private: QTimer* m_queueTimer{nullptr}; LOGGER_T m_logger; }; } // namespace LtsWebSocket #endif