aboutsummaryrefslogtreecommitdiff
path: root/client-web/source/room.ts
diff options
context:
space:
mode:
Diffstat (limited to 'client-web/source/room.ts')
-rw-r--r--client-web/source/room.ts58
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");