#pragma once #include "client_message_factory.h" #include "logger.h" #include "ltswebsocketserver_export.h" #include #include #include #include class QTimer; 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