diff options
author | Nobuaki Sukegawa <nsukeg@gmail.com> | 2015-09-15 06:21:47 +0900 |
---|---|---|
committer | Nobuaki Sukegawa <nsukeg@gmail.com> | 2016-03-05 08:29:48 +0000 |
commit | 9b804c270d11d34d37c08a5145dba083a6b0c1a7 (patch) | |
tree | a8b8be98b6db51806493921bcfb6592c75a863d8 | |
parent | b021c367e3796d7046797d5b93af2606d30b1ff2 (diff) | |
download | qtwebsockets-9b804c270d11d34d37c08a5145dba083a6b0c1a7.tar.gz |
Add binary message support to QML WebSocket type
Change-Id: I4472e899606d261420141e7b382717cbe12943c8
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
-rw-r--r-- | src/imports/qmlwebsockets/plugins.qmltypes | 17 | ||||
-rw-r--r-- | src/imports/qmlwebsockets/qmlwebsockets.pro | 2 | ||||
-rw-r--r-- | src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp | 1 | ||||
-rw-r--r-- | src/imports/qmlwebsockets/qqmlwebsocket.cpp | 24 | ||||
-rw-r--r-- | src/imports/qmlwebsockets/qqmlwebsocket.h | 3 | ||||
-rw-r--r-- | tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml | 25 |
6 files changed, 66 insertions, 6 deletions
diff --git a/src/imports/qmlwebsockets/plugins.qmltypes b/src/imports/qmlwebsockets/plugins.qmltypes index b79da44..cbbb628 100644 --- a/src/imports/qmlwebsockets/plugins.qmltypes +++ b/src/imports/qmlwebsockets/plugins.qmltypes @@ -4,15 +4,15 @@ import QtQuick.tooling 1.2 // It is used for QML tooling purposes only. // // This file was auto-generated by: -// 'qmlplugindump -nonrelocatable QtWebSockets 1.0' +// 'qmlplugindump -nonrelocatable QtWebSockets 1.1' Module { dependencies: [] Component { name: "QQmlWebSocket" prototype: "QObject" - exports: ["QtWebSockets/WebSocket 1.0"] - exportMetaObjectRevisions: [0] + exports: ["QtWebSockets/WebSocket 1.0", "QtWebSockets/WebSocket 1.1"] + exportMetaObjectRevisions: [0, 1] Enum { name: "Status" values: { @@ -32,6 +32,11 @@ Module { Parameter { name: "message"; type: "string" } } Signal { + name: "binaryMessageReceived" + revision: 1 + Parameter { name: "message"; type: "QByteArray" } + } + Signal { name: "statusChanged" Parameter { name: "status"; type: "Status" } } @@ -48,6 +53,12 @@ Module { type: "qlonglong" Parameter { name: "message"; type: "string" } } + Method { + name: "sendBinaryMessage" + revision: 1 + type: "qlonglong" + Parameter { name: "message"; type: "QByteArray" } + } } Component { name: "QQmlWebSocketServer" diff --git a/src/imports/qmlwebsockets/qmlwebsockets.pro b/src/imports/qmlwebsockets/qmlwebsockets.pro index dea84a8..fef47f4 100644 --- a/src/imports/qmlwebsockets/qmlwebsockets.pro +++ b/src/imports/qmlwebsockets/qmlwebsockets.pro @@ -1,4 +1,4 @@ -QT = core websockets qml +QT = core websockets qml qml-private core-private TARGETPATH = QtWebSockets diff --git a/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp b/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp index 11c9dec..24fe34a 100644 --- a/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp +++ b/src/imports/qmlwebsockets/qmlwebsockets_plugin.cpp @@ -53,6 +53,7 @@ void QtWebSocketsDeclarativeModule::registerTypes(const char *uri) // @uri QtWebSockets qmlRegisterType<QQmlWebSocket>(uri, 1 /*major*/, 0 /*minor*/, "WebSocket"); + qmlRegisterType<QQmlWebSocket, 1>(uri, 1 /*major*/, 1 /*minor*/, "WebSocket"); qmlRegisterType<QQmlWebSocketServer>(uri, 1 /*major*/, 0 /*minor*/, "WebSocketServer"); } diff --git a/src/imports/qmlwebsockets/qqmlwebsocket.cpp b/src/imports/qmlwebsockets/qqmlwebsocket.cpp index a5c7aeb..13b986e 100644 --- a/src/imports/qmlwebsockets/qqmlwebsocket.cpp +++ b/src/imports/qmlwebsockets/qqmlwebsocket.cpp @@ -91,6 +91,12 @@ */ /*! + \qmlsignal WebSocket::binaryMessageReceived(QString message) + \since 5.8 + This signal is emitted when a binary message is received. + */ + +/*! \qmlsignal WebSocket::statusChanged(Status status) This signal is emitted when the status of the WebSocket changes. the \l {WebSocket::status}{status} argument provides the current status. @@ -103,6 +109,12 @@ Sends \c message to the server. */ +/*! + \qmlmethod void WebSocket::sendBinaryMessage(ArrayBuffer message) + \since 5.8 + Sends \c message to the server. + */ + #include "qqmlwebsocket.h" #include <QtWebSockets/QWebSocket> @@ -145,6 +157,16 @@ qint64 QQmlWebSocket::sendTextMessage(const QString &message) return m_webSocket->sendTextMessage(message); } +qint64 QQmlWebSocket::sendBinaryMessage(const QByteArray &message) +{ + if (m_status != Open) { + setErrorString(tr("Messages can only be sent when the socket is open.")); + setStatus(Error); + return 0; + } + return m_webSocket->sendBinaryMessage(message); +} + QUrl QQmlWebSocket::url() const { return m_url; @@ -199,6 +221,8 @@ void QQmlWebSocket::setSocket(QWebSocket *socket) m_webSocket->setParent(Q_NULLPTR); connect(m_webSocket.data(), &QWebSocket::textMessageReceived, this, &QQmlWebSocket::textMessageReceived); + connect(m_webSocket.data(), &QWebSocket::binaryMessageReceived, + this, &QQmlWebSocket::binaryMessageReceived); typedef void (QWebSocket::* ErrorSignal)(QAbstractSocket::SocketError); connect(m_webSocket.data(), static_cast<ErrorSignal>(&QWebSocket::error), this, &QQmlWebSocket::onError); diff --git a/src/imports/qmlwebsockets/qqmlwebsocket.h b/src/imports/qmlwebsockets/qqmlwebsocket.h index c5682ed..c3a808f 100644 --- a/src/imports/qmlwebsockets/qqmlwebsocket.h +++ b/src/imports/qmlwebsockets/qqmlwebsocket.h @@ -83,10 +83,11 @@ public: bool isActive() const; Q_INVOKABLE qint64 sendTextMessage(const QString &message); - + Q_REVISION(1) Q_INVOKABLE qint64 sendBinaryMessage(const QByteArray &message); Q_SIGNALS: void textMessageReceived(QString message); + Q_REVISION(1) void binaryMessageReceived(QByteArray message); void statusChanged(Status status); void activeChanged(bool isActive); void errorStringChanged(QString errorString); diff --git a/tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml b/tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml index a8d3225..d0f19f6 100644 --- a/tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml +++ b/tests/auto/qml/qmlwebsockets/tst_qmlwebsockets.qml @@ -27,7 +27,7 @@ ****************************************************************************/ import QtQuick 2.5 -import QtWebSockets 1.0 +import QtWebSockets 1.1 import QtTest 1.1 Rectangle { @@ -84,5 +84,28 @@ Rectangle { socket.sendTextMessage('hello'); tryCompare(socket, 'status', WebSocket.Error); } + + function test_send_receive_binary() { + ensureConnected(); + + var o = {}; + var sending = new Uint8Array([42, 43]); + server.currentSocket.binaryMessageReceived.connect(function(received) { + var view = new DataView(received); + compare(received.byteLength, sending.length); + compare(view.getUInt8(0), sending[0]); + compare(view.getUInt8(1), sending[1]); + o.called = true; + }); + + socket.sendBinaryMessage(sending.buffer); + tryCompare(o, 'called', true); + } + + function test_send_binary_error_closed() { + ensureDisconnected(); + socket.sendBinaryMessage('hello'); + tryCompare(socket, 'status', WebSocket.Error); + } } } |