Showing the changes to libraries/script-engine/src/WebSocketClass.cpp (1 of 2 files). Show all
Unified · Split
| @@ -34,10 +34,11 @@ WebSocketClass::WebSocketClass(QScriptEngine* engine, QWebSocket* qWebSocket) : · 33 unmodified lines | |||
| 34 | void WebSocketClass::initialize() { | 34 | void WebSocketClass::initialize() { |
| 35 | connect(_webSocket, &QWebSocket::disconnected, this, &WebSocketClass::handleOnClose); | 35 | connect(_webSocket, &QWebSocket::disconnected, this, &WebSocketClass::handleOnClose); |
| 36 | connect(_webSocket, &QWebSocket::textMessageReceived, this, &WebSocketClass::handleOnMessage); | 36 | connect(_webSocket, &QWebSocket::textMessageReceived, this, &WebSocketClass::handleOnMessage); |
| 37 | connect(_webSocket, &QWebSocket::binaryMessageReceived, this, &WebSocketClass::handleOnBinaryMessage); | ||
| 37 | connect(_webSocket, &QWebSocket::connected, this, &WebSocketClass::handleOnOpen); | 38 | connect(_webSocket, &QWebSocket::connected, this, &WebSocketClass::handleOnOpen); |
| 38 | connect(_webSocket, static_cast<void(QWebSocket::*)(QAbstractSocket::SocketError)>(&QWebSocket::error), this, | 39 | connect(_webSocket, static_cast<void(QWebSocket::*)(QAbstractSocket::SocketError)>(&QWebSocket::error), this, |
| 39 | &WebSocketClass::handleOnError); | 40 | &WebSocketClass::handleOnError); |
| 40 | _binaryType = QStringLiteral("blob"); | 41 | _binaryType = QStringLiteral("arraybuffer"); |
| 41 | } | 42 | } |
| 42 | 43 | ||
| 43 | QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* engine) { | 44 | QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* engine) { |
| @@ -53,8 +54,13 @@ WebSocketClass::~WebSocketClass() { · 9 unmodified lines | |||
| 53 | } | 54 | } |
| 54 | 55 | ||
| 55 | void WebSocketClass::send(QScriptValue message) { | 56 | void WebSocketClass::send(QScriptValue message) { |
| 57 | if (message.isObject()) { | ||
| 58 | QByteArray ba = qscriptvalue_cast<QByteArray>(message); | ||
| 59 | _webSocket->sendBinaryMessage(ba); | ||
| 60 | } else { | ||
| 56 | _webSocket->sendTextMessage(message.toString()); | 61 | _webSocket->sendTextMessage(message.toString()); |
| 57 | } | 62 | } |
| 63 | } | ||
| 58 | 64 | ||
| 59 | void WebSocketClass::close() { | 65 | void WebSocketClass::close() { |
| 60 | this->close(QWebSocketProtocol::CloseCodeNormal); | 66 | this->close(QWebSocketProtocol::CloseCodeNormal); |
| @@ -97,6 +103,25 @@ void WebSocketClass::handleOnMessage(const QString& message) { · 36 unmodified lines | |||
| 97 | } | 103 | } |
| 98 | } | 104 | } |
| 99 | 105 | ||
| 106 | void WebSocketClass::handleOnBinaryMessage(const QByteArray& message) { | ||
| 107 | if (_onMessageEvent.isFunction()) { | ||
| 108 | QScriptValueList args; | ||
| 109 | QScriptValue arg = _engine->newObject(); | ||
| 110 | QScriptValue data = _engine->newVariant(QVariant::fromValue(message)); | ||
| 111 | QScriptValue ctor = _engine->globalObject().property("ArrayBuffer"); | ||
| 112 | ArrayBufferClass* array = qscriptvalue_cast<ArrayBufferClass*>(ctor.data()); | ||
| 113 | QScriptValue arrayBuffer; | ||
| 114 | if (!array) { | ||
| 115 | qWarning() << "WebSocketClass::handleOnBinaryMessage !ArrayBuffer"; | ||
| 116 | } else { | ||
| 117 | arrayBuffer = _engine->newObject(array, data); | ||
| 118 | } | ||
| 119 | arg.setProperty("data", arrayBuffer); | ||
| 120 | args << arg; | ||
| 121 | _onMessageEvent.call(QScriptValue(), args); | ||
| 122 | } | ||
| 123 | } | ||
| 124 | |||
| 100 | void WebSocketClass::handleOnOpen() { | 125 | void WebSocketClass::handleOnOpen() { |
| 101 | if (_onOpenEvent.isFunction()) { | 126 | if (_onOpenEvent.isFunction()) { |
| 102 | _onOpenEvent.call(); | 127 | _onOpenEvent.call(); |