| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include "websocketserver.h"
- #include "appevent.h"
- #include "qglobal.h"
- #include <QJsonDocument>
- #include <QJsonObject>
- #include <QJsonWebToken.h>
- #include <QUrlQuery>
- WebSocketServer::WebSocketServer(QObject *parent)
- : QObject(parent)
- , m_webSocketServer(new QWebSocketServer(QStringLiteral("WebSocket Server"),
- QWebSocketServer::NonSecureMode,
- this))
- {
- const QString ip = AppEvent::instance()->configValue("webSocketIP").toString();
- const int port = AppEvent::instance()->configValue("webSocketPort").toInt();
- if (m_webSocketServer->listen(QHostAddress(ip), port)) {
- qDebug() << "WebSocket server listening on port" << port;
- connect(m_webSocketServer,
- &QWebSocketServer::newConnection,
- this,
- &WebSocketServer::onNewConnection);
- } else {
- qWarning() << "Failed to listen on port" << port;
- }
- }
- WebSocketServer::~WebSocketServer()
- {
- m_webSocketServer->close();
- qDeleteAll(m_clients.begin(), m_clients.end());
- }
- void WebSocketServer::onNewConnection()
- {
- QWebSocket *socket = m_webSocketServer->nextPendingConnection();
- connect(socket, &QWebSocket::textMessageReceived, this, &WebSocketServer::processMessage);
- connect(socket, &QWebSocket::disconnected, this, &WebSocketServer::socketDisconnected);
- m_clients.append(socket);
- QUrl url = socket->request().url();
- QUrlQuery query(url.query());
- QString token = query.queryItemValue("token");
- // if (validateToken(token)) {
- // qDebug() << "Token valid, connection established.";
- // // Continue handling the WebSocket connection
- // } else {
- // qDebug() << "Invalid token. Closing connection.";
- // socket->close();
- // }
- qDebug() << "Socket onNewConnection";
- AppEvent::instance()->webSocketUpdata();
- QJsonObject param;
- param.insert("method", "request"); // 获取方式
- param.insert("request", "config"); // 请求数据
- QJsonObject object;
- object.insert("status", true);
- object.insert("message", true);
- object.insert("code", 200);
- object.insert("data", param);
- QJsonDocument jsonDoc(object);
- QString jsonString = jsonDoc.toJson(QJsonDocument::Compact);
- socket->sendTextMessage(jsonString);
- qDebug() << QStringLiteral("%1:%2").arg(socket->peerAddress().toString(),
- QString::number(socket->peerPort()));
- }
- void WebSocketServer::socketDisconnected()
- {
- QWebSocket *socket = qobject_cast<QWebSocket *>(sender());
- if (!socket)
- return;
- qDebug() << "Socket disconnected";
- for (auto it = m_hashClients.begin(); it != m_hashClients.end(); ++it) {
- if (it.value() == socket) {
- // 找到了对应的键
- m_hashClients.erase(it); // 移除键值对
- break;
- }
- }
- m_clients.removeAll(socket);
- socket->deleteLater();
- AppEvent::instance()->webSocketUpdata();
- }
- void WebSocketServer::processMessage(const QString &message)
- {
- QWebSocket *socket = qobject_cast<QWebSocket *>(sender());
- if (!socket)
- return;
- qDebug() << "Message received:" << message;
- const QString authorization = message;
- static const QLatin1String tokenSecret("mydirtysecret");
- QJsonWebToken token = QJsonWebToken::fromTokenAndSecret(authorization, tokenSecret);
- if (token.isValid()) {
- }
- QString userid = token.claim("userId");
- bool isok = false;
- qint64 id = userid.toLongLong(&isok, 10);
- m_hashClients.insert(id, socket);
- }
|