diff --git a/app/src/websockets/websocketserver.cpp b/app/src/websockets/websocketserver.cpp index db716258d02401ab50dc1b4222c21a7f3a039def..2ea26278c066e03b02e45edfb1f15b4ef3062227 100644 --- a/app/src/websockets/websocketserver.cpp +++ b/app/src/websockets/websocketserver.cpp @@ -93,8 +93,9 @@ void WebSocketServer::wsTextMessageReceived(const QString &message) QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); if (wsClient) { qtlib::Json json(message.toUtf8()); - if (json.isValid()) { - execRequest(json.toObject()); + if (json.isObject()) { + QJsonObject object = json.toObject(); + receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray()); } } } @@ -104,270 +105,222 @@ void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message) QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); if (wsClient) { qtlib::Json json(message); - if (json.isValid()) { - execRequest(json.toObject()); + if (json.isObject()) { + QJsonObject object = json.toObject(); + receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray()); } } } void WebSocketServer::itemMetadataSetChanged() { - QJsonArray results; - - QJsonObject response; - response["id"] = QString(""); - response["func"] = QString("ItemHandler::metadataSetChanged"); - response["result"] = results; - - sendResponse(response); + QJsonArray data; + sendMessage("", "ItemHandler::metadataSetChanged", data); } void WebSocketServer::itemDownloadStarted(QJsonObject result) { - QJsonArray results; - results[0] = result; - - QJsonObject response; - response["id"] = QString(""); - response["func"] = QString("ItemHandler::downloadStarted"); - response["result"] = results; - - sendResponse(response); + QJsonArray data; + data[0] = result; + sendMessage("", "ItemHandler::downloadStarted", data); } void WebSocketServer::itemDownloadFinished(QJsonObject result) { - QJsonArray results; - results[0] = result; - - QJsonObject response; - response["id"] = QString(""); - response["func"] = QString("ItemHandler::downloadFinished"); - response["result"] = results; - - sendResponse(response); + QJsonArray data; + data[0] = result; + sendMessage("", "ItemHandler::downloadFinished", data); } void WebSocketServer::itemDownloadProgress(QString id, qint64 bytesReceived, qint64 bytesTotal) { - QJsonArray results; - results[0] = id; - results[1] = bytesReceived; - results[2] = bytesTotal; - - QJsonObject response; - response["id"] = QString(""); - response["func"] = QString("ItemHandler::downloadProgress"); - response["result"] = results; - - sendResponse(response); + QJsonArray data; + data[0] = id; + data[1] = bytesReceived; + data[2] = bytesTotal; + sendMessage("", "ItemHandler::downloadProgress", data); } void WebSocketServer::itemInstallStarted(QJsonObject result) { - QJsonArray results; - results[0] = result; - - QJsonObject response; - response["id"] = QString(""); - response["func"] = QString("ItemHandler::installStarted"); - response["result"] = results; - - sendResponse(response); + QJsonArray data; + data[0] = result; + sendMessage("", "ItemHandler::installStarted", data); } void WebSocketServer::itemInstallFinished(QJsonObject result) { - QJsonArray results; - results[0] = result; - - QJsonObject response; - response["id"] = QString(""); - response["func"] = QString("ItemHandler::installFinished"); - response["result"] = results; - - sendResponse(response); + QJsonArray data; + data[0] = result; + sendMessage("", "ItemHandler::installFinished", data); } void WebSocketServer::itemUninstallStarted(QJsonObject result) { - QJsonArray results; - results[0] = result; - - QJsonObject response; - response["id"] = QString(""); - response["func"] = QString("ItemHandler::uninstallStarted"); - response["result"] = results; - - sendResponse(response); + QJsonArray data; + data[0] = result; + sendMessage("", "ItemHandler::uninstallStarted", data); } void WebSocketServer::itemUninstallFinished(QJsonObject result) { - QJsonArray results; - results[0] = result; - - QJsonObject response; - response["id"] = QString(""); - response["func"] = QString("ItemHandler::uninstallFinished"); - response["result"] = results; - - sendResponse(response); + QJsonArray data; + data[0] = result; + sendMessage("", "ItemHandler::uninstallFinished", data); } -void WebSocketServer::execRequest(const QJsonObject &request) +void WebSocketServer::receiveMessage(const QString &id, const QString &func, const QJsonArray &data) { - /* request object format + /* message object format { "id": "example", "func": "functionName", - "arg": ["value", 2, true] + "data": ["value", 2, true] } */ - QString id = request["id"].toString(); - QString func = request["func"].toString(); - QJsonArray arg = request["arg"].toArray(); - - QJsonArray results; + QJsonArray resultData; // WebSocketServer if (func == "WebSocketServer::stop") { stop(); } else if (func == "WebSocketServer::isError") { - results[0] = isError(); + resultData[0] = isError(); } else if (func == "WebSocketServer::errorString") { - results[0] = errorString(); + resultData[0] = errorString(); } else if (func == "WebSocketServer::serverUrl") { - results[0] = serverUrl().toString(); + resultData[0] = serverUrl().toString(); } // ConfigHandler else if (func == "ConfigHandler::getAppConfigApplication") { - results[0] = configHandler_->getAppConfigApplication(); + resultData[0] = configHandler_->getAppConfigApplication(); } else if (func == "ConfigHandler::getAppConfigInstallTypes") { - results[0] = configHandler_->getAppConfigInstallTypes(); + resultData[0] = configHandler_->getAppConfigInstallTypes(); } else if (func == "ConfigHandler::getUsrConfigApplication") { - results[0] = configHandler_->getUsrConfigApplication(); + resultData[0] = configHandler_->getUsrConfigApplication(); } else if (func == "ConfigHandler::setUsrConfigApplication") { - results[0] = configHandler_->setUsrConfigApplication(arg[0].toObject()); + resultData[0] = configHandler_->setUsrConfigApplication(data[0].toObject()); } else if (func == "ConfigHandler::getUsrConfigProviders") { - results[0] = configHandler_->getUsrConfigProviders(); + resultData[0] = configHandler_->getUsrConfigProviders(); } else if (func == "ConfigHandler::setUsrConfigProviders") { - results[0] = configHandler_->setUsrConfigProviders(arg[0].toObject()); + resultData[0] = configHandler_->setUsrConfigProviders(data[0].toObject()); } else if (func == "ConfigHandler::getUsrConfigCategories") { - results[0] = configHandler_->getUsrConfigCategories(); + resultData[0] = configHandler_->getUsrConfigCategories(); } else if (func == "ConfigHandler::setUsrConfigCategories") { - results[0] = configHandler_->setUsrConfigCategories(arg[0].toObject()); + resultData[0] = configHandler_->setUsrConfigCategories(data[0].toObject()); } else if (func == "ConfigHandler::getUsrConfigInstalledItems") { - results[0] = configHandler_->getUsrConfigInstalledItems(); + resultData[0] = configHandler_->getUsrConfigInstalledItems(); } else if (func == "ConfigHandler::setUsrConfigInstalledItems") { - results[0] = configHandler_->setUsrConfigInstalledItems(arg[0].toObject()); + resultData[0] = configHandler_->setUsrConfigInstalledItems(data[0].toObject()); } else if (func == "ConfigHandler::setUsrConfigProvidersProvider") { - results[0] = configHandler_->setUsrConfigProvidersProvider(arg[0].toString(), arg[1].toObject()); + resultData[0] = configHandler_->setUsrConfigProvidersProvider(data[0].toString(), data[1].toObject()); } else if (func == "ConfigHandler::removeUsrConfigProvidersProvider") { - results[0] = configHandler_->removeUsrConfigProvidersProvider(arg[0].toString()); + resultData[0] = configHandler_->removeUsrConfigProvidersProvider(data[0].toString()); } else if (func == "ConfigHandler::setUsrConfigCategoriesProvider") { - results[0] = configHandler_->setUsrConfigCategoriesProvider(arg[0].toString(), arg[1].toObject()); + resultData[0] = configHandler_->setUsrConfigCategoriesProvider(data[0].toString(), data[1].toObject()); } else if (func == "ConfigHandler::removeUsrConfigCategoriesProvider") { - results[0] = configHandler_->removeUsrConfigCategoriesProvider(arg[0].toString()); + resultData[0] = configHandler_->removeUsrConfigCategoriesProvider(data[0].toString()); } else if (func == "ConfigHandler::setUsrConfigCategoriesInstallType") { - results[0] = configHandler_->setUsrConfigCategoriesInstallType(arg[0].toString(), arg[1].toString(), arg[2].toString()); + resultData[0] = configHandler_->setUsrConfigCategoriesInstallType(data[0].toString(), data[1].toString(), data[2].toString()); } else if (func == "ConfigHandler::setUsrConfigInstalledItemsItem") { - results[0] = configHandler_->setUsrConfigInstalledItemsItem(arg[0].toString(), arg[1].toObject()); + resultData[0] = configHandler_->setUsrConfigInstalledItemsItem(data[0].toString(), data[1].toObject()); } else if (func == "ConfigHandler::removeUsrConfigInstalledItemsItem") { - results[0] = configHandler_->removeUsrConfigInstalledItemsItem(arg[0].toString()); + resultData[0] = configHandler_->removeUsrConfigInstalledItemsItem(data[0].toString()); } // SystemHandler else if (func == "SystemHandler::isUnix") { - results[0] = systemHandler_->isUnix(); + resultData[0] = systemHandler_->isUnix(); } else if (func == "SystemHandler::desktopEnvironment") { - results[0] = systemHandler_->desktopEnvironment(); + resultData[0] = systemHandler_->desktopEnvironment(); } else if (func == "SystemHandler::isApplicableType") { - results[0] = systemHandler_->isApplicableType(arg[0].toString()); + resultData[0] = systemHandler_->isApplicableType(data[0].toString()); } else if (func == "SystemHandler::applyFile") { - results[0] = false; + resultData[0] = false; #ifdef QTLIB_UNIX - results[0] = systemHandler_->applyFile(arg[0].toString(), arg[1].toString()); + resultData[0] = systemHandler_->applyFile(data[0].toString(), data[1].toString()); #endif } // OcsHandler else if (func == "OcsHandler::addProviders") { - results[0] = ocsHandler_->addProviders(arg[0].toString()); + resultData[0] = ocsHandler_->addProviders(data[0].toString()); } else if (func == "OcsHandler::removeProvider") { - results[0] = ocsHandler_->removeProvider(arg[0].toString()); + resultData[0] = ocsHandler_->removeProvider(data[0].toString()); } else if (func == "OcsHandler::updateAllCategories") { - results[0] = ocsHandler_->updateAllCategories(arg[0].toBool()); + resultData[0] = ocsHandler_->updateAllCategories(data[0].toBool()); } else if (func == "OcsHandler::updateCategories") { - results[0] = ocsHandler_->updateCategories(arg[0].toString(), arg[1].toBool()); + resultData[0] = ocsHandler_->updateCategories(data[0].toString(), data[1].toBool()); } else if (func == "OcsHandler::getContents") { - results[0] = ocsHandler_->getContents(arg[0].toString(), arg[1].toString(), - arg[2].toString(), arg[3].toString(), - arg[4].toString(), arg[5].toString(), arg[6].toInt(), arg[7].toInt()); + resultData[0] = ocsHandler_->getContents(data[0].toString(), data[1].toString(), + data[2].toString(), data[3].toString(), + data[4].toString(), data[5].toString(), data[6].toInt(), data[7].toInt()); } else if (func == "OcsHandler::getContent") { - results[0] = ocsHandler_->getContent(arg[0].toString(), arg[1].toString()); + resultData[0] = ocsHandler_->getContent(data[0].toString(), data[1].toString()); } // ItemHandler else if (func == "ItemHandler::metadataSet") { - results[0] = itemHandler_->metadataSet(); + resultData[0] = itemHandler_->metadataSet(); } else if (func == "ItemHandler::download") { - itemHandler_->download(arg[0].toString(), arg[1].toString(), arg[2].toString(), arg[3].toString()); + itemHandler_->download(data[0].toString(), data[1].toString(), data[2].toString(), data[3].toString()); } else if (func == "ItemHandler::uninstall") { - itemHandler_->uninstall(arg[0].toString()); + itemHandler_->uninstall(data[0].toString()); } - // Default + // Not supported else { return; } - QJsonObject response; - response["id"] = id; - response["func"] = func; - response["result"] = results; - - sendResponse(response); + sendMessage(id, func, resultData); } -void WebSocketServer::sendResponse(const QJsonObject &response) +void WebSocketServer::sendMessage(const QString &id, const QString &func, const QJsonArray &data) { - /* response object format + /* message object format { "id": "example", "func": "functionName", - "result": ["value", 2, true] + "data": ["value", 2, true] } */ + QJsonObject object; + object["id"] = id; + object["func"] = func; + object["data"] = data; + + QByteArray binaryMessage = qtlib::Json(object).toJson(); + QString textMessage = QString::fromUtf8(binaryMessage); + foreach (QWebSocket *wsClient, wsClients_) { - wsClient->sendTextMessage(QString(qtlib::Json(response).toJson())); - //wsClient->sendBinaryMessage(qtlib::Json(response).toJson()); + wsClient->sendTextMessage(textMessage); + //wsClient->sendBinaryMessage(binaryMessage); } } diff --git a/app/src/websockets/websocketserver.h b/app/src/websockets/websocketserver.h index 2e314ef3ae4cff1ddb739f9ada33d9d85222ba1e..698bd5c2b1fdd2794d35bfe501ff864ff2494ba7 100644 --- a/app/src/websockets/websocketserver.h +++ b/app/src/websockets/websocketserver.h @@ -2,7 +2,8 @@ #include <QObject> #include <QUrl> -//#include <QJsonObject> +#include <QJsonObject> +#include <QJsonArray> class QWebSocketServer; class QWebSocket; @@ -47,8 +48,8 @@ private slots: void itemUninstallFinished(QJsonObject result); private: - void execRequest(const QJsonObject &request); - void sendResponse(const QJsonObject &response); + void receiveMessage(const QString &id, const QString &func, const QJsonArray &data); + void sendMessage(const QString &id, const QString &func, const QJsonArray &data); ConfigHandler *configHandler_; SystemHandler *systemHandler_;