From f1bf2bd450c89f2d7623d1a8b466477eb6d96d82 Mon Sep 17 00:00:00 2001 From: Pontus Persson Date: Fri, 8 Dec 2017 16:58:05 +0100 Subject: [PATCH] Enclose server message handling. --- client/peer-exchange.js | 2 +- client/peer.js | 20 ++++++++++++++++++++ client/webrtc.js | 16 +--------------- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/client/peer-exchange.js b/client/peer-exchange.js index 85fa51a..548bd87 100644 --- a/client/peer-exchange.js +++ b/client/peer-exchange.js @@ -13,7 +13,7 @@ export function createPeerExchange(address) { return; } - listeners.forEach(callback => callback(data)); + listeners.forEach(callback => callback(data, send)); } function listen(callback) { diff --git a/client/peer.js b/client/peer.js index e154753..3d62d34 100644 --- a/client/peer.js +++ b/client/peer.js @@ -4,6 +4,26 @@ function errorHandler(error) { export function createPeer(peerExchange, peerConnectionConfig) { const conn = new RTCPeerConnection(peerConnectionConfig); + peerExchange.listen(createPeerExchangeMessageHandler(conn)); return conn; } + +function createPeerExchangeMessageHandler(conn) { + return function gotMessageFromServer(signal, send) { + if(signal.sdp) { + conn.setRemoteDescription(new RTCSessionDescription(signal.sdp)).then(function() { + // Only create answers in response to offers + if(signal.sdp.type == 'offer') { + conn.createAnswer() + .then(desc => { + conn.setLocalDescription(desc); + send({'sdp': desc}) + }).catch(errorHandler); + } + }).catch(errorHandler); + } else if(signal.ice) { + conn.addIceCandidate(new RTCIceCandidate(signal.ice)).catch(errorHandler); + } + }; +} diff --git a/client/webrtc.js b/client/webrtc.js index 5d3ce29..4091728 100755 --- a/client/webrtc.js +++ b/client/webrtc.js @@ -17,7 +17,6 @@ function pageReady() { remoteVideo = document.getElementById('remoteVideo'); serverConnection = createPeerExchange('wss://' + window.location.hostname + ':8443'); - serverConnection.listen(gotMessageFromServer); setup(); } @@ -28,7 +27,7 @@ function getUserMediaSuccess(stream) { } function setup() { - peerConnection = createPeer(null, peerConnectionConfig); + peerConnection = createPeer(serverConnection, peerConnectionConfig); peerConnection.addEventListener('icecandidate', gotIceCandidate); peerConnection.addEventListener('addstream', gotRemoteStream); @@ -75,19 +74,6 @@ function extendOffer() { peerConnection.createOffer().then(createdDescription).catch(errorHandler); } -function gotMessageFromServer(signal) { - if(signal.sdp) { - peerConnection.setRemoteDescription(new RTCSessionDescription(signal.sdp)).then(function() { - // Only create answers in response to offers - if(signal.sdp.type == 'offer') { - peerConnection.createAnswer().then(createdDescription).catch(errorHandler); - } - }).catch(errorHandler); - } else if(signal.ice) { - peerConnection.addIceCandidate(new RTCIceCandidate(signal.ice)).catch(errorHandler); - } -} - function gotIceCandidate(event) { if(event.candidate != null) { serverConnection.send({'ice': event.candidate});