// WebSocketChannel.cpp #include "webSocketChannel.h" #include 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); }