diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-07 11:14:42 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-07 11:14:42 +0200 |
commit | 61950198e3bf06555f48e8f51c882a4c3cce5128 (patch) | |
tree | a7701a44804d4a2a634f3410d400545ea82d1c45 /source/server/room.ts | |
parent | 832f48f29098cc6f840ade90db3b94efa67c6833 (diff) | |
download | keks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar keks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar.bz2 keks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar.zst |
REFACTOR! pt.1
Diffstat (limited to 'source/server/room.ts')
-rw-r--r-- | source/server/room.ts | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/source/server/room.ts b/source/server/room.ts deleted file mode 100644 index d9c1a25..0000000 --- a/source/server/room.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { Router } from "https://deno.land/x/oak@v10.4.0/router.ts"; -import { PacketC, PacketS } from "../packets.ts"; - -export const api = new Router() - -type Room = Map<string, WebSocket> -const rooms: Map<string, Room> = new Map() - -function send_packet(ws: WebSocket, packet: PacketC) { - ws.send(JSON.stringify(packet)) -} - -api.get("/signaling/:id", c => { - const ws = c.upgrade() - - const room_name = c.params.id - const room: Room = rooms.get(c.params.id) ?? new Map() - let initialized = false - let user_name = "" - - const init = (n: string) => { - if (room.get(n)) return ws.close() - initialized = true - user_name = n - rooms.set(c.params.id, room) - room.forEach(uws => send_packet(uws, { sender: user_name, join: true })) - room.forEach((_, uname) => send_packet(ws, { sender: uname, join: true, stable: true })) - room.set(user_name, ws) - console.log(`[${room_name}] ${user_name} joined`) - } - ws.onclose = () => { - room.delete(user_name) - room.forEach(uws => send_packet(uws, { sender: user_name, leave: true })) - if (room.size == 0) rooms.delete(room_name) - console.log(`[${room_name}] ${user_name} left`) - } - ws.onmessage = ev => { - const message = ev.data.toString() - if (!initialized) return init(message) - let in_packet: PacketS; - try { in_packet = JSON.parse(message) } - catch (_e) { return } - - if (JSON.stringify(in_packet) == "{}") return // drop ping - - console.log(`[${room_name}] ${user_name} -> ${in_packet.receiver ?? "*"}: ${message.substr(0, 100)}`) - const out_packet: PacketC = { sender: user_name, data: in_packet } - - if (in_packet.receiver) { - const rws = room.get(in_packet.receiver) - if (rws) send_packet(rws, out_packet) - } else { - room.forEach((uws, uname) => { - if (uname != user_name) send_packet(uws, out_packet) - }) - } - } -}) |