From 0a1011f0e52dc286f81ae5e2db739f7ad06f26fe Mon Sep 17 00:00:00 2001 From: jude Date: Tue, 31 Jan 2023 12:44:47 +0000 Subject: [PATCH] Add before unload event to more consistently remove players who leave --- static/js/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/static/js/index.js b/static/js/index.js index b539e72..e9455ae 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -13,6 +13,16 @@ let game_state = WAITING; let socket; +// Not totally reliable but better than nothing. +window.addEventListener("beforeunload", () => { + socket.emit("message", { + type: "DISCONNECT", + id: window.crypto.randomUUID(), + author: ID, + name: "", + }); +}); + document.addEventListener("DOMContentLoaded", () => { socket = io(); @@ -39,6 +49,10 @@ document.addEventListener("DOMContentLoaded", () => { playerConnected(data); break; + case "DISCONNECT": + playerDisconnected(data); + break; + case "KEEPALIVE": keepAlive(data); break; @@ -90,6 +104,12 @@ function playerConnected(data) { updatePlayerDom(); } +function playerDisconnected(data) { + console.log("deleting player"); + delete players[data.author]; + updatePlayerDom(); +} + /** * Process keep-alive packets: these are packets that check players are still online. *