DiagramDesigner/diagramCommunication/source/webSocketChannel.cpp

94 lines
2.3 KiB
C++
Raw Normal View History

2025-12-12 17:46:37 +08:00
// WebSocketChannel.cpp
#include "webSocketChannel.h"
#include <QDebug>
WebSocketChannel::WebSocketChannel(const ChannelConfig& config, QObject* parent)
: BaseChannel(config, parent)
, m_webSocket(new QWebSocket)
{
QObject::connect(m_webSocket, &QWebSocket::connected,
this, &WebSocketChannel::onConnected);
QObject::connect(m_webSocket, &QWebSocket::disconnected,
this, &WebSocketChannel::onDisconnected);
QObject::connect(m_webSocket, &QWebSocket::textMessageReceived,
this, &WebSocketChannel::onTextMessageReceived);
QObject::connect(m_webSocket, &QWebSocket::binaryMessageReceived,
this, &WebSocketChannel::onBinaryMessageReceived);
}
bool WebSocketChannel::connect()
{
if (m_webSocket->state() == QAbstractSocket::ConnectedState) {
return true;
}
if (!m_config.endpoint.isValid()) {
emit errorOccurred("Invalid endpoint");
return false;
}
m_webSocket->open(m_config.endpoint);
return true;
}
bool WebSocketChannel::disconnect()
{
if (m_webSocket->state() != QAbstractSocket::UnconnectedState) {
m_webSocket->close();
}
return true;
}
bool WebSocketChannel::isConnected() const
{
return m_webSocket->state() == QAbstractSocket::ConnectedState;
}
bool WebSocketChannel::send(const QByteArray& data)
{
if (!isConnected()) {
emit errorOccurred("WebSocket not connected");
return false;
}
qint64 sent = m_webSocket->sendBinaryMessage(data);
return sent == data.size();
}
bool WebSocketChannel::sendText(const QString& text)
{
if (!isConnected()) {
emit errorOccurred("WebSocket not connected");
return false;
}
qint64 sent = m_webSocket->sendTextMessage(text);
return sent == text.size();
}
void WebSocketChannel::setWebSocketConfig(const WebSocketConfig& config)
{
m_wsConfig = config;
}
void WebSocketChannel::onConnected()
{
emit connected();
}
void WebSocketChannel::onDisconnected()
{
emit disconnected();
}
void WebSocketChannel::onTextMessageReceived(const QString& message)
{
emit textMessageReceived(message);
emit dataReceived(message.toUtf8());
}
void WebSocketChannel::onBinaryMessageReceived(const QByteArray& message)
{
emit dataReceived(message);
}