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