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
34void WebSocketClass::initialize() {34void 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
43QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* engine) {44QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* engine) {
@@ -53,8 +54,13 @@ WebSocketClass::~WebSocketClass() { · 9 unmodified lines
53}54}
54 55
55void WebSocketClass::send(QScriptValue message) {56void 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
59void WebSocketClass::close() {65void 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
106void 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
100void WebSocketClass::handleOnOpen() {125void WebSocketClass::handleOnOpen() {
101 if (_onOpenEvent.isFunction()) {126 if (_onOpenEvent.isFunction()) {
102 _onOpenEvent.call();127 _onOpenEvent.call();