X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fkiak.git;a=blobdiff_plain;f=host.js;h=9b84f5c4d335ec63d9eb2e1e8f0e9bfdd7df012a;hp=34d7c9deff38c6a38a32cc9b2a0c6a4ce257d33e;hb=0ff5eabbfe914a66b7f6b2a7f22f6469895ab826;hpb=b5c8f98ab42b8e7128441e4a456dfd4fc02f0e86 diff --git a/host.js b/host.js index 34d7c9d..9b84f5c 100644 --- a/host.js +++ b/host.js @@ -1,7 +1,9 @@ document.title = "Strapp.io Host" -const conf = {"iceServers": [{ "url": "stun:stun.1.google.com:19302" }] } +const conf = {"iceServers": [{ "urls": "stun:stun.1.google.com:19302" }] } const clients = new Map([]) -const hpk = getPublicKey() +const iceCandidates = [] +let dataChannel + /* TODO: duplicate in both client.js and host.jhs */ function getPublicKey() { @@ -36,54 +38,78 @@ function getPublicKey() { }) } - function handleNewClientConnection(offer) { /* New Client Connection*/ hpc = new RTCPeerConnection(conf) + //console.log(offer) + clients.set(offer.pubKey, hpc) hpc.setRemoteDescription(offer.sdp) .then(() => { hpc.createAnswer().then((answer) => { return hpc.setLocalDescription(answer) }) .then(() => { - hpk.then(() => { + getPublicKey().then((hpk) => { hpc.onicecandidate = (event) => { if (event.candidate) { - console.log('Host: Sending ice candidate to client') - wsock.send(JSON.stringify({ + iceCandidates.push(JSON.stringify({ cmd: '< ice pubKey', ice: event.candidate, - pubKey: hpk /* TODO: do we need to send this? */ + hostPubKey: hpk.n, /* TODO: do we need to send this? */ + clientPubKey: offer.pubKey, + iceCandidateAvailable: true })) } else { - console.log('Host: Finished setting up ICE candidates') + console.log('Host: Finished sending ICE candidates') } } - console.log('Host: Sending answer to Host') + console.log('Host: Sending answer to Client') wsock.send(JSON.stringify({ cmd: '< sdp pubKey', sdp: hpc.localDescription, - pubKey: hpk + hostPubKey: hpk.n, + clientPubKey: offer.pubKey })) - clients.set(offer.pubKey, { - hostsdp: hpc.localDescription, - clientsdp: hpc.remoteDescription - }) - + hpc.ondatachannel = (evt) => { + dataChannel = evt.channel + console.log(evt) + dataChannel.onmessage = (msg) => { + console.log(msg.data) + } + dataChannel.send('Hi from the host') + } + hpc.oniceconnectionstatechange = () => { + console.log('iceConnectionState = ' + hpc.iceConnectionState) + } }) }).catch((err) => { console.log(`error in host answer ${err}`) }) }) + + + } -function handleNewIceCandidate(msg) { +function handleNewIceSubmission(msg) { + console.log('Host: Adding new ice candidate') const hpc = clients.get(msg.pubKey) let candidate = new RTCIceCandidate(msg.ice) hpc.addIceCandidate(candidate) } +function handleIceRequest(msg) { + console.log('Host: Sending ice candidate to client') + const hpc = clients.get(msg) + const iceCandidates = iceCandidates.pop() + if (iceCandidate !== undefined) { + wsock.send(iceCandidate) + } else { + wsock.send('no ice candidates') + } + +} if ("WebSocket" in window) { document.addEventListener('DOMContentLoaded', (event) => { wsock = new WebSocket(`${_strapp_protocol}://${window.location.hostname}:${_strapp_port}`) @@ -92,30 +118,30 @@ if ("WebSocket" in window) { } wsock.onmessage = (serverMsg) => { - /* msg is either offer or ice candidate */ - console.log(serverMsg.data) + /* msg is either offer or ice candidate or ice candidate request*/ + + let msg = JSON.parse(serverMsg.data) - const clientID = msg.pubKey - const msgType = msg.hasOwnProperty('sdp') ? 'o' : 'i' + const clientID = msg.pubKey || msg + + /* TODO: redo this trash */ if (clients.has(clientID)) { - switch(msgType) { - case 'o': - console.log('client exist && sending an offer == error') - break - case 'i': - handleNewIceCandidate(msg) - break + if (msg.ice) { + handleNewIceSubmission(msg) + } else if (msg.sdp) { + //handleRepeatedOffer + } else { + handleIceRequest(msg) } } else { - switch(msgType) { - case 'o': + if (msg.ice) { + console.log('Host: Client that doesnt exist is sending ice submissions') + } else if (msg.sdp) { handleNewClientConnection(msg) - break - case 'i': - console.log('client !exist && ice candidate === error') - break + } else { + console.log('Host: Client that doesnt exist is sending ice requests') } } }