summaryrefslogtreecommitdiff
path: root/client-web/source/user/remote.ts
diff options
context:
space:
mode:
Diffstat (limited to 'client-web/source/user/remote.ts')
-rw-r--r--client-web/source/user/remote.ts23
1 files changed, 17 insertions, 6 deletions
diff --git a/client-web/source/user/remote.ts b/client-web/source/user/remote.ts
index ced8482..dbae3db 100644
--- a/client-web/source/user/remote.ts
+++ b/client-web/source/user/remote.ts
@@ -1,5 +1,6 @@
/// <reference lib="dom" />
+import { RelayMessage } from "../../../common/packets.d.ts";
import { ROOM_CONTAINER, RTC_CONFIG } from "../index.ts"
import { log } from "../logger.ts"
import { Room } from "../room.ts"
@@ -12,6 +13,8 @@ export class RemoteUser extends User {
constructor(room: Room, id: number) {
super(room, id)
+ room.remote_users.set(this.id, this)
+
log("usermodel", `added remote user: ${id}`)
this.peer = new RTCPeerConnection(RTC_CONFIG)
this.peer.onicecandidate = ev => {
@@ -31,6 +34,20 @@ export class RemoteUser extends User {
this.offer()
}
}
+ leave() {
+ log("usermodel", `remove remote user: ${this.display_name}`)
+ this.peer.close()
+ this.room.remote_users.delete(this.id)
+ super.leave()
+ ROOM_CONTAINER.removeChild(this.el)
+ }
+
+ on_relay(message: RelayMessage) {
+ if (message.ice_candidate) this.add_ice_candidate(message.ice_candidate)
+ if (message.offer) this.on_offer(message.offer)
+ if (message.answer) this.on_answer(message.answer)
+ if (message.identify) this.name = message.identify.username
+ }
async offer() {
this.negotiation_busy = true
@@ -65,10 +82,4 @@ export class RemoteUser extends User {
add_ice_candidate(candidate: RTCIceCandidateInit) {
this.peer.addIceCandidate(new RTCIceCandidate(candidate))
}
-
- leave() {
- log("usermodel", `remove remote user: ${this.display_name}`)
- this.peer.close()
- ROOM_CONTAINER.removeChild(this.el)
- }
} \ No newline at end of file