- remove webSockets from List after disconnect.

- leave it up to the QtScript to delete the WebSocket / WebSocketServer objects
This commit is contained in:
Thijs Wenker 2015-08-22 01:33:22 +02:00
parent f512205f6f
commit 9edba451eb
3 changed files with 8 additions and 7 deletions

View file

@ -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<ScriptEngine*>(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) {

View file

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

View file

@ -40,9 +40,7 @@ QScriptValue WebSocketServerClass::constructor(QScriptContext* context, QScriptE
serverName = serverNameOption.toString();
}
}
auto webSocketServerClass = new WebSocketServerClass(engine, serverName, port);
connect(static_cast<ScriptEngine*>(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);
}