From 2cac71d01b23c2566b797160fd70f254c58550f3 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 8 Sep 2022 14:51:54 +0200 Subject: server rewrite works --- client-web/source/local_user.ts | 1 - client-web/source/rnnoise.ts | 2 +- client-web/source/room.ts | 38 +++++++++++++++++++++++--------------- 3 files changed, 24 insertions(+), 17 deletions(-) (limited to 'client-web/source') diff --git a/client-web/source/local_user.ts b/client-web/source/local_user.ts index bfd9459..b3d5692 100644 --- a/client-web/source/local_user.ts +++ b/client-web/source/local_user.ts @@ -8,7 +8,6 @@ import { Room } from "./room.ts"; import { TrackHandle } from "./track_handle.ts"; import { User } from "./user.ts"; - export class LocalUser extends User { mic_gain?: GainNode default_gain: number = parameter_number("mic_gain", 1) diff --git a/client-web/source/rnnoise.ts b/client-web/source/rnnoise.ts index 7867682..d6efb3b 100644 --- a/client-web/source/rnnoise.ts +++ b/client-web/source/rnnoise.ts @@ -23,7 +23,7 @@ export async function get_rnnoise_node(context: AudioContext): Promise = new Map() remote_users: Map = new Map() local_user!: LocalUser + my_id!: number websocket: WebSocket constructor(name: string) { @@ -34,17 +35,21 @@ export class Room { 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) { + this.my_id = packet.init.your_id + // no need to check compat for now because this is hosted in the same place + log("*", `server: ${packet.init.version}`) + } else 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) - ru.offer() - this.users.set(p.id, ru) - this.remote_users.set(p.id, ru) - return + if (p.id == this.my_id) { + this.local_user = new LocalUser(this, p.id, p.name); + } else { + const ru = new RemoteUser(this, p.id, p.name) + this.local_user.add_initial_to_remote(ru) + ru.offer() + this.users.set(p.id, ru) + this.remote_users.set(p.id, ru) + } } else if (packet.client_leave) { const p = packet.client_leave; log("*", `${this.name} ${p.id} left`); @@ -52,13 +57,16 @@ export class Room { this.users.delete(p.id) this.remote_users.delete(p.id) return - } - if (packet.message) { + } else 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) + const sender = this.users.get(p.sender) + if (sender instanceof RemoteUser) { + 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) + } else { + console.log("!", p, sender); + } } } websocket_close() { -- cgit v1.2.3-70-g09d2