X-Git-Url: https://git.r.bdr.sh/rbdr/junction/blobdiff_plain/4757c4616d5d7106cd023f06e5e5ba04d01bbb07..baea04f1f4a2070832b85c6b1b61824297493cb7:/extension/content_script.js diff --git a/extension/content_script.js b/extension/content_script.js index 4a6c7e6..279c52d 100644 --- a/extension/content_script.js +++ b/extension/content_script.js @@ -1,47 +1,88 @@ -(() => { +import { io } from 'socket.io-client'; +import Peers from './peers'; +import Media from './media'; - const internals = { - port: null, +const internals = { - onMessage(message) { - internals[message.action](message.data); - }, + kSocketUrl: 'ws://localhost:8000', - async joinAudioCall(data) { + port: null, + socket: null, + peers: 0, - try { - const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true }); - internals.createAudioElement(data.tada); - } - catch (err) { + onMessage(message) { + internals[message.action](message.data); + }, - internals.port.postMessage({ - action: 'error' + async joinAudioCall(data) { + + internals.tada = data.tada; // Keeping for fun + + try { + await Media.start(); + + internals.socket = io(internals.kSocketUrl, { + transports: ['websocket'] + }); + + internals.socket.on('error', function(error) { + + console.error('GENERAL ERROR', error); + }); + + internals.socket.on('connect_error', function(error) { + + console.error('CONNNECT ERROR', error); + }); + + internals.socket.on('connect', function() { + + console.log("Connected to signaling server, group: ", data.currentUrl); + internals.socket.emit('join', { + 'url': data.currentUrl, }); - internals.port.disconnect(); - internals.createAudioElement(data.tada); - } - }, + }); - hangUp() { - document.querySelectorAll('.junction-call-audio').forEach((audioElement) => audioElement.remove()); - internals.port.disconnect(); - }, + internals.socket.on('disconnect', function() { - createAudioElement(source, type = 'audio/wav') { + console.log("disconnected from signaling server"); + }); - const audioElement = document.createElement('audio'); - audioElement.setAttribute('class', 'junction-call-audio'); - audioElement.src = source; - audioElement.autoplay = 'autoplay'; - audioElement.type = type; - document.querySelector('body').appendChild(audioElement); + internals.socket.on('addPeer', function(data) { + + console.log(data); + Peers.add('id-'+Peers.count(), internals.tada); + console.log(`There are now ${Peers.count()} participants`); + }); + + internals.socket.on('removePeer', function() { + + 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`); + }); } - }; + catch (err) { + + internals.port.postMessage({ + action: 'error' + }); + internals.port.disconnect(); + } + }, + + hangUp() { + + Peers.reset(); + Media.stop(); + internals.socket.close(); + internals.port.disconnect(); + } +}; + +internals.port = chrome.runtime.connect({ name:"content" }); +internals.port.onMessage.addListener(internals.onMessage); - internals.port = chrome.runtime.connect({ name:"content" }); - internals.port.onMessage.addListener(internals.onMessage); -})(); +console.log('Content Script Loaded'); // Indicates to the background script that we executed correctly true;