- });
- socket.on("close", () => {
- const page = clients[sid].page;
- delete clients[sid];
- notifyRoom(page, "disconnect");
- if (page.indexOf("/game/") >= 0)
- notifyRoom("/", "gdisconnect"); //notify main hall
- });
+ };
+ const closeListener = () => {
+ // For browser or tab closing (including page reload):
+ doDisconnect();
+ };
+ // Update clients object: add new connexion
+ const newElt = { socket: socket, focus: true };
+ if (!clients[page])
+ clients[page] = { [sid]: {[tmpId]: newElt } };
+ else if (!clients[page][sid])
+ clients[page][sid] = { [tmpId]: newElt };
+ else
+ clients[page][sid][tmpId] = newElt;
+ // Also update helper correspondances
+ if (!idToSid[id]) idToSid[id] = sid;
+ if (!sidToPages[sid]) sidToPages[sid] = [];
+ const pgIndex = sidToPages[sid].findIndex(pg => pg == page);
+ if (pgIndex === -1) sidToPages[sid].push(page);
+ socket.on("message", messageListener);
+ socket.on("close", closeListener);