From 6c76594e9e5f0a88db8e0355f67bbc0235f3da10 Mon Sep 17 00:00:00 2001 From: Tyris0001 <68648633+Tyris0001@users.noreply.github.com> Date: Wed, 12 Oct 2022 23:08:59 +0200 Subject: [PATCH 1/2] Single client disconnection :100: --- websocket_server/websocket_server.py | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/websocket_server/websocket_server.py b/websocket_server/websocket_server.py index 083ee17..5615319 100644 --- a/websocket_server/websocket_server.py +++ b/websocket_server/websocket_server.py @@ -98,6 +98,12 @@ def disconnect_clients_gracefully(self, status=CLOSE_STATUS_NORMAL, reason=DEFAU def disconnect_clients_abruptly(self): self._disconnect_clients_abruptly() + def disconnect_client_gracefully(self, client, status=CLOSE_STATUS_NORMAL, reason=DEFAULT_CLOSE_REASON): + self._disconnect_client_gracefully(client, status, reason) + + def disconnect_client_abruptly(self, client): + self._disconnect_client_abruptly(client) + class WebsocketServer(ThreadingMixIn, TCPServer, API): """ @@ -247,6 +253,33 @@ def _disconnect_clients_abruptly(self): """ self._terminate_client_handlers() + def _disconnect_client_gracefully(self, client, status, reason): + """ + Terminate a client gracefully without shutting down the server + """ + for cl in self.clients: + if cl["id"] == client["id"]: + self._client_left_(client["handler"]) + client["handler"].send_close(status, reason) + return + + raise "Client does not exist/was not found" + + def _disconnect_client_abruptly(self, client): + """ + Terminate client abruptly (no CLOSE handshake) without shutting down the server + """ + for cl in self.clients: + if cl["id"] == client["id"]: + self._client_left_(client["handler"]) + client["handler"].keep_alive = False + client["handler"].finish() + client["handler"].connection.close() + return + + raise "Client does not exist/was not found" + + def _deny_new_connections(self, status, reason): self._deny_clients = { "status": status, From 28018c245c3fb1593f451a5e48edcd2a4ef1d090 Mon Sep 17 00:00:00 2001 From: Tyris <68648633+Tyris0001@users.noreply.github.com> Date: Thu, 13 Oct 2022 09:34:07 +0200 Subject: [PATCH 2/2] Update websocket_server.py --- websocket_server/websocket_server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/websocket_server/websocket_server.py b/websocket_server/websocket_server.py index 5615319..c05b38f 100644 --- a/websocket_server/websocket_server.py +++ b/websocket_server/websocket_server.py @@ -263,7 +263,7 @@ def _disconnect_client_gracefully(self, client, status, reason): client["handler"].send_close(status, reason) return - raise "Client does not exist/was not found" + logger.error("Client does not exist/was not found") def _disconnect_client_abruptly(self, client): """ @@ -277,7 +277,7 @@ def _disconnect_client_abruptly(self, client): client["handler"].connection.close() return - raise "Client does not exist/was not found" + logger.error("Client does not exist/was not found") def _deny_new_connections(self, status, reason):