/** * @RDE_HEADER@ * Handler for the WebSocket Interface * $Id$ * $HeadURL$ * $Author$ * Created by Philipp Dassow, SLST, 2017-12-05 */ #include "websocket_interface_handler.h" #include "settings.h" #include "main_handler.h" #include "data_manager.h" #include "WebSocketInterface/Messages/client_message.h" #include namespace OcBaseDownload { namespace WebSocketInterface { WebSocketInterfaceHandler::WebSocketInterfaceHandler(MainHandler *mainHandler, QObject *parent) : QObject(parent) , m_webSocketClient(nullptr) , m_messageFactory(nullptr) , m_dataManager(nullptr) , m_mainHandler(mainHandler) , m_webSocketActivityTimer(new QTimer(this)) , m_logger(getLogger("WebSocketInterfaceHandler")) { connect(m_webSocketActivityTimer, &QTimer::timeout, this, &WebSocketInterfaceHandler::dataReceiveTimeout, Qt::UniqueConnection); const int iTimeout = Settings::webSocketActivityTimeoutMSec(); if (iTimeout > 0) m_webSocketActivityTimer->setInterval(iTimeout); } WebSocketInterfaceHandler::~WebSocketInterfaceHandler() { cleanup(); } bool WebSocketInterfaceHandler::init() { cleanup(); DEBUG_LOG(m_logger) << "WebSocketInterfaceHandler::init"; m_dataManager = new DataManager(m_mainHandler); DEBUG_LOG(m_logger) << "... ok"; m_messageFactory = new Messages::ClientMessageFactory(m_dataManager); return true; } void WebSocketInterfaceHandler::open(const QString &hostname, int port) { DEBUG_LOG(m_logger) << "Opening " << hostname << ":" << port; recreateWebSocket(); m_webSocketClient->open(hostname, port); m_webSocketActivityTimer->start(); } void WebSocketInterfaceHandler::close() { m_webSocketActivityTimer->stop(); if (m_webSocketClient) { disconnect(m_webSocketClient); m_webSocketClient->disconnect(); m_webSocketClient->close(); m_webSocketClient->deleteLater(); m_webSocketClient = nullptr; } } bool WebSocketInterfaceHandler::send(LtsWebSocket::ReplyMessage *message) { DEBUG_LOG(m_logger) << "Sending: " << message->toJsonString(); if (!m_webSocketClient) return false; m_webSocketClient->addReply(message); return true; } void WebSocketInterfaceHandler::setCurrentDownload(CurrentDownload currentDownload) { m_dataManager->setCurrentDownload(currentDownload); } CurrentDownload WebSocketInterfaceHandler::currentDownload() const { return m_dataManager->currentDownload(); } void WebSocketInterfaceHandler::recreateWebSocket() { close(); m_webSocketClient = new LtsWebSocket::LtsWebSocketClient(m_messageFactory, this); connect(m_webSocketClient, &LtsWebSocket::LtsWebSocketClient::connected, this, &WebSocketInterfaceHandler::connected); connect(m_webSocketClient, &LtsWebSocket::LtsWebSocketClient::disconnected, this, &WebSocketInterfaceHandler::disconnected); //connect(m_webSocketClient, &LtsWebSocket::LtsWebSocketClient::dataReceived, //m_webSocketActivityTimer, QOverload<>::of(&QTimer::start)); connect(m_webSocketClient, &LtsWebSocket::LtsWebSocketClient::dataReceived, this, [this]() { DEBUG_LOG(m_logger) << "data received restart timer"; m_webSocketActivityTimer->start(); }); } void WebSocketInterfaceHandler::cleanup() { delete m_webSocketClient; delete m_messageFactory; delete m_dataManager; m_webSocketClient = nullptr; m_messageFactory = nullptr; m_dataManager = nullptr; } } // namespace WebSocketInterface } // namespace OcBaseDownload