From ccd671c70c88f68d6ee8a8931bf1017077fcb4c3 Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Thu, 27 Jan 2022 16:22:15 +0100 Subject: [PATCH] Send ConnectedUsersMessages when user requests desiredName change --- server.node.ts | 73 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 18 deletions(-) diff --git a/server.node.ts b/server.node.ts index 8de9cdd..6d79f78 100644 --- a/server.node.ts +++ b/server.node.ts @@ -11,6 +11,7 @@ import type { TypingMessage, ConnectedUser, ConnectedUsersMessage, + DesiredNameMessage, } from "./lib/ServerMessage"; import { @@ -97,43 +98,78 @@ async function handleCloseConnection(id: string) { desiredNames.delete(id); } + const connected = + Array.from(activeConnections, + (id) => { + return { + id, + desiredName: desiredNames.get(id), + } as ConnectedUser; + }); for (const to of webSocketServer.clients) { to.send( JSON.stringify({ type: MessageType.CONNECTED_USERS, __ctx: `${id} left`, date: Date.now(), - connected: - Array.from(activeConnections, - (id) => { - return { - id, - desiredName: desiredNames.get(id), - } as ConnectedUser; - }), + connected, } as ConnectedUsersMessage) ); } - } function handleNewConnection(id: string) { activeConnections.add(id); + const connected = + Array.from(activeConnections, + (id) => { + return { + id, + desiredName: desiredNames.get(id), + } as ConnectedUser; + }); + for (const to of webSocketServer.clients) { to.send( JSON.stringify({ type: MessageType.CONNECTED_USERS, __ctx: `${id} joined`, date: Date.now(), - connected: - Array.from(activeConnections, - (id) => { - return { - id, - desiredName: desiredNames.get(id), - } as ConnectedUser; - }), + connected, + } as ConnectedUsersMessage) + ); + } +} + +async function handleDesiredNameMessage(message: DesiredNameMessage, from: string) { + if (!activeConnections.has(from) && desiredNames.has(from)) { + desiredNames.delete(from); + return; + } + + console.debug(`${from} set desiredName to ${message.desiredName}`); + if (message.desiredName === undefined) { + desiredNames.delete(from); + } else { + desiredNames.set(from, message.desiredName); + } + + const connected = + Array.from(activeConnections, + (id) => { + return { + id, + desiredName: desiredNames.get(id), + } as ConnectedUser; + }); + for (const to of webSocketServer.clients) { + to.send( + JSON.stringify({ + type: MessageType.CONNECTED_USERS, + __ctx: `${from} changed desiredName to ${message.desiredName}`, + date: Date.now(), + connected, } as ConnectedUsersMessage) ); } @@ -171,9 +207,10 @@ webSocketServer.on("connection", function connection(socket) { } else if (isTypingMessage(message)) { handleTypingMessage(message, authorId); } else if (isDesiredNameMessage(message)) { - desiredNames.set(authorId, message.desiredName); + handleDesiredNameMessage(message, authorId); } }); + socket.on("close", function close() { console.log("closed a connection"); });