/** * @RDE_HEADER@ * The ConnectionHandler class functions as a WebSocket server and manages incoming client connections. * $Id$ * $HeadURL$ * $Author$ * Created by Hannes Baeuerle, SLSE, 2016-08-25 */ #pragma once #include #include #include #include "logger.h" namespace LtsWebSocket { class MessageHandler; class ClientConnection; class ReplyMessage; /** * @brief The ConnectionHandler class functions as a WebSocket server and manages incoming client connections */ class ConnectionHandler : public QObject { Q_OBJECT public: /** * @brief ConnectionHandler * @param parent */ explicit ConnectionHandler(QObject *parent = nullptr); ~ConnectionHandler(); /** * @brief init Starts listening for incoming connections and connects internal signals and slots * @param serviceName Is Used to name the server (RDE-"servicename") * @param port Port the server is listening, if 0 the port number will be random * @return True on success, otherwise false */ bool init(const QString &serviceName, unsigned short port); /** * @brief sendToAll Sends the given msg to all connected Clients * @param message Message to be send */ void sendToAllClients(ReplyMessage *message); /** * @brief webSocketPort returns the listen port * @return listen port */ unsigned short webSocketPort() { return m_server->serverPort(); } signals: /** * @brief newTextMessageFromClient Emitted when a message from any client is received * @param client Client where replies are written to * @param message Message from the client */ void newTextMessageFromClient(ClientConnection *client, const QString &message); /** * @brief clientDisconnected Emitted when a client disconnects * @param client The client */ void clientDisconnected(ClientConnection *client); /** * @brief clientConnected Emitted when a client connects * @param client The client */ void clientConnected(ClientConnection *client); private slots: void onServerError(QWebSocketProtocol::CloseCode closeCode); void onNewConnection(); private: // attributes QWebSocketServer *m_server; QSet m_connections; LOGGER_T m_logger; }; } // namespace LtsWebSocket