Enclose server message handling.
parent
8a282c37c4
commit
f1bf2bd450
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue