works on localhost, time to test on the server
[henge/kiak.git] / host.js
diff --git a/host.js b/host.js
index 34d7c9d..9b84f5c 100644 (file)
--- 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')
         }
       }
     }