aboutsummaryrefslogtreecommitdiff
path: root/source/client/remote_user.ts
diff options
context:
space:
mode:
Diffstat (limited to 'source/client/remote_user.ts')
-rw-r--r--source/client/remote_user.ts74
1 files changed, 0 insertions, 74 deletions
diff --git a/source/client/remote_user.ts b/source/client/remote_user.ts
deleted file mode 100644
index a0fdeaf..0000000
--- a/source/client/remote_user.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-/// <reference lib="dom" />
-
-import { servers } from "./index.ts"
-import { log } from "./logger.ts"
-import { Room } from "./room.ts"
-import { TrackHandle } from "./track_handle.ts";
-import { User } from "./user.ts"
-
-export class RemoteUser extends User {
- peer: RTCPeerConnection
- negotiation_busy = false
-
- 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
- room.websocket_send({ ice_candiate: ev.candidate.toJSON(), receiver: this.name })
- }
- this.peer.ontrack = ev => {
- const t = ev.track
- log("media", `remote track: ${this.name}`, t)
- this.add_track(new TrackHandle(t))
- }
- this.peer.onnegotiationneeded = async () => {
- log("webrtc", `negotiation needed: ${this.name}`)
- while (this.negotiation_busy) {
- await new Promise<void>(r => setTimeout(() => r(), 100))
- }
- this.offer()
- }
- }
-
- async offer() {
- this.negotiation_busy = true
- 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: ${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: ${this.name}`, { a: offer })
- const offer_description = new RTCSessionDescription(offer)
- await this.peer.setRemoteDescription(offer_description)
- this.answer()
- }
- async answer() {
- 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: ${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: ${this.name}`, { a: answer })
- const answer_description = new RTCSessionDescription(answer)
- await this.peer.setRemoteDescription(answer_description)
- this.negotiation_busy = false
- }
-
- add_ice_candidate(candidate: RTCIceCandidateInit) {
- this.peer.addIceCandidate(new RTCIceCandidate(candidate))
- }
-
- leave() {
- log("usermodel", `remove remote user: ${this.name}`)
- this.peer.close()
- this.room.el.removeChild(this.el)
- }
-} \ No newline at end of file