#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