Skip to content
Snippets Groups Projects
Commit 144221c5 authored by akiraohgaki's avatar akiraohgaki
Browse files

Merge branch 'feature/handler' into develop

parents db68a4c1 d4708f89
No related branches found
No related tags found
No related merge requests found
...@@ -8,9 +8,6 @@ ...@@ -8,9 +8,6 @@
#include <QDebug> #include <QDebug>
#include "handlers/confighandler.h" #include "handlers/confighandler.h"
//#include "handlers/systemhandler.h"
//#include "handlers/ocshandler.h"
//#include "handlers/itemhandler.h"
#include "websockets/websocketserver.h" #include "websockets/websocketserver.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
...@@ -18,7 +15,7 @@ int main(int argc, char *argv[]) ...@@ -18,7 +15,7 @@ int main(int argc, char *argv[])
// Init // Init
QCoreApplication app(argc, argv); QCoreApplication app(argc, argv);
ConfigHandler *configHandler = new ConfigHandler(&app); ConfigHandler *configHandler = new ConfigHandler();
QJsonObject appConfigApplication = configHandler->getAppConfigApplication(); QJsonObject appConfigApplication = configHandler->getAppConfigApplication();
app.setApplicationName(appConfigApplication["name"].toString()); app.setApplicationName(appConfigApplication["name"].toString());
...@@ -48,7 +45,7 @@ int main(int argc, char *argv[]) ...@@ -48,7 +45,7 @@ int main(int argc, char *argv[])
int port = clParser.value(clOptionPort).toInt(); int port = clParser.value(clOptionPort).toInt();
// Setup websocket server // Setup websocket server
WebSocketServer *wsServer = new WebSocketServer(appConfigApplication["id"].toString(), port, &app); WebSocketServer *wsServer = new WebSocketServer(configHandler, appConfigApplication["id"].toString(), port, &app);
QObject::connect(wsServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit); QObject::connect(wsServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit);
if (wsServer->start()) { if (wsServer->start()) {
......
...@@ -6,12 +6,30 @@ ...@@ -6,12 +6,30 @@
#include "qtlib_json.h" #include "qtlib_json.h"
WebSocketServer::WebSocketServer(const QString &serverName, quint16 serverPort, QObject *parent) #include "handlers/confighandler.h"
: QObject(parent), serverName_(serverName), serverPort_(serverPort) #include "handlers/systemhandler.h"
#include "handlers/ocshandler.h"
#include "handlers/itemhandler.h"
WebSocketServer::WebSocketServer(ConfigHandler *configHandler, const QString &serverName, quint16 serverPort, QObject *parent)
: QObject(parent), configHandler_(configHandler), serverName_(serverName), serverPort_(serverPort)
{ {
wsServer_ = new QWebSocketServer(serverName_, QWebSocketServer::NonSecureMode, this); wsServer_ = new QWebSocketServer(serverName_, QWebSocketServer::NonSecureMode, this);
connect(wsServer_, &QWebSocketServer::newConnection, this, &WebSocketServer::wsNewConnection); connect(wsServer_, &QWebSocketServer::newConnection, this, &WebSocketServer::wsNewConnection);
connect(wsServer_, &QWebSocketServer::closed, this, &WebSocketServer::stopped); connect(wsServer_, &QWebSocketServer::closed, this, &WebSocketServer::stopped);
configHandler_->setParent(this);
systemHandler_ = new SystemHandler(this);
ocsHandler_ = new OcsHandler(configHandler_, this);
itemHandler_ = new ItemHandler(configHandler_, this);
connect(itemHandler_, &ItemHandler::metadataSetChanged, this, &WebSocketServer::itemMetadataSetChanged);
connect(itemHandler_, &ItemHandler::downloadStarted, this, &WebSocketServer::itemDownloadStarted);
connect(itemHandler_, &ItemHandler::downloadFinished, this, &WebSocketServer::itemDownloadFinished);
connect(itemHandler_, &ItemHandler::downloadProgress, this, &WebSocketServer::itemDownloadProgress);
connect(itemHandler_, &ItemHandler::installStarted, this, &WebSocketServer::itemInstallStarted);
connect(itemHandler_, &ItemHandler::installFinished, this, &WebSocketServer::itemInstallFinished);
connect(itemHandler_, &ItemHandler::uninstallStarted, this, &WebSocketServer::itemUninstallStarted);
connect(itemHandler_, &ItemHandler::uninstallFinished, this, &WebSocketServer::itemUninstallFinished);
} }
WebSocketServer::~WebSocketServer() WebSocketServer::~WebSocketServer()
...@@ -75,8 +93,9 @@ void WebSocketServer::wsTextMessageReceived(const QString &message) ...@@ -75,8 +93,9 @@ void WebSocketServer::wsTextMessageReceived(const QString &message)
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) { if (wsClient) {
qtlib::Json json(message.toUtf8()); qtlib::Json json(message.toUtf8());
if (json.isValid()) { if (json.isObject()) {
callFunction(json.toObject(), wsClient); QJsonObject object = json.toObject();
receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray());
} }
} }
} }
...@@ -86,47 +105,222 @@ void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message) ...@@ -86,47 +105,222 @@ void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) { if (wsClient) {
qtlib::Json json(message); qtlib::Json json(message);
if (json.isValid()) { if (json.isObject()) {
callFunction(json.toObject(), wsClient); QJsonObject object = json.toObject();
receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray());
} }
} }
} }
void WebSocketServer::callFunction(const QJsonObject &request, QWebSocket *wsClient) void WebSocketServer::itemMetadataSetChanged()
{
QJsonArray data;
sendMessage("", "ItemHandler::metadataSetChanged", data);
}
void WebSocketServer::itemDownloadStarted(QJsonObject result)
{
QJsonArray data;
data[0] = result;
sendMessage("", "ItemHandler::downloadStarted", data);
}
void WebSocketServer::itemDownloadFinished(QJsonObject result)
{
QJsonArray data;
data[0] = result;
sendMessage("", "ItemHandler::downloadFinished", data);
}
void WebSocketServer::itemDownloadProgress(QString id, qint64 bytesReceived, qint64 bytesTotal)
{
QJsonArray data;
data[0] = id;
data[1] = bytesReceived;
data[2] = bytesTotal;
sendMessage("", "ItemHandler::downloadProgress", data);
}
void WebSocketServer::itemInstallStarted(QJsonObject result)
{
QJsonArray data;
data[0] = result;
sendMessage("", "ItemHandler::installStarted", data);
}
void WebSocketServer::itemInstallFinished(QJsonObject result)
{
QJsonArray data;
data[0] = result;
sendMessage("", "ItemHandler::installFinished", data);
}
void WebSocketServer::itemUninstallStarted(QJsonObject result)
{
QJsonArray data;
data[0] = result;
sendMessage("", "ItemHandler::uninstallStarted", data);
}
void WebSocketServer::itemUninstallFinished(QJsonObject result)
{ {
/* request object format QJsonArray data;
data[0] = result;
sendMessage("", "ItemHandler::uninstallFinished", data);
}
void WebSocketServer::receiveMessage(const QString &id, const QString &func, const QJsonArray &data)
{
/* message object format
{ {
"id": "example", "id": "example",
"call": "functionName", "func": "functionName",
"args": { "data": ["value", 2, true]
"arg1": "value",
"arg2": 2,
"arg3": true
}
} }
*/ */
/* response object format QJsonArray resultData;
// WebSocketServer
if (func == "WebSocketServer::stop") {
stop();
}
else if (func == "WebSocketServer::isError") {
resultData[0] = isError();
}
else if (func == "WebSocketServer::errorString") {
resultData[0] = errorString();
}
else if (func == "WebSocketServer::serverUrl") {
resultData[0] = serverUrl().toString();
}
// ConfigHandler
else if (func == "ConfigHandler::getAppConfigApplication") {
resultData[0] = configHandler_->getAppConfigApplication();
}
else if (func == "ConfigHandler::getAppConfigInstallTypes") {
resultData[0] = configHandler_->getAppConfigInstallTypes();
}
else if (func == "ConfigHandler::getUsrConfigApplication") {
resultData[0] = configHandler_->getUsrConfigApplication();
}
else if (func == "ConfigHandler::setUsrConfigApplication") {
resultData[0] = configHandler_->setUsrConfigApplication(data[0].toObject());
}
else if (func == "ConfigHandler::getUsrConfigProviders") {
resultData[0] = configHandler_->getUsrConfigProviders();
}
else if (func == "ConfigHandler::setUsrConfigProviders") {
resultData[0] = configHandler_->setUsrConfigProviders(data[0].toObject());
}
else if (func == "ConfigHandler::getUsrConfigCategories") {
resultData[0] = configHandler_->getUsrConfigCategories();
}
else if (func == "ConfigHandler::setUsrConfigCategories") {
resultData[0] = configHandler_->setUsrConfigCategories(data[0].toObject());
}
else if (func == "ConfigHandler::getUsrConfigInstalledItems") {
resultData[0] = configHandler_->getUsrConfigInstalledItems();
}
else if (func == "ConfigHandler::setUsrConfigInstalledItems") {
resultData[0] = configHandler_->setUsrConfigInstalledItems(data[0].toObject());
}
else if (func == "ConfigHandler::setUsrConfigProvidersProvider") {
resultData[0] = configHandler_->setUsrConfigProvidersProvider(data[0].toString(), data[1].toObject());
}
else if (func == "ConfigHandler::removeUsrConfigProvidersProvider") {
resultData[0] = configHandler_->removeUsrConfigProvidersProvider(data[0].toString());
}
else if (func == "ConfigHandler::setUsrConfigCategoriesProvider") {
resultData[0] = configHandler_->setUsrConfigCategoriesProvider(data[0].toString(), data[1].toObject());
}
else if (func == "ConfigHandler::removeUsrConfigCategoriesProvider") {
resultData[0] = configHandler_->removeUsrConfigCategoriesProvider(data[0].toString());
}
else if (func == "ConfigHandler::setUsrConfigCategoriesInstallType") {
resultData[0] = configHandler_->setUsrConfigCategoriesInstallType(data[0].toString(), data[1].toString(), data[2].toString());
}
else if (func == "ConfigHandler::setUsrConfigInstalledItemsItem") {
resultData[0] = configHandler_->setUsrConfigInstalledItemsItem(data[0].toString(), data[1].toObject());
}
else if (func == "ConfigHandler::removeUsrConfigInstalledItemsItem") {
resultData[0] = configHandler_->removeUsrConfigInstalledItemsItem(data[0].toString());
}
// SystemHandler
else if (func == "SystemHandler::isUnix") {
resultData[0] = systemHandler_->isUnix();
}
else if (func == "SystemHandler::desktopEnvironment") {
resultData[0] = systemHandler_->desktopEnvironment();
}
else if (func == "SystemHandler::isApplicableType") {
resultData[0] = systemHandler_->isApplicableType(data[0].toString());
}
else if (func == "SystemHandler::applyFile") {
resultData[0] = false;
#ifdef QTLIB_UNIX
resultData[0] = systemHandler_->applyFile(data[0].toString(), data[1].toString());
#endif
}
// OcsHandler
else if (func == "OcsHandler::addProviders") {
resultData[0] = ocsHandler_->addProviders(data[0].toString());
}
else if (func == "OcsHandler::removeProvider") {
resultData[0] = ocsHandler_->removeProvider(data[0].toString());
}
else if (func == "OcsHandler::updateAllCategories") {
resultData[0] = ocsHandler_->updateAllCategories(data[0].toBool());
}
else if (func == "OcsHandler::updateCategories") {
resultData[0] = ocsHandler_->updateCategories(data[0].toString(), data[1].toBool());
}
else if (func == "OcsHandler::getContents") {
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") {
resultData[0] = ocsHandler_->getContent(data[0].toString(), data[1].toString());
}
// ItemHandler
else if (func == "ItemHandler::metadataSet") {
resultData[0] = itemHandler_->metadataSet();
}
else if (func == "ItemHandler::download") {
itemHandler_->download(data[0].toString(), data[1].toString(), data[2].toString(), data[3].toString());
}
else if (func == "ItemHandler::uninstall") {
itemHandler_->uninstall(data[0].toString());
}
// Not supported
else {
return;
}
sendMessage(id, func, resultData);
}
void WebSocketServer::sendMessage(const QString &id, const QString &func, const QJsonArray &data)
{
/* message object format
{ {
"id": "example", "id": "example",
"result": {} "func": "functionName",
"data": ["value", 2, true]
} }
*/ */
QString id = request["id"].toString(); QJsonObject object;
QString call = request["call"].toString(); object["id"] = id;
QJsonObject args = request["args"].toObject(); object["func"] = func;
object["data"] = data;
QJsonObject response; QByteArray binaryMessage = qtlib::Json(object).toJson();
response["id"] = id; QString textMessage = QString::fromUtf8(binaryMessage);
if (call == "WebSocketServer::stop") { foreach (QWebSocket *wsClient, wsClients_) {
stop(); wsClient->sendTextMessage(textMessage);
//wsClient->sendBinaryMessage(binaryMessage);
} }
else if (call == "WebSocketServer::serverUrl") {
response["result"] = serverUrl().toString();
}
wsClient->sendTextMessage(QString(qtlib::Json(response).toJson()));
//wsClient->sendBinaryMessage(qtlib::Json(response).toJson());
} }
...@@ -2,37 +2,59 @@ ...@@ -2,37 +2,59 @@
#include <QObject> #include <QObject>
#include <QUrl> #include <QUrl>
//#include <QJsonObject> #include <QJsonObject>
#include <QJsonArray>
class QWebSocketServer; class QWebSocketServer;
class QWebSocket; class QWebSocket;
class ConfigHandler;
class SystemHandler;
class OcsHandler;
class ItemHandler;
class WebSocketServer : public QObject class WebSocketServer : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit WebSocketServer(const QString &serverName, quint16 serverPort = 0, QObject *parent = 0); explicit WebSocketServer(ConfigHandler *configHandler, const QString &serverName = "WebSocketServer", quint16 serverPort = 0, QObject *parent = 0);
~WebSocketServer(); ~WebSocketServer();
signals:
void started();
void stopped();
public slots:
bool start(); bool start();
void stop(); void stop();
bool isError(); bool isError();
QString errorString(); QString errorString();
QUrl serverUrl(); QUrl serverUrl();
signals:
void started();
void stopped();
private slots: private slots:
void wsNewConnection(); void wsNewConnection();
void wsDisconnected(); void wsDisconnected();
void wsTextMessageReceived(const QString &message); void wsTextMessageReceived(const QString &message);
void wsBinaryMessageReceived(const QByteArray &message); void wsBinaryMessageReceived(const QByteArray &message);
void itemMetadataSetChanged();
void itemDownloadStarted(QJsonObject result);
void itemDownloadFinished(QJsonObject result);
void itemDownloadProgress(QString id, qint64 bytesReceived, qint64 bytesTotal);
void itemInstallStarted(QJsonObject result);
void itemInstallFinished(QJsonObject result);
void itemUninstallStarted(QJsonObject result);
void itemUninstallFinished(QJsonObject result);
private: private:
void callFunction(const QJsonObject &request, QWebSocket *wsClient); 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_;
OcsHandler *ocsHandler_;
ItemHandler *itemHandler_;
QString serverName_; QString serverName_;
quint16 serverPort_; quint16 serverPort_;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment