]> git.r.bdr.sh - rbdr/junction/blobdiff - extension/content_script.js
Add new RTC code
[rbdr/junction] / extension / content_script.js
index 6785a6556427ab48b49495eda7f51fc907717465..8ca721a70cc3a93ef58b0cb29dc22ad9b514d5bb 100644 (file)
@@ -40,9 +40,9 @@ const internals = {
 
       internals.socket.on('connect', function() {
 
 
       internals.socket.on('connect', function() {
 
-        console.log("Connected to signaling server, group: ", data.currentUrl);
+        console.log('Connected to signaling server, group: ', data.currentUrl);
         internals.socket.emit('join', {
         internals.socket.emit('join', {
-          'url': data.currentUrl,
+          room: data.currentUrl,
         });
       });
 
         });
       });
 
@@ -53,58 +53,80 @@ const internals = {
 
       internals.socket.on('addPeer', function(data) {
 
 
       internals.socket.on('addPeer', function(data) {
 
-        console.log(data);
-        Peers.add(data.peer_id, internals.tada);
-          const peerId = data.peer_id;
+          Peers.add(data.peerId, internals.tada);
+          const peerId = data.peerId;
 
 
-          const peerConn = new RTCPeerConnection(
-              {"iceServers": internals.kIceServers},
-              {"optional": [{"DtlsSrtpKeyAgreement": true}]}
+          const peerConnection = new RTCPeerConnection(
+              { iceServers: internals.kIceServers },
+              { optional: [{ DtlsSrtpKeyAgreement: true }] }
           );
 
           );
 
-          internals.peers[peerId] = peerConn;
+          internals.peers[peerId] = peerConnection;
+          mediaStream.getTracks().forEach((track) => {
+            peerConnection.addTrack(track, localStream);
+          });
 
 
-          peerConn.onicecandidate = (event) => {
+          peerConnection.onicecandidate = (event) => {
             if (event.candidate) {
               internals.socket.emit('relayICECandidate', {
             if (event.candidate) {
               internals.socket.emit('relayICECandidate', {
-                'peer_id': peerId,
-                'ice_candidate': {
-                  'sdpMLineIndex': event.candidate.sdpMLineIndex,
-                  'candidate': event.candidate.candidate
-                }
+                peerId: peerId,
+                candidate: event.candidate
               });
             }
           }
 
               });
             }
           }
 
-          peerConn.onaddstream = (stream) => {
-            console.log(`Received stream for peer ${peerId}`);
-            console.log(stream);
-          }
+        const remoteStream = new MediaStream();
+        peerConnection.ontrack = (event) => {
+          remoteStream.addTrack(event.track);
+          const remoteAudioElement = new Audio();
+          remoteAudioElement.srcObject = remoteStream;
+          remoteAudioElement.play();
+        };
+
+        peerConnection.onnegotiationneeded = async () => {
+          console.log("Creating RTC offer to ", peerId);
+          const offer = await peerConnection.createOffer();
+          await peerConnection.setLocalDescription(offer);
+
+          // Emit the offer to the peer
+          socket.emit('relayOffer', { offer, peerId });
+        };
 
 
-          peerConn.addStream(mediaStream);
-
-          if (data.should_create_offer) {
-            console.log("Creating RTC offer to ", peerId);
-            peerConn.createOffer((local_description) => {
-                  console.log("Local offer description is: ", local_description);
-                  peerConn.setLocalDescription(local_description, () => {
-                        internals.socket.emit('relaySessionDescription', {
-                          'peer_id': peerId,
-                          'session_description': local_description
-                        });
-
-                        console.log("Offer setLocalDescription succeeded");
-                      }, () => { console.log("Offer setLocalDescription failed!"); }
-                  );
-                },
-                (error) => { console.log("Error sending offer: ", error) }
-            );
-          }
         console.log(`There are now ${Peers.count()} participants`);
       });
 
         console.log(`There are now ${Peers.count()} participants`);
       });
 
+      socket.on('offerReceived', async (data) => {
+
+                               const peerConnection = internals.peers[data.peerId];
+
+        const offer = new RTCSessionDescription(data.offer);
+        await peerConnection.setRemoteDescription(offer);
+
+        const answer = await peerConnection.createAnswer();
+        await peerConnection.setLocalDescription(answer);
+
+        // Send the answer to the peer
+        socket.emit('relayAnswer', { answer, peerId: data.peerId });
+      });
+
+      socket.on('answerReceived', async (data) => {
+
+                               const peerConnection = internals.peers[data.peerId];
+        const answer = new RTCSessionDescription(data.answer);
+                               await peerConnection.setRemoteDescription(answer);
+      });
+
+      socket.on('ICECandidateReceived', async (data) => {
+
+                               const peerConnection = internals.peers[data.peerId];
+        const candidate = new RTCIceCandidate(data.candidate);
+        await peerConnection.addIceCandidate(candidate);
+                 });
+
+
       internals.socket.on('removePeer', function() {
 
       internals.socket.on('removePeer', function() {
 
+                               delete internals.peers[data.peerId];
         Peers.remove('id-'+(Peers.count() - 1)); // This is only for testing, don't use count to remove ids.
         console.log(`There are now ${Peers.count()} participants`);
       });
         Peers.remove('id-'+(Peers.count() - 1)); // This is only for testing, don't use count to remove ids.
         console.log(`There are now ${Peers.count()} participants`);
       });