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

WebSocketServer

parent bd5feb70
No related branches found
No related tags found
No related merge requests found
......@@ -55,17 +55,18 @@ QUrl WebSocketServer::serverUrl()
void WebSocketServer::wsNewConnection()
{
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::textMessageReceived, this, &WebSocketServer::wsTextMessageReceived);
connect(wsClient, &QWebSocket::binaryMessageReceived, this, &WebSocketServer::wsBinaryMessageReceived);
wsClients_ << wsClient;
}
void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
void WebSocketServer::wsDisconnected()
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
wsClient->sendBinaryMessage(message);
wsClients_.removeAll(wsClient);
wsClient->deleteLater();
}
}
......@@ -75,20 +76,57 @@ void WebSocketServer::wsTextMessageReceived(const QString &message)
if (wsClient) {
qtlib::Json json(message.toUtf8());
if (json.isValid()) {
QJsonObject jsonObject = json.toObject();
if (jsonObject["method"].toString() == "stop") {
stop();
}
callFunction(json.toObject(), wsClient);
}
wsClient->sendTextMessage(message);
}
}
void WebSocketServer::wsDisconnected()
void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
wsClients_.removeAll(wsClient);
wsClient->deleteLater();
qtlib::Json json(message);
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 @@
#include <QObject>
#include <QUrl>
//#include <QJsonObject>
class QWebSocketServer;
class QWebSocket;
......@@ -14,24 +15,25 @@ public:
explicit WebSocketServer(const QString &serverName, quint16 serverPort = 0, QObject *parent = 0);
~WebSocketServer();
signals:
void started();
void stopped();
public slots:
bool start();
void stop();
bool isError();
QString errorString();
QUrl serverUrl();
signals:
void started();
void stopped();
private slots:
void wsNewConnection();
void wsBinaryMessageReceived(const QByteArray &message);
void wsTextMessageReceived(const QString &message);
void wsDisconnected();
void wsTextMessageReceived(const QString &message);
void wsBinaryMessageReceived(const QByteArray &message);
private:
void callFunction(const QJsonObject &request, QWebSocket *wsClient);
QString serverName_;
quint16 serverPort_;
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