/** * @RDE_HEADER@ * The ClientConnection class represents a connection to a single client. * $Id$ * $HeadURL$ * $Author$ * Created by Hannes Baeuerle, SLSE, 2016-08-25 */ #pragma once #include #include #include "reply_message.h" #include "logger.h" #include class QWebSocket; namespace LtsWebSocket { /** * @brief The ClientConnection class represents a connection to a single client */ class LTSWEBSOCKETSERVER_EXPORT ClientConnection : public QThread , public ReplyHandler { Q_OBJECT public: /** * @brief ClientConnection Constructor * @param socket Pointer to a QWebSocket Object. Should be QWebSocketServer::nextPendingConnection() * @param parent QObject parent */ explicit ClientConnection(QWebSocket *socket, QObject *parent = nullptr); /** * @brief ~ClientConnection Destructor */ ~ClientConnection(); /** * @brief init Initialises the ClientConnection * @return True on success, otherwise false */ bool init(); /** * @brief writeTextMessage Add a message to a queue to be sent to the client * @param message Message which is queued */ void addReply(ReplyMessage *message) override; QWebSocket *webSocket() { return m_socket; } signals: /** * @brief newTextMessage Emitted when a new text message arrives at the associated socket * @param message The new message */ void newTextMessage(ClientConnection *client, const QString &message); /** * @brief disconnected Emitted when a client disconnects * @param client The client */ void disconnected(ClientConnection *client); private slots: void onNewTextMessageFromSocket(const QString &message); void sendMessagesFromQueue(); void onSocketDisconnect(); private: // methods /** * @brief sendMessages Runs in an own thread and constantly tries to send * queued messages */ void sendMessages(); private: // attributes QWebSocket *m_socket; QQueue m_messageQueue; LOGGER_T m_logger; }; // class ClientConnection } // namespace LtsWebSocket