aboutsummaryrefslogtreecommitdiff
path: root/source/client/room.ts
diff options
context:
space:
mode:
Diffstat (limited to 'source/client/room.ts')
-rw-r--r--source/client/room.ts72
1 files changed, 0 insertions, 72 deletions
diff --git a/source/client/room.ts b/source/client/room.ts
deleted file mode 100644
index 145fb1b..0000000
--- a/source/client/room.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-/// <reference lib="dom" />
-
-import { log } from "./logger.ts";
-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 "../packets.ts";
-
-
-export class Room {
- el: HTMLElement
- name: string
- users: Map<string, User> = new Map()
- remote_users: Map<string, RemoteUser> = new Map()
- local_user: LocalUser
- websocket: WebSocket
-
- constructor(name: string) {
- this.name = name
- this.el = document.createElement("div")
- this.el.classList.add("room")
- this.websocket = new WebSocket(`${window.location.protocol.endsWith("s:") ? "wss" : "ws"}://${window.location.host}/signaling/${encodeURIComponent(name)}`)
- this.websocket.onclose = () => this.websocket_close()
- this.websocket.onopen = () => this.websocket_open()
- 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)
- 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)
- 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)
- 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)
- 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)
- }
- websocket_close() {
- log("ws", "websocket closed");
- setTimeout(() => {
- window.location.reload()
- }, 1000)
- }
- websocket_open() {
- log("ws", "websocket opened");
- this.websocket.send(this.local_user.name)
- setInterval(() => this.websocket_send({}), 30000) // stupid workaround for nginx disconnection inactive connections
- }
-} \ No newline at end of file