UNPKG

@observertc/client-monitor-js

Version:

ObserveRTC Client Integration Javascript Library

1 lines 6.19 kB
import{ClientEventTypes as e}from"../schema/ClientEventTypes";export class RtcPeerConnectionBinding{peerConnection;monitor;constructor(n,t){this.peerConnection=n,this.monitor=t,this.bind=this.bind.bind(this),this.unbind=this.unbind.bind(this),this._onConnectionStateChange=this._onConnectionStateChange.bind(this),this._onIceConnectionStateChange=this._onIceConnectionStateChange.bind(this),this._onIceCandidate=this._onIceCandidate.bind(this),this._onIceGatheringStateChange=this._onIceGatheringStateChange.bind(this),this._onNegotiationNeeded=this._onNegotiationNeeded.bind(this),this._onSignalingStateChange=this._onSignalingStateChange.bind(this),this._onTrack=this._onTrack.bind(this),this._onIceCandidateError=this._onIceCandidateError.bind(this),this._onDataChannel=this._onDataChannel.bind(this),this._fireEvent(e.PEER_CONNECTION_OPENED,{peerConnectionId:this.monitor.peerConnectionId,iceConnectionState:this.peerConnection.iceConnectionState,iceGatheringState:this.peerConnection.iceGatheringState,signalingState:this.peerConnection.signalingState})}unbind(){this.monitor.close(),this.peerConnection.removeEventListener("connectionstatechange",this._onConnectionStateChange),this.peerConnection.removeEventListener("icecandidate",this._onIceCandidate),this.peerConnection.removeEventListener("iceconnectionstatechange",this._onIceConnectionStateChange),this.peerConnection.removeEventListener("icegatheringstatechange",this._onIceGatheringStateChange),this.peerConnection.removeEventListener("negotiationneeded",this._onNegotiationNeeded),this.peerConnection.removeEventListener("signalingstatechange",this._onSignalingStateChange),this.peerConnection.removeEventListener("icecandidateerror",this._onIceCandidateError),this.peerConnection.removeEventListener("track",this._onTrack),this.peerConnection.removeEventListener("datachannel",this._onDataChannel)}bind(){this.monitor.once("close",this.unbind),this.peerConnection.addEventListener("connectionstatechange",this._onConnectionStateChange),this.peerConnection.addEventListener("icecandidate",this._onIceCandidate),this.peerConnection.addEventListener("iceconnectionstatechange",this._onIceConnectionStateChange),this.peerConnection.addEventListener("icegatheringstatechange",this._onIceGatheringStateChange),this.peerConnection.addEventListener("negotiationneeded",this._onNegotiationNeeded),this.peerConnection.addEventListener("signalingstatechange",this._onSignalingStateChange),this.peerConnection.addEventListener("icecandidateerror",this._onIceCandidateError),this.peerConnection.addEventListener("track",this._onTrack),this.peerConnection.addEventListener("datachannel",this._onDataChannel)}_onDataChannel(e){return bindRtcDataChannelEvents({monitor:this.monitor,dataChannel:e.channel,fireEvent:this._fireEvent.bind(this)})}_onIceCandidateError(n){const t=n;return this._fireEvent(e.ICE_CANDIDATE_ERROR,{peerConnectionId:this.monitor.peerConnectionId,errorCode:t?.errorCode,errorText:t?.errorText,address:t?.address,port:t?.port,url:t?.url})}_onIceConnectionStateChange(){return this._fireEvent(e.ICE_CONNECTION_STATE_CHANGED,{peerConnectionId:this.monitor.peerConnectionId,iceConnectionState:this.peerConnection.iceConnectionState})}_onConnectionStateChange(){this.monitor.connectionState=this.peerConnection.connectionState,this._fireEvent(e.PEER_CONNECTION_STATE_CHANGED,{peerConnectionId:this.monitor.peerConnectionId,connectionState:this.peerConnection.connectionState}),"closed"===this.peerConnection.connectionState&&(this._fireEvent(e.PEER_CONNECTION_CLOSED,{peerConnectionId:this.monitor.peerConnectionId,iceConnectionState:this.peerConnection.iceConnectionState,iceGatheringState:this.peerConnection.iceGatheringState,signalingState:this.peerConnection.signalingState}),this.unbind())}_onIceCandidate(n){return this._fireEvent(e.ICE_CANDIDATE,{peerConnectionId:this.monitor.peerConnectionId,...n.candidate})}_onIceGatheringStateChange(){return this._fireEvent(e.ICE_GATHERING_STATE_CHANGED,{peerConnectionId:this.monitor.peerConnectionId,iceGatheringState:this.peerConnection.iceGatheringState})}_onNegotiationNeeded(){return this._fireEvent(e.NEGOTIATION_NEEDED,{peerConnectionId:this.monitor.peerConnectionId})}_onSignalingStateChange(){return this._fireEvent(e.SIGNALING_STATE_CHANGE,{peerConnectionId:this.monitor.peerConnectionId,signalingState:this.peerConnection.signalingState})}_onTrack(e){const n=e.track;n&&bindMediaStreamTrackEvents({pcMonitor:this.monitor,track:n,fireEvent:this._fireEvent.bind(this)})}_fireEvent(e,n){return this.monitor.parent.addEvent({type:e,payload:this.monitor.parent.clientEventPayloadProvider.createPayload(e,n)})}}export function bindMediaStreamTrackEvents(n){const{pcMonitor:t,track:i,fireEvent:o,attachments:a}=n;i&&(i.onended=()=>o(e.MEDIA_TRACK_REMOVED,{peerConnectionId:t.peerConnectionId,trackId:i.id,kind:i.kind,label:i.label,muted:i.muted,enabled:i.enabled,readyState:i.readyState,contentHint:i.contentHint,...a??{}}),i.onmute=()=>o(e.MEDIA_TRACK_MUTED,{peerConnectionId:t.peerConnectionId,trackId:i.id,kind:i.kind,label:i.label,muted:i.muted,enabled:i.enabled,readyState:i.readyState,contentHint:i.contentHint,...a??{}}),i.onunmute=()=>o(e.MEDIA_TRACK_UNMUTED,{peerConnectionId:t.peerConnectionId,trackId:i.id,kind:i.kind,label:i.label,muted:i.muted,enabled:i.enabled,readyState:i.readyState,contentHint:i.contentHint,...a??{}}),o(e.MEDIA_TRACK_ADDED,{peerConnectionId:t.peerConnectionId,trackId:i.id,kind:i.kind,label:i.label,muted:i.muted,enabled:i.enabled,readyState:i.readyState,contentHint:i.contentHint,constraints:i.getConstraints(),capabilities:i.getCapabilities(),settings:i.getSettings(),...a??{}}),t.addMediaStreamTrack(i,a))}export function bindRtcDataChannelEvents(n){const{monitor:t,dataChannel:i,fireEvent:o}=n;i.onclose=()=>o(e.DATA_CHANNEL_CLOSED,{peerConnectionId:t.peerConnectionId,dataChannelId:i.id,label:i.label,readyState:i.readyState}),i.onerror=n=>{const a=n;o(e.DATA_CHANNEL_ERROR,{peerConnectionId:t.peerConnectionId,dataChannelId:i.id,label:i.label,readyState:i.readyState,error:a?.error?.message})},i.onopen=()=>o(e.DATA_CHANNEL_OPEN,{peerConnectionId:t.peerConnectionId,dataChannelId:i.id,label:i.label,readyState:i.readyState})}