Create createHost thing.

pull/25/head
Pontus Persson 2017-12-08 23:57:05 +01:00 committed by Pontus Alexander
parent 50e8bd184b
commit dcbb8b816f
1 changed files with 52 additions and 0 deletions

View File

@ -2,6 +2,58 @@ function errorHandler(error) {
console.log(error); console.log(error);
} }
export function createHost(peerExchange, peerConnectionConfig) {
const listeners = new Set();
function onConnection(callback) {
listeners.push(callback);
}
function emitConnection(conn) {
listeners.forEach(callback => callback(conn));
}
function handleSDP(sdp) {
host.setRemoteDescription(new RTCSessionDescription(signal.sdp));
}
peerExchange.listen(async (signal, send) => {
if (signal.sdp && signal.sdp.type === "offer") {
const host = createConn(peerExchange, peerConnectionConfig);
const remoteDesc = new RTCSessionDescription(signal.sdp);
await host.setRemoteDescription(remoteDesc);
const localDesc = await conn.createAnswer();
await host.setLocalDescription(localDesc);
send({'sdp': desc});
}
});
return {
onConnection,
};
}
export function createConn(peerExchange, peerConnectionConfig) {
const conn = new RTCPeerConnection(peerConnectionConfig);
conn.addEventListener('icecandidate', event => {
if(event.candidate != null) {
peerExchange.send({ice: event.candidate});
}
});
peerExchange.listen(signal => {
if(signal.ice) {
conn.addIceCandidate(new RTCIceCandidate(signal.ice)).catch(errorHandler);
}
});
return conn;
}
export function createPeer(peerExchange, peerConnectionConfig) { export function createPeer(peerExchange, peerConnectionConfig) {
const conn = new RTCPeerConnection(peerConnectionConfig); const conn = new RTCPeerConnection(peerConnectionConfig);