diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/client/helper.ts | 3 | ||||
-rw-r--r-- | source/client/local_user.ts | 1 | ||||
-rw-r--r-- | source/client/logger.ts | 38 | ||||
-rw-r--r-- | source/client/remote_user.ts | 14 | ||||
-rw-r--r-- | source/client/rnnoise.ts | 6 | ||||
-rw-r--r-- | source/client/user.ts | 7 | ||||
-rw-r--r-- | source/server/room.ts | 2 |
7 files changed, 46 insertions, 25 deletions
diff --git a/source/client/helper.ts b/source/client/helper.ts index 9725091..37da7b9 100644 --- a/source/client/helper.ts +++ b/source/client/helper.ts @@ -4,7 +4,7 @@ import { parameters } from "./index.ts" export function get_query_params(): { [key: string]: string } { const q: { [key: string]: string } = {} - for (const kv of window.location.search.substr(1).split("&")) { + for (const kv of window.location.search.substring(1).split("&")) { const [key, value] = kv.split("=") q[decodeURIComponent(key)] = decodeURIComponent(value) } @@ -16,7 +16,6 @@ export function hex_id(len = 8): string { return Math.floor(Math.random() * 16 ** len).toString(16).padStart(len, "0") } - export function parameter_bool(name: string, def: boolean): boolean { const v = parameters[name] if (!v) return def diff --git a/source/client/local_user.ts b/source/client/local_user.ts index 05b5578..ca91a19 100644 --- a/source/client/local_user.ts +++ b/source/client/local_user.ts @@ -19,6 +19,7 @@ export class LocalUser extends User { this.local = true this.create_controls() this.add_initial_tracks() + log("usermodel", `added local user: ${this.name}`) } async add_initial_tracks() { diff --git a/source/client/logger.ts b/source/client/logger.ts index f4f4727..1f7139c 100644 --- a/source/client/logger.ts +++ b/source/client/logger.ts @@ -1,13 +1,16 @@ /// <reference lib="dom" /> -export type LogTag = "webrtc" | "ws" | "media" | "*" | "misc" -const log_tag_color: { [key in LogTag]: string } = { - "*": "#FF0000", - webrtc: "#FF00FF", - media: "#FFFF00", - ws: "#00FFFF", - misc: "#2222FF", +const log_tag_color = { + "*": "#FF4444", + webrtc: "#FF44FF", + media: "#FFFF44", + ws: "#44FFFF", + rnnoise: "#2222FF", + usermodel: "#44FF44", } +export type LogTag = keyof typeof log_tag_color + +let logger_container: HTMLDivElement // TODO maybe log time aswell // deno-lint-ignore no-explicit-any @@ -17,4 +20,25 @@ export function log(tag: LogTag, message: string, ...data: any[]) { if (e instanceof MediaStreamTrack) data[i] = `(${e.kind}) ${e.id}` } console.log(`%c[${tag}] ${message}`, "color:" + log_tag_color[tag], ...data); + + if (logger_container) { + const e = document.createElement("p") + e.classList.add("logger-line") + e.textContent = `[${tag}] ${message}` + e.style.color = log_tag_color[tag] + logger_container.append(e) + setTimeout(() => { + e.remove() + }, 6000) + } } + +globalThis.addEventListener("load", () => { + const d = document.createElement("div") + d.classList.add("logger-container") + document.body.append(d) + logger_container = d + + // clear the console every hour so logs dont accumulate + setInterval(() => console.clear(), 1000 * 60 * 60) +}) diff --git a/source/client/remote_user.ts b/source/client/remote_user.ts index bd2df1c..a0fdeaf 100644 --- a/source/client/remote_user.ts +++ b/source/client/remote_user.ts @@ -12,6 +12,7 @@ export class RemoteUser extends User { constructor(room: Room, name: string) { super(room, name) + log("usermodel", `added remote user: ${name}`) this.peer = new RTCPeerConnection(servers) this.peer.onicecandidate = ev => { if (!ev.candidate) return @@ -19,11 +20,11 @@ export class RemoteUser extends User { } this.peer.ontrack = ev => { const t = ev.track - log("media", "remote track", t) + log("media", `remote track: ${this.name}`, t) this.add_track(new TrackHandle(t)) } this.peer.onnegotiationneeded = async () => { - log("webrtc", "negotiation needed") + log("webrtc", `negotiation needed: ${this.name}`) while (this.negotiation_busy) { await new Promise<void>(r => setTimeout(() => r(), 100)) } @@ -36,12 +37,12 @@ export class RemoteUser extends User { const offer_description = await this.peer.createOffer() await this.peer.setLocalDescription(offer_description) const offer = { type: offer_description.type, sdp: offer_description.sdp } - log("webrtc", "sent offer", { a: offer }) + log("webrtc", `sent offer: ${this.name}`, { a: offer }) this.room.websocket_send({ receiver: this.name, offer }) } async on_offer(offer: RTCSessionDescriptionInit) { this.negotiation_busy = true - log("webrtc", "got offer", { a: offer }) + log("webrtc", `got offer: ${this.name}`, { a: offer }) const offer_description = new RTCSessionDescription(offer) await this.peer.setRemoteDescription(offer_description) this.answer() @@ -50,12 +51,12 @@ export class RemoteUser extends User { const answer_description = await this.peer.createAnswer() await this.peer.setLocalDescription(answer_description) const answer = { type: answer_description.type, sdp: answer_description.sdp } - log("webrtc", "sent answer", { a: answer }) + log("webrtc", `sent answer: ${this.name}`, { a: answer }) this.room.websocket_send({ receiver: this.name, answer }) this.negotiation_busy = false } async on_answer(answer: RTCSessionDescriptionInit) { - log("webrtc", "got answer", { a: answer }) + log("webrtc", `got answer: ${this.name}`, { a: answer }) const answer_description = new RTCSessionDescription(answer) await this.peer.setRemoteDescription(answer_description) this.negotiation_busy = false @@ -66,6 +67,7 @@ export class RemoteUser extends User { } leave() { + log("usermodel", `remove remote user: ${this.name}`) this.peer.close() this.room.el.removeChild(this.el) } diff --git a/source/client/rnnoise.ts b/source/client/rnnoise.ts index 4c07bcb..71c73e6 100644 --- a/source/client/rnnoise.ts +++ b/source/client/rnnoise.ts @@ -15,13 +15,13 @@ declare global { // TODO fix leak export async function get_rnnoise_node(context: AudioContext): Promise<RNNoiseNode> { - log("misc", "rnnoise enabled") + log("rnnoise", "enabled") //@ts-ignore asfdasfd let RNNoiseNode: typeof RNNoiseNode = window.RNNoiseNode; let script: HTMLScriptElement; if (!RNNoiseNode) { - log("misc", "loading rnnoise...") + log("rnnoise", "loading wasm...") script = document.createElement("script") script.src = "/rnnoise/rnnoise-runtime.js" script.defer = true @@ -30,7 +30,7 @@ export async function get_rnnoise_node(context: AudioContext): Promise<RNNoiseNo while (!window.RNNoiseNode) await new Promise<void>(r => setTimeout(() => r(), 100)) //@ts-ignore asfdsadfsafd RNNoiseNode = window.RNNoiseNode; - log("misc", "rnnoise loaded") + log("rnnoise", "loaded") } await RNNoiseNode.register(context) diff --git a/source/client/user.ts b/source/client/user.ts index 13b8545..bda875f 100644 --- a/source/client/user.ts +++ b/source/client/user.ts @@ -37,13 +37,6 @@ export abstract class User { t.addEventListener("unmute", () => { log("media", "track unmuted", t) }) - //@ts-ignore a - window.blub = t - // setTimeout(() => { - // console.log("ev"); - // t.dispatchEvent(new Event("ended")) - // // t.dispatchEvent(new MediaStreamTrackEvent("ended", { track: t, bubbles: false, cancelable: true, composed: false })) - // }, 5000) } setup_view() { diff --git a/source/server/room.ts b/source/server/room.ts index 34d847c..049a626 100644 --- a/source/server/room.ts +++ b/source/server/room.ts @@ -41,6 +41,8 @@ api.get("/signaling/:id", c => { try { in_packet = JSON.parse(message) } catch (_e) { return } + if (JSON.stringify(in_packet) == "{}") return // drop ping + console.log(`[${room_name}] ${user_name} -> ${in_packet.receiver ?? "*"}: ${message.substr(0, 100)}`) const out_packet: SCPacket = { sender: user_name, data: in_packet } |