File: qmqtt_websocketiodevice.cpp

package info (click to toggle)
savvycan 220-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 12,456 kB
  • sloc: cpp: 61,803; sh: 293; javascript: 91; python: 44; makefile: 8
file content (48 lines) | stat: -rw-r--r-- 1,276 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifdef QT_WEBSOCKETS_LIB

#include "qmqtt_websocketiodevice_p.h"

#include <QWebSocket>

QMQTT::WebSocketIODevice::WebSocketIODevice(QWebSocket *socket, QObject *parent)
    : QIODevice(parent)
    , _webSocket(socket)
{
    connect(_webSocket, &QWebSocket::bytesWritten, this, &WebSocketIODevice::bytesWritten);
    connect(_webSocket, &QWebSocket::binaryMessageReceived,
            this, &WebSocketIODevice::binaryMessageReceived);
}

bool QMQTT::WebSocketIODevice::connectToHost(const QNetworkRequest &request)
{
    _webSocket->open(request);
    return QIODevice::open(QIODevice::ReadWrite);
}

qint64 QMQTT::WebSocketIODevice::bytesAvailable() const
{
    return _buffer.count();
}

void QMQTT::WebSocketIODevice::binaryMessageReceived(const QByteArray &frame)
{
    _buffer.append(frame);
    emit readyRead();
}

qint64 QMQTT::WebSocketIODevice::readData(char *data, qint64 maxSize)
{
    int size = qMin(static_cast<int>(maxSize), _buffer.count());
    for (int i=0; i<size; ++ i)
        data[i] = _buffer[i];
    _buffer.remove(0, size);
    return size;
}

qint64 QMQTT::WebSocketIODevice::writeData(const char *data, qint64 maxSize)
{
    QByteArray d(data, static_cast<int>(maxSize));
    return _webSocket->sendBinaryMessage(d);
}

#endif // QT_WEBSOCKETS_LIB