Pepguy commited on
Commit
7bb4f1c
·
verified ·
1 Parent(s): 76320ac

Update app.js

Browse files
Files changed (1) hide show
  1. app.js +36 -37
app.js CHANGED
@@ -1,10 +1,7 @@
1
- // host.js
2
- import { serve } from "bun";
3
-
4
  const rooms = new Map(); // roomId ⇒ Set<ServerWebSocket>
5
 
6
- serve({
7
- port: 7860, // ← change if you need a different port
8
 
9
  fetch(req, server) {
10
  const url = new URL(req.url);
@@ -23,38 +20,9 @@ serve({
23
 
24
  // WebSocket upgrade
25
  if (req.headers.get("upgrade")?.toLowerCase() === "websocket") {
26
- const ws = server.upgrade(req);
27
- ws.onmessage = (raw) => {
28
- let msg;
29
- try { msg = JSON.parse(raw); } catch { return; }
30
- const { action, room, message } = msg;
31
- if (action === "join" && room) {
32
- // join room
33
- rooms.get(room)?.delete(ws);
34
- let set = rooms.get(room);
35
- if (!set) { set = new Set(); rooms.set(room, set); }
36
- set.add(ws);
37
- ws.send(JSON.stringify({ system: `Joined room ${room}` }));
38
- }
39
- if (action === "post" && room && message) {
40
- // broadcast
41
- const set = rooms.get(room);
42
- if (!set) return;
43
- const payload = JSON.stringify({
44
- room,
45
- message,
46
- from: "host",
47
- timestamp: Date.now(),
48
- });
49
- for (const client of set) {
50
- if (client.readyState === 1) client.send(payload);
51
- }
52
- }
53
- };
54
- ws.onclose = () => {
55
- for (const set of rooms.values()) set.delete(ws);
56
- };
57
- return ws;
58
  }
59
 
60
  // Serve inline HTML test page
@@ -95,6 +63,37 @@ serve({
95
 
96
  return new Response("Not Found", { status: 404, headers: { "Access-Control-Allow-Origin": "*" } });
97
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  });
99
 
100
  console.log("✅ Host server running on ws://localhost:7860");
 
 
 
 
1
  const rooms = new Map(); // roomId ⇒ Set<ServerWebSocket>
2
 
3
+ Bun.serve({
4
+ port: 7860,
5
 
6
  fetch(req, server) {
7
  const url = new URL(req.url);
 
20
 
21
  // WebSocket upgrade
22
  if (req.headers.get("upgrade")?.toLowerCase() === "websocket") {
23
+ const success = server.upgrade(req);
24
+ if (success) return; // Bun returns 101 automatically
25
+ return new Response("Upgrade failed", { status: 500 });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  }
27
 
28
  // Serve inline HTML test page
 
63
 
64
  return new Response("Not Found", { status: 404, headers: { "Access-Control-Allow-Origin": "*" } });
65
  },
66
+
67
+ websocket: {
68
+ message(ws, raw) {
69
+ let msg;
70
+ try { msg = JSON.parse(raw); } catch { return; }
71
+ const { action, room, message } = msg;
72
+ if (action === "join" && room) {
73
+ for (const set of rooms.values()) set.delete(ws);
74
+ let set = rooms.get(room);
75
+ if (!set) { set = new Set(); rooms.set(room, set); }
76
+ set.add(ws);
77
+ ws.send(JSON.stringify({ system: `Joined room ${room}` }));
78
+ }
79
+ if (action === "post" && room && message) {
80
+ const set = rooms.get(room);
81
+ if (!set) return;
82
+ const payload = JSON.stringify({
83
+ room,
84
+ message,
85
+ from: "host",
86
+ timestamp: Date.now(),
87
+ });
88
+ for (const client of set) {
89
+ if (client.readyState === 1) client.send(payload);
90
+ }
91
+ }
92
+ },
93
+ close(ws) {
94
+ for (const set of rooms.values()) set.delete(ws);
95
+ },
96
+ },
97
  });
98
 
99
  console.log("✅ Host server running on ws://localhost:7860");