Newer
Older
#include "websocketserver.h"
#include <QHostAddress>
#include <QWebSocketServer>
WebSocketServer::WebSocketServer(const QString &serverName, quint16 serverPort, QObject *parent)
: QObject(parent), serverName_(serverName), serverPort_(serverPort)
{
wsServer_ = new QWebSocketServer(serverName_, QWebSocketServer::NonSecureMode, this);
connect(wsServer_, &QWebSocketServer::newConnection, this, &WebSocketServer::wsNewConnection);
connect(wsServer_, &QWebSocketServer::closed, this, &WebSocketServer::stopped);
}
WebSocketServer::~WebSocketServer()
{
if (wsServer_->listen(QHostAddress::Any, serverPort_)) {
if (wsServer_->error() != QWebSocketProtocol::CloseCodeNormal) {
return true;
}
return false;
}
QString WebSocketServer::errorString()
{
return wsServer_->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);
wsClients_ << wsClient;
}
void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
wsClient->sendBinaryMessage(message);
}
}
void WebSocketServer::wsTextMessageReceived(const QString &message)
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
qtlib::Json json(message.toUtf8());
if (json.isValid()) {
QJsonObject jsonObject = json.toObject();
if (jsonObject["method"].toString() == "stop") {
stop();
}
}
wsClient->sendTextMessage(message);
}
}
void WebSocketServer::wsDisconnected()
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
wsClients_.removeAll(wsClient);
wsClient->deleteLater();
}