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;
}
listeners.forEach(callback => callback(data));
listeners.forEach(callback => callback(data, send));
}
function listen(callback) {

View File

@ -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);
}
};
}

View File

@ -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});