From fe1b14ff57fabcd524e3317d5f4a42f19fcf5e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20L?= Date: Mon, 31 Dec 2018 20:49:15 +0100 Subject: [PATCH] server: return refactor --- src/WSRequestHandler.cpp | 18 ++++++++---------- src/WSRequestHandler.h | 7 ++----- src/WSServer.cpp | 6 ++---- 3 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index ad3a38b1..5535d3c0 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -135,18 +135,15 @@ WSRequestHandler::WSRequestHandler() : { } -void WSRequestHandler::processIncomingMessage(QString textMessage) { - QByteArray msgData = textMessage.toUtf8(); - const char* msg = msgData.constData(); +std::string WSRequestHandler::processIncomingMessage(std::string& textMessage) { + std::string msgContainer(textMessage); + const char* msg = msgContainer.c_str(); data = obs_data_create_from_json(msg); if (!data) { - if (!msg) - msg = ""; - blog(LOG_ERROR, "invalid JSON payload received for '%s'", msg); SendErrorResponse("invalid JSON payload"); - return; + return _response; } if (Config::Current()->DebugEnabled) { @@ -157,7 +154,7 @@ void WSRequestHandler::processIncomingMessage(QString textMessage) { || !hasField("message-id")) { SendErrorResponse("missing request parameters"); - return; + return _response; } _requestType = obs_data_get_string(data, "request-type"); @@ -177,6 +174,8 @@ void WSRequestHandler::processIncomingMessage(QString textMessage) { handlerFunc(this); else SendErrorResponse("invalid request type"); + + return _response; } WSRequestHandler::~WSRequestHandler() { @@ -214,11 +213,10 @@ void WSRequestHandler::SendErrorResponse(obs_data_t* additionalFields) { } void WSRequestHandler::SendResponse(obs_data_t* response) { - assert(_response.isNull()); _response = obs_data_get_json(response); if (Config::Current()->DebugEnabled) - blog(LOG_DEBUG, "Response << '%s'", _response.toUtf8().constData()); + blog(LOG_DEBUG, "Response << '%s'", _response.c_str()); } bool WSRequestHandler::hasField(QString name) { diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index be109009..8d69693f 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -34,16 +34,13 @@ class WSRequestHandler : public QObject { public: explicit WSRequestHandler(); ~WSRequestHandler(); - void processIncomingMessage(QString textMessage); + std::string processIncomingMessage(std::string& textMessage); bool hasField(QString name); - QString getResponse() { - return _response; - } private: const char* _messageId; const char* _requestType; - QString _response; + std::string _response; OBSDataAutoRelease data; void SendOKResponse(obs_data_t* additionalFields = NULL); diff --git a/src/WSServer.cpp b/src/WSServer.cpp index d6ca1de0..b97799f3 100644 --- a/src/WSServer.cpp +++ b/src/WSServer.cpp @@ -118,12 +118,10 @@ void WSServer::onMessage(connection_hdl hdl, server::message_ptr message) return; } - QString payload = QString::fromStdString(message->get_payload()); + std::string payload = message->get_payload(); - // TODO refactor handler WSRequestHandler handler; - handler.processIncomingMessage(payload); - std::string response = handler.getResponse().toStdString(); + std::string response = handler.processIncomingMessage(payload); _server.send(hdl, response, websocketpp::frame::opcode::text); }