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

Merge branch 'feature/websocket' into develop

parents 6c056dac 07d08337
No related branches found
No related tags found
No related merge requests found
...@@ -55,17 +55,18 @@ QUrl WebSocketServer::serverUrl() ...@@ -55,17 +55,18 @@ QUrl WebSocketServer::serverUrl()
void WebSocketServer::wsNewConnection() void WebSocketServer::wsNewConnection()
{ {
QWebSocket *wsClient = wsServer_->nextPendingConnection(); QWebSocket *wsClient = wsServer_->nextPendingConnection();
connect(wsClient, &QWebSocket::binaryMessageReceived, this, &WebSocketServer::wsBinaryMessageReceived);
connect(wsClient, &QWebSocket::textMessageReceived, this, &WebSocketServer::wsTextMessageReceived);
connect(wsClient, &QWebSocket::disconnected, this, &WebSocketServer::wsDisconnected); connect(wsClient, &QWebSocket::disconnected, this, &WebSocketServer::wsDisconnected);
connect(wsClient, &QWebSocket::textMessageReceived, this, &WebSocketServer::wsTextMessageReceived);
connect(wsClient, &QWebSocket::binaryMessageReceived, this, &WebSocketServer::wsBinaryMessageReceived);
wsClients_ << wsClient; wsClients_ << wsClient;
} }
void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message) void WebSocketServer::wsDisconnected()
{ {
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) { if (wsClient) {
wsClient->sendBinaryMessage(message); wsClients_.removeAll(wsClient);
wsClient->deleteLater();
} }
} }
...@@ -75,20 +76,57 @@ void WebSocketServer::wsTextMessageReceived(const QString &message) ...@@ -75,20 +76,57 @@ void WebSocketServer::wsTextMessageReceived(const QString &message)
if (wsClient) { if (wsClient) {
qtlib::Json json(message.toUtf8()); qtlib::Json json(message.toUtf8());
if (json.isValid()) { if (json.isValid()) {
QJsonObject jsonObject = json.toObject(); callFunction(json.toObject(), wsClient);
if (jsonObject["method"].toString() == "stop") {
stop();
}
} }
wsClient->sendTextMessage(message);
} }
} }
void WebSocketServer::wsDisconnected() void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
{ {
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) { if (wsClient) {
wsClients_.removeAll(wsClient); qtlib::Json json(message);
wsClient->deleteLater(); if (json.isValid()) {
callFunction(json.toObject(), wsClient);
}
} }
} }
void WebSocketServer::callFunction(const QJsonObject &request, QWebSocket *wsClient)
{
/* request object format
{
"id": "example",
"call": "functionName",
"args": {
"arg1": "value",
"arg2": 2,
"arg3": true
}
}
*/
/* response object format
{
"id": "example",
"result": {}
}
*/
QString id = request["id"].toString();
QString call = request["call"].toString();
QJsonObject args = request["args"].toObject();
QJsonObject response;
response["id"] = id;
if (call == "WebSocketServer::stop") {
stop();
}
else if (call == "WebSocketServer::serverUrl") {
response["result"] = serverUrl().toString();
}
wsClient->sendTextMessage(QString(qtlib::Json(response).toJson()));
//wsClient->sendBinaryMessage(qtlib::Json(response).toJson());
}
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include <QObject> #include <QObject>
#include <QUrl> #include <QUrl>
//#include <QJsonObject>
class QWebSocketServer; class QWebSocketServer;
class QWebSocket; class QWebSocket;
...@@ -14,24 +15,25 @@ public: ...@@ -14,24 +15,25 @@ public:
explicit WebSocketServer(const QString &serverName, quint16 serverPort = 0, QObject *parent = 0); explicit WebSocketServer(const QString &serverName, 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 wsBinaryMessageReceived(const QByteArray &message);
void wsTextMessageReceived(const QString &message);
void wsDisconnected(); void wsDisconnected();
void wsTextMessageReceived(const QString &message);
void wsBinaryMessageReceived(const QByteArray &message);
private: private:
void callFunction(const QJsonObject &request, QWebSocket *wsClient);
QString serverName_; QString serverName_;
quint16 serverPort_; quint16 serverPort_;
QWebSocketServer *wsServer_; QWebSocketServer *wsServer_;
......
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