94 lines
2.3 KiB
C++
94 lines
2.3 KiB
C++
// 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);
|
|
}
|