Init push

This commit is contained in:
Fluffy Jenkins 2020-01-07 04:00:13 +00:00
parent 6b5d1c6191
commit b33ad80992
2 changed files with 27 additions and 1 deletions

View file

@ -34,10 +34,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,8 +54,13 @@ WebSocketClass::~WebSocketClass() {
}
void WebSocketClass::send(QScriptValue message) {
if (message.isObject()) {
QByteArray ba = qscriptvalue_cast<QByteArray>(message);
_webSocket->sendBinaryMessage(ba);
} else {
_webSocket->sendTextMessage(message.toString());
}
}
void WebSocketClass::close() {
this->close(QWebSocketProtocol::CloseCodeNormal);
@ -97,6 +103,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");
ArrayBufferClass* array = qscriptvalue_cast<ArrayBufferClass*>(ctor.data());
QScriptValue arrayBuffer;
if (!array) {
qWarning() << "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();

View file

@ -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();
};