diff --git a/libraries/script-engine/src/WebSocketClass.cpp b/libraries/script-engine/src/WebSocketClass.cpp index 7c7670fcce..8341d65d81 100644 --- a/libraries/script-engine/src/WebSocketClass.cpp +++ b/libraries/script-engine/src/WebSocketClass.cpp @@ -42,9 +42,7 @@ QScriptValue WebSocketClass::constructor(QScriptContext* context, QScriptEngine* if (context->argumentCount() > 0) { url = context->argument(0).toString(); } - auto webSocketClass = new WebSocketClass(engine, url); - connect(static_cast(engine), &ScriptEngine::finished, webSocketClass, &QObject::deleteLater); - return engine->newQObject(webSocketClass); + return engine->newQObject(new WebSocketClass(engine, url), QScriptEngine::ScriptOwnership); } WebSocketClass::~WebSocketClass() { @@ -111,7 +109,7 @@ void qWSCloseCodeFromScriptValue(const QScriptValue &object, QWebSocketProtocol: } QScriptValue webSocketToScriptValue(QScriptEngine* engine, WebSocketClass* const &in) { - return engine->newQObject(in); + return engine->newQObject(in, QScriptEngine::ScriptOwnership); } void webSocketFromScriptValue(const QScriptValue &object, WebSocketClass* &out) { diff --git a/libraries/script-engine/src/WebSocketClass.h b/libraries/script-engine/src/WebSocketClass.h index e053257e3d..b87d578843 100644 --- a/libraries/script-engine/src/WebSocketClass.h +++ b/libraries/script-engine/src/WebSocketClass.h @@ -50,6 +50,8 @@ public: CLOSED }; + QWebSocket* getWebSocket() { return _webSocket; } + int getConnecting() const { return CONNECTING; }; int getOpen() const { return OPEN; }; int getClosing() const { return CLOSING; }; diff --git a/libraries/script-engine/src/WebSocketServerClass.cpp b/libraries/script-engine/src/WebSocketServerClass.cpp index 045b39d800..3b3a02a7c9 100644 --- a/libraries/script-engine/src/WebSocketServerClass.cpp +++ b/libraries/script-engine/src/WebSocketServerClass.cpp @@ -40,9 +40,7 @@ QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptE serverName = serverNameOption.toString(); } } - auto webSocketServerClass = new WebSocketServerClass(engine, serverName, port); - connect(static_cast(engine), &ScriptEngine::finished, webSocketServerClass, &QObject::deleteLater); - return engine->newQObject(webSocketServerClass); + return engine->newQObject(new WebSocketServerClass(engine, serverName, port), QScriptEngine::ScriptOwnership); } WebSocketServerClass::~WebSocketServerClass() { @@ -55,6 +53,9 @@ WebSocketServerClass::~WebSocketServerClass() { void WebSocketServerClass::onNewConnection() { WebSocketClass* newClient = new WebSocketClass(_engine, _webSocketServer.nextPendingConnection()); _clients << newClient; + connect(newClient->getWebSocket(), &QWebSocket::disconnected, [newClient, this]() { + _clients.removeOne(newClient); + }); emit newConnection(newClient); }