diff options
Diffstat (limited to 'client-web/source/room.ts')
-rw-r--r-- | client-web/source/room.ts | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/client-web/source/room.ts b/client-web/source/room.ts index f22cff1..3ed7ddf 100644 --- a/client-web/source/room.ts +++ b/client-web/source/room.ts @@ -5,15 +5,15 @@ import { RemoteUser } from "./remote_user.ts"; import { User } from "./user.ts"; import { LocalUser } from "./local_user.ts"; import { hex_id, parameter_string } from "./helper.ts"; -import { PacketS, PacketC } from "../../common/packets.d.ts"; +import { ServerboundPacket, ClientboundPacket } from "../../common/packets.d.ts"; export class Room { el: HTMLElement name: string - users: Map<string, User> = new Map() - remote_users: Map<string, RemoteUser> = new Map() - local_user: LocalUser + users: Map<number, User> = new Map() + remote_users: Map<number, RemoteUser> = new Map() + local_user!: LocalUser websocket: WebSocket constructor(name: string) { @@ -26,37 +26,41 @@ export class Room { this.websocket.onmessage = (ev) => { this.websocket_message(JSON.parse(ev.data)) } - this.local_user = new LocalUser(this, parameter_string("username", `guest-${hex_id()}`)) } - websocket_send(data: PacketS) { - log("ws", `-> ${data.receiver ?? "*"}`, data) + websocket_send(data: ServerboundPacket) { + log("ws", `-> ${data.relay?.recipient ?? "*"}`, data) this.websocket.send(JSON.stringify(data)) } - websocket_message(packet: PacketC) { - if (packet.join) { - log("*", `${this.name} ${packet.sender} joined`); - const ru = new RemoteUser(this, packet.sender) + websocket_message(packet: ClientboundPacket) { + log("ws", `<- ${packet.message?.sender ?? "control packet"}: `, packet); + if (packet.init) { + this.local_user = new LocalUser(this, packet.init.your_id, "..."); + } + if (packet.client_join) { + const p = packet.client_join + log("*", `${this.name} ${p.id} joined`); + const ru = new RemoteUser(this, p.id, p.name) this.local_user.add_initial_to_remote(ru) - if (!packet.stable) ru.offer() - this.users.set(packet.sender, ru) - this.remote_users.set(packet.sender, ru) + ru.offer() + this.users.set(p.id, ru) + this.remote_users.set(p.id, ru) return - } - const sender = this.remote_users.get(packet.sender) - if (!sender) return console.warn(`unknown sender ${packet.sender}`) - if (packet.leave) { - log("*", `${this.name} ${packet.sender} left`); - sender.leave() - this.users.delete(packet.sender) - this.remote_users.delete(packet.sender) + } else if (packet.client_leave) { + const p = packet.client_leave; + log("*", `${this.name} ${p.id} left`); + this.remote_users.get(p.id)!.leave() + this.users.delete(p.id) + this.remote_users.delete(p.id) return } - if (!packet.data) return console.warn("dataless packet") - log("ws", `<- ${packet.sender}: `, packet.data); - if (packet.data.ice_candiate) sender.add_ice_candidate(packet.data.ice_candiate) - if (packet.data.offer) sender.on_offer(packet.data.offer) - if (packet.data.answer) sender.on_answer(packet.data.answer) + if (packet.message) { + const p = packet.message; + const sender = this.remote_users.get(p.sender)! + if (p.message.ice_candidate) sender.add_ice_candidate(p.message.ice_candidate) + if (p.message.offer) sender.on_offer(p.message.offer) + if (p.message.answer) sender.on_answer(p.message.answer) + } } websocket_close() { log("ws", "websocket closed"); |