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;
+});