getUserMedia problem in firefox
[henge/kiak.git] / host.js
diff --git a/host.js b/host.js
index 9b84f5c..81aabc6 100644 (file)
--- a/host.js
+++ b/host.js
@@ -1,4 +1,6 @@
 document.title = "Strapp.io Host"
+
+
 const conf = {"iceServers": [{ "urls": "stun:stun.1.google.com:19302" }] }
 const clients = new Map([])
 const iceCandidates = []
@@ -52,16 +54,18 @@ function handleNewClientConnection(offer) {
       getPublicKey().then((hpk) => {
         hpc.onicecandidate = (event) => {
           if (event.candidate) {
+            console.log('Host: Allocating ice candidate for client')
             iceCandidates.push(JSON.stringify({
-              cmd: '< ice pubKey',
+              cmd: "< ice pubKey",
               ice: event.candidate,
               hostPubKey: hpk.n, /* TODO: do we need to send this? */
               clientPubKey: offer.pubKey,
-              iceCandidateAvailable: true
+              iceState: "a"
             }))
           }
           else {
             console.log('Host: Finished sending ICE candidates')
+            console.log(hpc)
           }
         }
         console.log('Host: Sending answer to Client')
@@ -77,7 +81,9 @@ function handleNewClientConnection(offer) {
           dataChannel.onmessage = (msg) => {
             console.log(msg.data)
           }
-          dataChannel.send('Hi from the host')
+          dataChannel.onopen = () => {
+            dataChannel.send(`Hi ${offer.pubKey} -host`)
+          }
         }
         hpc.oniceconnectionstatechange = () => {
           console.log('iceConnectionState = ' + hpc.iceConnectionState)
@@ -88,8 +94,6 @@ function handleNewClientConnection(offer) {
     })
   })
 
-
-
 }
 
 function handleNewIceSubmission(msg) {
@@ -100,13 +104,20 @@ function handleNewIceSubmission(msg) {
 }
 
 function handleIceRequest(msg) {
-  console.log('Host: Sending ice candidate to client')
-  const hpc = clients.get(msg)
-  const iceCandidates = iceCandidates.pop()
+  console.log('Host: Handling ice candidate request')
+  console.log(iceCandidates)
+  const hpc = clients.get(msg.pubKey)
+  const iceCandidate = iceCandidates.pop()
   if (iceCandidate !== undefined) {
     wsock.send(iceCandidate)
   } else {
-    wsock.send('no ice candidates')
+    if (hpc.iceGatheringState.localeCompare('gathering') === 0) {
+      wsock.send(`{"cmd" : "< ice pubKey", "clientPubKey":"${msg.pubKey}", "iceState": "g"}`)
+    }
+    else if (hpc.iceGatheringState.localeCompare('complete') === 0) {
+      wsock.send(`{"cmd" : "< ice pubKey", "clientPubKey":"${msg.pubKey}", "iceState": "c"}`)
+    }
+
   }
 
 }
@@ -120,10 +131,10 @@ if ("WebSocket" in window) {
     wsock.onmessage = (serverMsg) => {
       /* msg is either offer or ice candidate or ice candidate request*/
 
-
+      /* What if data null? */
       let msg = JSON.parse(serverMsg.data)
 
-      const clientID = msg.pubKey || msg
+      const clientID = msg.pubKey
 
       /* TODO: redo this trash */
       if (clients.has(clientID)) {
@@ -145,6 +156,22 @@ if ("WebSocket" in window) {
         }
       }
     }
+    document.body.innerHTML = '<div>Choose options for client</div> <video autoplay></video>'
+
+    navigator.mediaDevices.getUserMedia({ video : { mediaSource: "screen", // whole screen sharing
+        // mediaSource: "window", // choose a window to share
+        // mediaSource: "application", // choose a window to share
+        width: {max: '1920'},
+        height: {max: '1080'},
+        frameRate: {max: '10'}} })
+    .then(function(mediaStream) {
+      let video = document.querySelector('video')
+      video.srcObject = mediaStream
+      video.onloadedmetadata = function(e) {
+        video.play()
+      }
+    })
+    .catch(function(err) { console.log(err); }); // always check for errors at the end.
   })
 }
 else {