Files
qt5-legatus-legacy/Lts/Proxies/FeedGeoJson/websocket_server.cpp
T
2026-08-13 18:33:10 +02:00

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);
}
}