66 lines
1.8 KiB
C++
Executable File
66 lines
1.8 KiB
C++
Executable File
// #include "websocketserver.h"
|
|
|
|
// WebSocketServer::WebSocketServer()
|
|
// {
|
|
|
|
// }
|
|
|
|
#include "websocket_server.h"
|
|
#include <QDebug>
|
|
|
|
WebSocketServer::WebSocketServer(quint16 port, QObject *parent)
|
|
: QObject(parent),
|
|
m_server(new QWebSocketServer(QStringLiteral("Qt WebSocket Server"), QWebSocketServer::NonSecureMode, this)) {
|
|
|
|
if (m_server->listen(QHostAddress::Any, port)) {
|
|
qDebug() << "WebSocket Server listening on port" << port;
|
|
connect(m_server, &QWebSocketServer::newConnection, this, &WebSocketServer::onNewConnection);
|
|
} else {
|
|
qDebug() << "Failed to start WebSocket Server!";
|
|
}
|
|
}
|
|
|
|
WebSocketServer::~WebSocketServer() {
|
|
m_server->close();
|
|
qDeleteAll(m_clients);
|
|
}
|
|
|
|
void WebSocketServer::onNewConnection() {
|
|
QWebSocket *socket = m_server->nextPendingConnection();
|
|
|
|
connect(socket, &QWebSocket::textMessageReceived, this, &WebSocketServer::onTextMessageReceived);
|
|
connect(socket, &QWebSocket::disconnected, this, &WebSocketServer::onSocketDisconnected);
|
|
|
|
m_clients.append(socket);
|
|
qDebug() << "New client connected:" << socket->peerAddress().toString();
|
|
}
|
|
|
|
void WebSocketServer::onTextMessageReceived(QString message) {
|
|
QWebSocket *senderSocket = qobject_cast<QWebSocket *>(sender());
|
|
qDebug() << "Received message:" << message;
|
|
|
|
// Echo back to all clients
|
|
for (QWebSocket *client : qAsConst(m_clients)) {
|
|
if (client->isValid())
|
|
client->sendTextMessage(message);
|
|
}
|
|
}
|
|
|
|
void WebSocketServer::onSocketDisconnected() {
|
|
QWebSocket *socket = qobject_cast<QWebSocket *>(sender());
|
|
if (socket) {
|
|
m_clients.removeAll(socket);
|
|
socket->deleteLater();
|
|
qDebug() << "Client disconnected";
|
|
}
|
|
}
|
|
|
|
void WebSocketServer::sendMessage(QString message)
|
|
{
|
|
qDebug() << "sendMessage";
|
|
for (QWebSocket *client : qAsConst(m_clients)) {
|
|
if (client->isValid())
|
|
client->sendTextMessage(message);
|
|
}
|
|
}
|