Forked from
akiraohgaki / ocs-manager
363 commits behind the upstream repository.
-
akiraohgaki authoredakiraohgaki authored
websocketserver.cpp 2.18 KiB
#include "websocketserver.h"
#include <QHostAddress>
#include <QWebSocketServer>
#include <QWebSocket>
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()
{
stop();
wsServer_->deleteLater();
}
bool WebSocketServer::start()
{
if (wsServer_->listen(QHostAddress::Any, serverPort_)) {
emit started();
return true;
}
return false;
}
void WebSocketServer::stop()
{
wsServer_->close();
}
bool WebSocketServer::isError()
{
if (wsServer_->error() != QWebSocketProtocol::CloseCodeNormal) {
return true;
}
return false;
}
QString WebSocketServer::errorString()
{
return wsServer_->errorString();
}
QUrl WebSocketServer::serverUrl()
{
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) {
wsClient->sendTextMessage(message);
}
}
void WebSocketServer::wsDisconnected()
{
QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
if (wsClient) {
wsClients_.removeAll(wsClient);
wsClient->deleteLater();
}
}