From ce67803bc716af08bbce9c770e99b7915fd3a7b5 Mon Sep 17 00:00:00 2001 From: Rachel Clark Date: Thu, 6 Apr 2023 22:03:51 -0400 Subject: [PATCH] Initial commit, core logic, and basic HTML. No Styling done yet. --- bidirectional-example/extension/index.html | 8 ++ bidirectional-example/extension/manifest.json | 13 ++++ bidirectional-example/extension/script.js | 76 +++++++++++++++++++ bidirectional-example/frontend/index.html | 30 ++++++++ 4 files changed, 127 insertions(+) create mode 100644 bidirectional-example/extension/index.html create mode 100644 bidirectional-example/extension/manifest.json create mode 100644 bidirectional-example/extension/script.js create mode 100644 bidirectional-example/frontend/index.html diff --git a/bidirectional-example/extension/index.html b/bidirectional-example/extension/index.html new file mode 100644 index 0000000..244483e --- /dev/null +++ b/bidirectional-example/extension/index.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/bidirectional-example/extension/manifest.json b/bidirectional-example/extension/manifest.json new file mode 100644 index 0000000..6dc5469 --- /dev/null +++ b/bidirectional-example/extension/manifest.json @@ -0,0 +1,13 @@ +{ + "Name": "Hyperbeam Bi-Directional Example", + "version": "1.0.0", + "description": "An Example extension to show off the hyperbeam bi-directional api", + "manifest_version": 2, + "permissions": [ + "nativeMessaging", + "scripting" + ], + "page_action": { + "default_popup": "index.html" + } +} \ No newline at end of file diff --git a/bidirectional-example/extension/script.js b/bidirectional-example/extension/script.js new file mode 100644 index 0000000..2db1171 --- /dev/null +++ b/bidirectional-example/extension/script.js @@ -0,0 +1,76 @@ +class Socket { + addr; + onMessage; + sock; + + constructor(addr, onMessage) { + this.addr = addr; + this.onMessage = onMessage; + this.setupSock(); + } + + setupSock = () => { + const sock = chrome.runtime.connectNative(this.addr); + sock.onDisconnect.addListener(this.onClose); + sock.onMessage.addListener(this.onMessage); + this.sock = sock; + }; + + onClose = () => { + setTimeout(this.setupSock, 1000); + }; + + send(message) { + const { sock } = this; + if (sock) { + sock.postMessage(message); + } + } + + sendObj(type, data = {}) { + this.send({ type, data }); + } +} + +let peers = []; +const hyperbeamSocket = new Socket("Hyperbeam", handleMessage); + +async function handleMessage(payload) { + switch(payload.type) { + case 'init': + peers = data.peers; + break; + case 'new_peer': + peers.push(data); + break; + case 'destroy_peer': + const index = peers.indexOf(data); + if (index > -1) { + peers.splice(index, 1); + } + break; + case 'recv_peer': + handlePeerMessage(data); + break; + } +} + +async function handlePeerMessage(payload) { + // We wont use this here, but it's here to illustrate that it exists. + const peerId = payload.id; + const message = payload.data; + + document.getElementById("messagebox").value = message; +} + +document.getElementById("messagebox").addEventListener("input", event => { + hyperbeamSocket.send({ + type: "send_peer", + data: { + ids: peers, + data: event.target.value, + } + }); +}); + + diff --git a/bidirectional-example/frontend/index.html b/bidirectional-example/frontend/index.html new file mode 100644 index 0000000..0fee4ab --- /dev/null +++ b/bidirectional-example/frontend/index.html @@ -0,0 +1,30 @@ + + + + + + + + +
+ + \ No newline at end of file