Enclose server message handling.
parent
8a282c37c4
commit
f1bf2bd450
|
|
@ -13,7 +13,7 @@ export function createPeerExchange(address) {
|
|||
return;
|
||||
}
|
||||
|
||||
listeners.forEach(callback => callback(data));
|
||||
listeners.forEach(callback => callback(data, send));
|
||||
}
|
||||
|
||||
function listen(callback) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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});
|
||||
|
|
|
|||
Loading…
Reference in New Issue