diff --git a/client-src/routes/index.tsx b/client-src/routes/index.tsx index 8033490..e653e5c 100644 --- a/client-src/routes/index.tsx +++ b/client-src/routes/index.tsx @@ -52,6 +52,13 @@ function Index() { setName(data.name); break; } + case "name_changed": { + setUserMap((prev) => ({ + ...prev, + [data.userId]: { ...prev[data.userId], name: data.name }, + })); + break; + } case "ribbit_sent": { const audio = new Audio("/ribbit.mp3"); audio.play().catch((err) => console.error("Failed to play ribbit:", err)); diff --git a/isomophic-src/isomorphic.ts b/isomophic-src/isomorphic.ts index 1f0e82b..81a7791 100644 --- a/isomophic-src/isomorphic.ts +++ b/isomophic-src/isomorphic.ts @@ -106,12 +106,19 @@ const GetFrogSchema = z.object({ name: z.string(), }); +const NameChangedSchema = z.object({ + type: z.literal("name_changed"), + userId: z.string(), + name: z.string(), +}); + // The type of messages sent from the server to the client via WebSocket export const FromServerSocketMessageSchema = z.union([ SVGUploadedSchema, RibbitSentSchema, FrogChangedSchema, GetFrogSchema, + NameChangedSchema, ]); export type FromServerSocketMessage = z.infer; diff --git a/server-src/server.ts b/server-src/server.ts index a8323a7..8d9c6ba 100644 --- a/server-src/server.ts +++ b/server-src/server.ts @@ -76,6 +76,11 @@ export class Chat extends Server { } case "change-name": { this.ctx.storage.put("name", data.name); + this.broadcast(getMessageForClient({ + type: "name_changed", + userId: connection.id, + name: data.name, + })); break; } }