From dcbb8b816fdc2af2c1165b2f89d743c081894cd6 Mon Sep 17 00:00:00 2001 From: Pontus Persson Date: Fri, 8 Dec 2017 23:57:05 +0100 Subject: [PATCH] Create createHost thing. --- client/peer.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/client/peer.js b/client/peer.js index eeeab5a..f1bf166 100644 --- a/client/peer.js +++ b/client/peer.js @@ -2,6 +2,58 @@ function errorHandler(error) { console.log(error); } +export function createHost(peerExchange, peerConnectionConfig) { + const listeners = new Set(); + + function onConnection(callback) { + listeners.push(callback); + } + + function emitConnection(conn) { + listeners.forEach(callback => callback(conn)); + } + + function handleSDP(sdp) { + host.setRemoteDescription(new RTCSessionDescription(signal.sdp)); + } + + peerExchange.listen(async (signal, send) => { + if (signal.sdp && signal.sdp.type === "offer") { + const host = createConn(peerExchange, peerConnectionConfig); + + const remoteDesc = new RTCSessionDescription(signal.sdp); + await host.setRemoteDescription(remoteDesc); + + const localDesc = await conn.createAnswer(); + await host.setLocalDescription(localDesc); + + send({'sdp': desc}); + } + }); + + return { + onConnection, + }; +} + +export function createConn(peerExchange, peerConnectionConfig) { + const conn = new RTCPeerConnection(peerConnectionConfig); + + conn.addEventListener('icecandidate', event => { + if(event.candidate != null) { + peerExchange.send({ice: event.candidate}); + } + }); + + peerExchange.listen(signal => { + if(signal.ice) { + conn.addIceCandidate(new RTCIceCandidate(signal.ice)).catch(errorHandler); + } + }); + + return conn; +} + export function createPeer(peerExchange, peerConnectionConfig) { const conn = new RTCPeerConnection(peerConnectionConfig);