UNPKG

vicowa-web-components

Version:
2 lines 3.1 kB
import e from"./observerFactory.js";const n=Symbol("privateData");function a(e,n){n.command}export const SIGNALING_EVENTS=Object.freeze({MESSAGE:"MESSAGE",CLOSE:"CLOSE",ERROR:"ERROR",PEER_LIST:"PEER_LIST",PEER_UPDATE:"PEER_UPDATE"});export const COMMANDS=Object.freeze({peerList:"peerList",peerUpdate:"peerUpdate",inviteChannel:"inviteChannel",requestChannelAccess:"requestChannelAccess"});export class SignalingBase{constructor(a){this[n]={observer:e(),comObject:a},a.onmessage=e=>{this.onMessage(e)},a.onerror=e=>{this.onError(e)},a.onclose=e=>{this.onClose(e)}}connectChannel(e){this.send({command:"channelConnect",id:e})}getPeerList(){this.send({command:"peerList"})}send(e){this[n].comObject.send(e)}onMessage(e){this[n].observer.notify(SIGNALING_EVENTS.MESSAGE,e)}onClose(e){this[n].observer.notify(SIGNALING_EVENTS.CLOSE,e)}onError(e){this[n].observer.notify(SIGNALING_EVENTS.ERROR,e)}addObserver(e,a){this[n].observer.addObserver(e,a),e===SIGNALING_EVENTS.PEER_LIST&&this.addObserver(SIGNALING_EVENTS.MESSAGE,(e=>{switch(e.command){case COMMANDS.peerList:this[n].observer.notify(SIGNALING_EVENTS.PEER_LIST,e.data);break;case COMMANDS.peerUpdate:this[n].observer.notify(SIGNALING_EVENTS.PEER_UPDATE,e)}}))}removeObserver(e,a){this[n].observer.removeObserver(e,a)}}export class WebRTCHandler{constructor(e){this[n]={signaling:e,comChannel:null,localStream:null,peerConfig:null,localPeer:null,mainDataChannel:null,controlChannel:null}}async connectToChannel(e,o){const t=this[n];t.comChannel=await t.signaling.connectChannel(e),t.comChannel.onMessage=e=>{a.bind(this,e)},t.localPeer=new RTCPeerConnection(t.peerConfig),t.localPeer.onicecandidate=e=>{return a=this,t.localPeer,o=e,void a[n].comChannel.send(o);var a,o},t.localPeer.ondatachannel=e=>function(e,a){if(a){const o=e[n];"mainDataChannel"===a.label?o.mainDataChannel=a:"controlChannel"===a.label&&(o.controlChannel=a),function(e,n){n.onmessage=()=>{},n.onclose=()=>{}}(0,a)}}(this,e.channel);const s=await t.localPeer.createOffer({offerToReceiveAudio:o.audio,offerToReceiveVideo:o.video});var r;await t.localPeer.setLocalDescription(s),r=s,this[n].comChannel.send(r)}async startAudioCall(e){this[n].localStream=await window.navigator.mediaDevices.getUserMedia({audio:!0,video:!1})}async startVideoCall(e,a,o){const t=this[n],s=Object.assign({audio:!0},o);t.localStream=await window.navigator.mediaDevices.getUserMedia({audio:s.audio,video:!0}),e.srcObject=n.localStream}openDataChannel(e,a){const o=this[n],t=Object.assign({ordered:!0},a);o.mainDataChannel=o.localPeer.createDataChannel("mainChannel",t),o.controlChannel=o.localPeer.createDataChannel("controlChannel",{ordered:!0});o.mainDataChannel.addEventListener("open",(()=>{o.mainDataChannel})),o.mainDataChannel.addEventListener("close",(()=>{o.mainDataChannel})),o.controlChannel.addEventListener("open",(()=>{o.mainDataChannel})),o.controlChannel.addEventListener("close",(()=>{o.mainDataChannel}))}sendData(e,n){e.bufferedAmount;for(;0<n.length;)e.send(n)}closeDataChannel(){const e=this[n];e.mainDataChannel.close(),e.controlChannel.close()}} //# sourceMappingURL=webrtc.js.map