From 9edba451eb989f68d9190887566dc610a0524027 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Sat, 22 Aug 2015 01:33:22 +0200 Subject: [PATCH] - remove webSockets from List after disconnect. - leave it up to the QtScript to delete the WebSocket / WebSocketServer objects --- libraries/script-engine/src/WebSocketClass.cpp | 6 ++---- libraries/script-engine/src/WebSocketClass.h | 2 ++ libraries/script-engine/src/WebSocketServerClass.cpp | 7 ++++--- 3 files changed, 8 insertions(+), 7 deletions(-) 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); }