UNPKG

@observertc/client-monitor-js

Version:

ObserveRTC Client Integration Javascript Library

1 lines 5.29 kB
import{ClientEventTypes as e}from"../schema/ClientEventTypes";import{bindMediaStreamTrackEvents as t}from"./RtcPeerConnectionBinding";export class MediasoupTransportBinding{transport;monitor;constructor(t,r){this.transport=t,this.monitor=r,this._consumerAdded=this._consumerAdded.bind(this),this._producerAdded=this._producerAdded.bind(this),this._dataProducerAdded=this._dataProducerAdded.bind(this),this._dataConsumerAdded=this._dataConsumerAdded.bind(this),this._connectionStateChanged=this._connectionStateChanged.bind(this),this._iceGatheringStateChanged=this._iceGatheringStateChanged.bind(this),this.bind=this.bind.bind(this),this.unbind=this.unbind.bind(this),this.transport.observer.once("close",(()=>{this._fireEvent(e.PEER_CONNECTION_CLOSED,{iceGatheringState:this.transport.iceGatheringState,peerConnectionId:this.monitor.peerConnectionId})})),this._fireEvent(e.PEER_CONNECTION_OPENED,{iceGatheringState:this.transport.iceGatheringState,peerConnectionId:this.monitor.peerConnectionId})}unbind(){this.transport.observer.off("close",this.unbind),this.transport.observer.off("newconsumer",this._consumerAdded),this.transport.observer.off("newdataproducer",this._dataProducerAdded),this.transport.observer.off("newproducer",this._producerAdded),this.transport.observer.off("newdataconsumer",this._dataConsumerAdded),this.transport.off("connectionstatechange",this._connectionStateChanged),this.transport.off("icegatheringstatechange",this._iceGatheringStateChanged),this.monitor.close()}bind(){this.transport.observer.once("close",this.unbind),this.transport.observer.on("newconsumer",this._consumerAdded),this.transport.observer.on("newdataproducer",this._dataProducerAdded),this.transport.observer.on("newproducer",this._producerAdded),this.transport.observer.on("newdataconsumer",this._dataConsumerAdded),this.transport.on("connectionstatechange",this._connectionStateChanged),this.transport.on("icegatheringstatechange",this._iceGatheringStateChanged)}_consumerPaused(t){return this._fireEvent(e.CONSUMER_PAUSED,{peerConnectionId:this.monitor.peerConnectionId,producerId:t.producerId,consumerId:t.id,trackId:t.track.id})}_consumerResumed(t){return this._fireEvent(e.CONSUMER_RESUMED,{peerConnectionId:this.monitor.peerConnectionId,producerId:t.producerId,consumerId:t.id,trackId:t.track.id})}_producerPaused(t){return this._fireEvent(e.PRODUCER_PAUSED,{peerConnectionId:this.monitor.peerConnectionId,producerId:t.id,trackId:t.track?.id})}_producerResumed(t){return this._fireEvent(e.PRODUCER_RESUMED,{peerConnectionId:this.monitor.peerConnectionId,producerId:t.id,trackId:t.track?.id})}_producerAdded(t){const r=()=>this._producerPaused(t),n=()=>this._producerResumed(t),o=this._createProducerTrackWatcher(t),i=()=>o.onStats();t.observer.once("close",(()=>{t.observer.off("pause",r),t.observer.off("resume",n),this.monitor.off("stats",i),this._fireEvent(e.PRODUCER_REMOVED,{peerConnectionId:this.monitor.peerConnectionId,producerId:t.id,trackId:t.track?.id})})),t.observer.on("pause",r),t.observer.on("resume",n),this.monitor.on("stats",i),this.monitor.once("close",(()=>this.monitor.off("stats",i))),this._fireEvent(e.PRODUCER_ADDED,{peerConnectionId:this.monitor.peerConnectionId,producerId:t.id,trackId:t.track?.id}),o.onStats()}_createProducerTrackWatcher(e){const r=this.monitor,n=this._fireEvent.bind(this);return new class{registeredTrackId;onStats(){if(e.track&&this.registeredTrackId!==e.track.id)return this.registeredTrackId=e.track.id,t({fireEvent:n,pcMonitor:r,track:e.track,attachments:{producerId:e.id}})}}}_consumerAdded(r){const n=()=>this._consumerPaused(r),o=()=>this._consumerResumed(r);return r.observer.once("close",(()=>{r.observer.off("pause",n),r.observer.off("resume",o),this._fireEvent(e.CONSUMER_REMOVED,{peerConnectionId:this.monitor.peerConnectionId,producerId:r.producerId,consumerId:r.id,trackId:r.track.id})})),r.observer.on("pause",n),r.observer.on("resume",o),this._fireEvent(e.CONSUMER_ADDED,{peerConnectionId:this.monitor.peerConnectionId,producerId:r.producerId,consumerId:r.id,trackId:r.track.id}),t({fireEvent:this._fireEvent.bind(this),pcMonitor:this.monitor,track:r.track,attachments:{producerId:r.producerId,consumerId:r.id}})}_dataConsumerAdded(t){return t.observer.once("close",(()=>{this._fireEvent(e.DATA_CONSUMER_CLOSED,{peerConnectionId:this.monitor.peerConnectionId,dataProducerId:t.dataProducerId,dataConsumerId:t.id})})),this._fireEvent(e.DATA_CONSUMER_CREATED,{peerConnectionId:this.monitor.peerConnectionId,dataProducerId:t.dataProducerId,dataConsumerId:t.id})}_dataProducerAdded(t){return t.observer.once("close",(()=>{this._fireEvent(e.DATA_PRODUCER_CLOSED,{peerConnectionId:this.monitor.peerConnectionId,dataProducerId:t.id})})),this._fireEvent(e.DATA_PRODUCER_CREATED,{peerConnectionId:this.monitor.peerConnectionId,dataProducerId:t.id})}_connectionStateChanged(...t){return this.monitor.connectionState=t[0],this._fireEvent(e.PEER_CONNECTION_STATE_CHANGED,{peerConnectionId:this.monitor.peerConnectionId,connectionState:t[0]})}_iceGatheringStateChanged(...t){return this._fireEvent(e.ICE_GATHERING_STATE_CHANGED,{peerConnectionId:this.monitor.peerConnectionId,iceGatheringState:t[0]})}_fireEvent(e,t){return this.monitor.parent.addEvent({type:e,payload:this.monitor.parent.clientEventPayloadProvider.createPayload(e,t)})}}