History

Init push

Fluffy Jenkins committed 6 years ago

Commit b33ad801 parent 6b5d1c62 files · +27 −1Browse files

Showing the changes to libraries/script-engine/src/WebSocketClass.cpp (1 of 2 files). Show all

Unified · Split

libraries/script-engine/src/WebSocketClass.cpp+26−1
@@ -34,10 +34,11 @@ WebSocketClass::WebSocketClass(QScriptEngine* engine, QWebSocket* qWebSocket) : · 33 unmodified lines
3434 void WebSocketClass::initialize() {
3535 connect(_webSocket, &QWebSocket::disconnected, this, &WebSocketClass::handleOnClose);
3636 connect(_webSocket, &QWebSocket::textMessageReceived, this, &WebSocketClass::handleOnMessage);
37+ connect(_webSocket, &QWebSocket::binaryMessageReceived, this, &WebSocketClass::handleOnBinaryMessage);
3738 connect(_webSocket, &QWebSocket::connected, this, &WebSocketClass::handleOnOpen);
3839 connect(_webSocket, static_cast<void(QWebSocket::*)(QAbstractSocket::SocketError)>(&QWebSocket::error), this,
3940 &WebSocketClass::handleOnError);
40− _binaryType = QStringLiteral("blob");
41+ _binaryType = QStringLiteral("arraybuffer");
4142 }
4243
4344 QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* engine) {
@@ -53,8 +54,13 @@ WebSocketClass::~WebSocketClass() { · 9 unmodified lines
5354 }
5455
5556 void WebSocketClass::send(QScriptValue message) {
57+ if (message.isObject()) {
58+ QByteArray ba = qscriptvalue_cast<QByteArray>(message);
59+ _webSocket->sendBinaryMessage(ba);
60+ } else {
5661 _webSocket->sendTextMessage(message.toString());
5762 }
63+}
5864
5965 void WebSocketClass::close() {
6066 this->close(QWebSocketProtocol::CloseCodeNormal);
@@ -97,6 +103,25 @@ void WebSocketClass::handleOnMessage(const QString& message) { · 36 unmodified lines
97103 }
98104 }
99105
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+
100125 void WebSocketClass::handleOnOpen() {
101126 if (_onOpenEvent.isFunction()) {
102127 _onOpenEvent.call();