// import { wsConnection } from "./main"; export class PeerManager { connect(peerID) { // Connect to the peer that has the peer id peerID } disconnect(peerID) { } } export class PeerConnection { constructor(remotePeerID, signaler) { this.makingOffer = false; this.ignoreOffer = false; this.onSignallerMessage = async ({ data: { description, candidate } }) => { try { if (description) { // const offerCollision = // description.type === "offer" && // (this.makingOffer || this.rtcPeer.signalingState !== "stable"); // this.ignoreOffer = !polite && offerCollision; if (this.ignoreOffer) { return; } await this.rtcPeer.setRemoteDescription(description); if (description.type === "offer") { await this.rtcPeer.setLocalDescription(); this.signaler.send(JSON.stringify({ description: this.rtcPeer.localDescription })); } } else if (candidate) { try { await this.rtcPeer.addIceCandidate(candidate); } catch (err) { if (!this.ignoreOffer) { throw err; } } } } catch (err) { console.error(err); } }; this.id = remotePeerID; this.rtcPeer = new RTCPeerConnection(PeerConnection.config); this.signaler = signaler; ; this.rtcPeer.onnegotiationneeded = async () => { try { this.makingOffer = true; await this.rtcPeer.setLocalDescription(); signaler.send(JSON.stringify({ description: this.rtcPeer.localDescription })); } catch (err) { console.error(err); } finally { this.makingOffer = false; } }; this.rtcPeer.onicecandidate = ({ candidate }) => signaler.send(JSON.stringify({ candidate })); this.ignoreOffer = false; } } PeerConnection.config = { iceServers: [ { urls: "stun:stun.l.google.com" }, { urls: "stun:stun1.l.google.com" }, { urls: "stun:stun2.l.google.com" }, { urls: "stun:stun3.l.google.com" }, { urls: "stun:stun4.l.google.com" }, ], }; // const config = { // iceServers: [{ urls: "stun:stun.mystunserver.tld" }], // }; // let polite = true; // const signaler = new SignalingChannel(); // const signaler: any = {} // const rtcPeer = new RTCPeerConnection(config); // // const constraints = { audio: true, video: true }; // const selfVideo = document.querySelector("video.selfview"); // const remoteVideo = document.querySelector("video.remoteview"); // async function start() { // try { // const stream = await navigator.mediaDevices.getUserMedia(constraints); // for (const track of stream.getTracks()) { // pc.addTrack(track, stream); // } // selfVideo.srcObject = stream; // } catch (err) { // console.error(err); // } // } // rtcPeer.ontrack = ({ track, streams }) => { // track.onunmute = () => { // if (remoteVideo.srcObject) { // return; // } // remoteVideo.srcObject = streams[0]; // }; // }; // makingOffer = false; // rtcPeer.onnegotiationneeded = async () => { // try { // // makingOffer = true; // await rtcPeer.setLocalDescription(); // signaler.send({ description: rtcPeer.localDescription }); // } catch (err) { // console.error(err); // } finally { // makingOffer = false; // } // }; // rtcPeer.onicecandidate = ({ candidate }) => signaler.send({ candidate }); // let ignoreOffer = false; // signaler.onmessage = async ({ data: { description, candidate } }: MessageEvent) => { // try { // if (description) { // const offerCollision = // description.type === "offer" && // // (makingOffer || rtcPeer.signalingState !== "stable"); // ignoreOffer = !polite && offerCollision; // if (ignoreOffer) { // return; // } // await rtcPeer.setRemoteDescription(description); // if (description.type === "offer") { // await rtcPeer.setLocalDescription(); // signaler.send({ description: rtcPeer.localDescription }); // } // } else if (candidate) { // try { // await rtcPeer.addIceCandidate(candidate); // } catch (err) { // if (!ignoreOffer) { // throw err; // } // } // } // } catch (err) { // console.error(err); // } // }; //# sourceMappingURL=webRTC.js.map