mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-04-08 23:12:16 +02:00
Merge pull request #66 from FluffyJenkins/feature/websocketArrayBuffer
Added ArrayBuffer support to websockets
This commit is contained in:
commit
dc46d581b0
2 changed files with 30 additions and 2 deletions
|
@ -16,6 +16,8 @@
|
|||
|
||||
#include "ScriptEngine.h"
|
||||
|
||||
#include "ScriptEngineLogging.h"
|
||||
|
||||
WebSocketClass::WebSocketClass(QScriptEngine* engine, QString url) :
|
||||
_webSocket(new QWebSocket()),
|
||||
_engine(engine)
|
||||
|
@ -34,10 +36,11 @@ WebSocketClass::WebSocketClass(QScriptEngine* engine, QWebSocket* qWebSocket) :
|
|||
void WebSocketClass::initialize() {
|
||||
connect(_webSocket, &QWebSocket::disconnected, this, &WebSocketClass::handleOnClose);
|
||||
connect(_webSocket, &QWebSocket::textMessageReceived, this, &WebSocketClass::handleOnMessage);
|
||||
connect(_webSocket, &QWebSocket::binaryMessageReceived, this, &WebSocketClass::handleOnBinaryMessage);
|
||||
connect(_webSocket, &QWebSocket::connected, this, &WebSocketClass::handleOnOpen);
|
||||
connect(_webSocket, static_cast<void(QWebSocket::*)(QAbstractSocket::SocketError)>(&QWebSocket::error), this,
|
||||
&WebSocketClass::handleOnError);
|
||||
_binaryType = QStringLiteral("blob");
|
||||
_binaryType = QStringLiteral("arraybuffer");
|
||||
}
|
||||
|
||||
QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* engine) {
|
||||
|
@ -53,7 +56,12 @@ WebSocketClass::~WebSocketClass() {
|
|||
}
|
||||
|
||||
void WebSocketClass::send(QScriptValue message) {
|
||||
_webSocket->sendTextMessage(message.toString());
|
||||
if (message.isObject()) {
|
||||
QByteArray ba = qscriptvalue_cast<QByteArray>(message);
|
||||
_webSocket->sendBinaryMessage(ba);
|
||||
} else {
|
||||
_webSocket->sendTextMessage(message.toString());
|
||||
}
|
||||
}
|
||||
|
||||
void WebSocketClass::close() {
|
||||
|
@ -97,6 +105,25 @@ void WebSocketClass::handleOnMessage(const QString& message) {
|
|||
}
|
||||
}
|
||||
|
||||
void WebSocketClass::handleOnBinaryMessage(const QByteArray& message) {
|
||||
if (_onMessageEvent.isFunction()) {
|
||||
QScriptValueList args;
|
||||
QScriptValue arg = _engine->newObject();
|
||||
QScriptValue data = _engine->newVariant(QVariant::fromValue(message));
|
||||
QScriptValue ctor = _engine->globalObject().property("ArrayBuffer");
|
||||
auto array = qscriptvalue_cast<ArrayBufferClass*>(ctor.data());
|
||||
QScriptValue arrayBuffer;
|
||||
if (!array) {
|
||||
qCWarning(scriptengine) << "WebSocketClass::handleOnBinaryMessage !ArrayBuffer";
|
||||
} else {
|
||||
arrayBuffer = _engine->newObject(array, data);
|
||||
}
|
||||
arg.setProperty("data", arrayBuffer);
|
||||
args << arg;
|
||||
_onMessageEvent.call(QScriptValue(), args);
|
||||
}
|
||||
}
|
||||
|
||||
void WebSocketClass::handleOnOpen() {
|
||||
if (_onOpenEvent.isFunction()) {
|
||||
_onOpenEvent.call();
|
||||
|
|
|
@ -123,6 +123,7 @@ private slots:
|
|||
void handleOnClose();
|
||||
void handleOnError(QAbstractSocket::SocketError error);
|
||||
void handleOnMessage(const QString& message);
|
||||
void handleOnBinaryMessage(const QByteArray& message);
|
||||
void handleOnOpen();
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue