diff options
author | MetaMuffin <metamuffin@yandex.com> | 2021-08-05 11:00:46 +0200 |
---|---|---|
committer | MetaMuffin <metamuffin@yandex.com> | 2021-08-05 11:00:46 +0200 |
commit | 4475fb02925c04ba19cb9ec8b99110e4e74c3acb (patch) | |
tree | 85df7f1e46ccf7abdc80303b88d57779c0f40008 /source/server | |
parent | a8d6fa97be777ab08f09252dc4864ba241b17687 (diff) | |
download | keks-meet-4475fb02925c04ba19cb9ec8b99110e4e74c3acb.tar keks-meet-4475fb02925c04ba19cb9ec8b99110e4e74c3acb.tar.bz2 keks-meet-4475fb02925c04ba19cb9ec8b99110e4e74c3acb.tar.zst |
updated licence, added all the code
Diffstat (limited to 'source/server')
-rw-r--r-- | source/server/index.ts | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/source/server/index.ts b/source/server/index.ts index 8af789b..ef70492 100644 --- a/source/server/index.ts +++ b/source/server/index.ts @@ -7,12 +7,13 @@ import http from "http" import https from "https" import expressWs from "express-ws"; import { CSPacket, SCPacket } from "../client/types"; +import * as ws from "ws" -type Room = Map<string, any> +type Room = Map<string, ws> const rooms: Map<string, Room> = new Map() -function ws_send(ws: any, data: string) { - try { ws.send(data) } +function ws_send(ws: ws, data: SCPacket) { + try { ws.send(JSON.stringify(data)) } catch (e) { console.warn("i hate express-ws") } } @@ -45,7 +46,7 @@ async function main() { app.ws("/room/:id", (ws, req) => { const room_name = req.params.id - const room = rooms.get(req.params.id) ?? new Map() + const room: Map<string, ws> = rooms.get(req.params.id) ?? new Map() let initialized = false let user_name = "" @@ -53,32 +54,33 @@ async function main() { initialized = true user_name = n rooms.set(req.params.id, room) - room.forEach((_, uws) => ws_send(uws, JSON.stringify({ sender: user_name, join: true }))) + room.forEach(uws => ws_send(uws, { sender: user_name, join: true })) + room.forEach((_, uname) => ws_send(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) => ws_send(uws, JSON.stringify({ sender: user_name, leave: true }))) + room.forEach(uws => ws_send(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: CSPacket; try { in_packet = JSON.parse(message) } catch (e) { return } - if (!initialized) return init(message) - console.log(`[${room_name}] ${user_name} -> ${in_packet.receiver ?? "*"}: ${message}`) + console.log(`[${room_name}] ${user_name} -> ${in_packet.receiver ?? "*"}: ${message.substr(0, 100)}`) const out_packet: SCPacket = { sender: user_name, data: in_packet } if (in_packet.receiver) { const rws = room.get(in_packet.receiver) - if (rws) ws_send(rws, JSON.stringify(out_packet)) + if (rws) ws_send(rws, out_packet) } else { - room.forEach((uname, uws) => { - if (uname != user_name) ws_send(uws, JSON.stringify(out_packet)) + room.forEach((uws, uname) => { + if (uname != user_name) ws_send(uws, out_packet) }) } } |