WebSockets MQTT Subscription▲
Sélectionnez
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include
"websocketiodevice.h"
#include <QtCore/QDebug>
#include <QtWebSockets/qwebsockethandshakeoptions.h>
WebSocketIODevice::
WebSocketIODevice(QObject *
parent)
:
QIODevice(parent)
{
connect(&
amp;m_socket, &
amp;QWebSocket::
connected, this
, &
amp;WebSocketIODevice::
onSocketConnected);
connect(&
amp;m_socket, &
amp;QWebSocket::
binaryMessageReceived, this
, &
amp;WebSocketIODevice::
handleBinaryMessage);
}
bool
WebSocketIODevice::
isSequential() const
{
return
true
;
}
qint64 WebSocketIODevice::
bytesAvailable() const
{
return
static_cast
&
lt;qint64&
gt;(m_buffer.size()) +
QIODevice::
bytesAvailable();
}
bool
WebSocketIODevice::
open(QIODevice::
OpenMode mode)
{
QWebSocketHandshakeOptions options;
options.setSubprotocols(QStringList{
QString::
fromUtf8(m_protocol) }
);
m_socket.open(m_url, options);
return
QIODevice::
open(mode);
}
void
WebSocketIODevice::
close()
{
m_socket.close();
QIODevice::
close();
}
qint64 WebSocketIODevice::
readData(char
*
data, qint64 maxlen)
{
qint64 bytesToRead =
qMin(maxlen, (qint64)m_buffer.size());
memcpy(data, m_buffer.constData(), static_cast
&
lt;size_t&
gt;(bytesToRead));
m_buffer =
m_buffer.right(m_buffer.size() -
bytesToRead);
return
bytesToRead;
}
qint64 WebSocketIODevice::
writeData(const
char
*
data, qint64 len)
{
QByteArray msg(data, len);
const
int
length =
m_socket.sendBinaryMessage(msg);
return
length;
}
void
WebSocketIODevice::
setUrl(const
QUrl &
amp;url)
{
m_url =
url;
}
void
WebSocketIODevice::
setProtocol(const
QByteArray &
amp;data)
{
m_protocol =
data;
}
void
WebSocketIODevice::
handleBinaryMessage(const
QByteArray &
amp;msg)
{
m_buffer.append(msg);
emit readyRead();
}
void
WebSocketIODevice::
onSocketConnected()
{
emit socketConnected();
}