From a7a48ae8fee8d949248c7688ac633da4e31fd45d Mon Sep 17 00:00:00 2001 From: Schluffe Date: Thu, 10 Sep 2026 22:46:50 +0200 Subject: [PATCH] Play with sockets --- .vscode/settings.json | 1 + server/deno.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 server/deno.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index df8fbad..13b9e7c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { "bun.debugTerminal.enabled": true, "bun.debugTerminal.stopOnEntry": false, + "deno.enable": true, "editor.formatOnSave": true, "editor.defaultFormatter": "biomejs.biome", "editor.codeActionsOnSave": { diff --git a/server/deno.ts b/server/deno.ts new file mode 100644 index 0000000..acb792c --- /dev/null +++ b/server/deno.ts @@ -0,0 +1,40 @@ +/// + +const clientsMap = new Map(); +let nextId = 1; + +const handleConnection = (socket: WebSocket): void => { + const id = nextId++; + + socket.onopen = () => { + clientsMap.set(id, socket); + broadcast(`${id} has joined!`); + }; + + socket.onclose = () => { + clientsMap.delete(id); + broadcast(`${id} has left!`); + }; + + socket.onmessage = console.log; + socket.onerror = console.error; +}; + +function broadcast(message: string): void { + for (const socket of clientsMap.values()) { + if (socket.readyState === WebSocket.OPEN) { + socket.send(message); + } + } +} + +Deno.serve({ port: 6969 }, (request) => { + if (request.headers.get("upgrade") !== "websocket") { + return new Response("Upgrade Required", { status: 426 }); + } + + const { socket, response } = Deno.upgradeWebSocket(request); + handleConnection(socket); + + return response; +});