Enclose server message handling.

pull/25/head
Pontus Persson 2017-12-08 16:58:05 +01:00 committed by Pontus Alexander
parent 8a282c37c4
commit f1bf2bd450
3 changed files with 22 additions and 16 deletions

View File

@ -13,7 +13,7 @@ export function createPeerExchange(address) {
return; return;
} }
listeners.forEach(callback => callback(data)); listeners.forEach(callback => callback(data, send));
} }
function listen(callback) { function listen(callback) {

View File

@ -4,6 +4,26 @@ function errorHandler(error) {
export function createPeer(peerExchange, peerConnectionConfig) { export function createPeer(peerExchange, peerConnectionConfig) {
const conn = new RTCPeerConnection(peerConnectionConfig); const conn = new RTCPeerConnection(peerConnectionConfig);
peerExchange.listen(createPeerExchangeMessageHandler(conn));
return 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);
}
};
}

View File

@ -17,7 +17,6 @@ function pageReady() {
remoteVideo = document.getElementById('remoteVideo'); remoteVideo = document.getElementById('remoteVideo');
serverConnection = createPeerExchange('wss://' + window.location.hostname + ':8443'); serverConnection = createPeerExchange('wss://' + window.location.hostname + ':8443');
serverConnection.listen(gotMessageFromServer);
setup(); setup();
} }
@ -28,7 +27,7 @@ function getUserMediaSuccess(stream) {
} }
function setup() { function setup() {
peerConnection = createPeer(null, peerConnectionConfig); peerConnection = createPeer(serverConnection, peerConnectionConfig);
peerConnection.addEventListener('icecandidate', gotIceCandidate); peerConnection.addEventListener('icecandidate', gotIceCandidate);
peerConnection.addEventListener('addstream', gotRemoteStream); peerConnection.addEventListener('addstream', gotRemoteStream);
@ -75,19 +74,6 @@ function extendOffer() {
peerConnection.createOffer().then(createdDescription).catch(errorHandler); 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) { function gotIceCandidate(event) {
if(event.candidate != null) { if(event.candidate != null) {
serverConnection.send({'ice': event.candidate}); serverConnection.send({'ice': event.candidate});