From c67214d356243d511ecae04fe652bd06a728d506 Mon Sep 17 00:00:00 2001 From: CoolElectronics Date: Mon, 14 Aug 2023 21:17:12 -0400 Subject: [PATCH] WIP option 1 stuff --- client/src/SignalFirebase.ts | 6 ++--- frontend/src/App.svelte | 51 ++++++++++++++++++++++++++--------- tracker/src/main.ts | 52 ++++++++++++++++++++++++++++++++++-- 3 files changed, 92 insertions(+), 17 deletions(-) diff --git a/client/src/SignalFirebase.ts b/client/src/SignalFirebase.ts index 0644720..fce2871 100644 --- a/client/src/SignalFirebase.ts +++ b/client/src/SignalFirebase.ts @@ -1,5 +1,5 @@ import { getDatabase, onValue, ref, set, remove } from "firebase/database"; -import "../firebase-config"; +// import "firebase-config"; import { v4 as uuid } from "uuid"; import { Offer } from "./RTCTransport"; @@ -26,8 +26,8 @@ export async function signalSwarm(offer: string): Promise { return; let data = JSON.parse(text); - if (data.err) { - reject(new Error(data.err)); + if (data.error) { + reject(new Error(data.error)); return; } if (!(data && data.answer && data.candidates)) return; diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 9b39bc1..3f7c169 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -9,6 +9,7 @@ Connection, DevWsTransport, RTCTransport, + SignalFirebase, } from "client"; import { Button, @@ -40,6 +41,8 @@ let url: string; let proxyIframe: HTMLIFrameElement; + let rtcState = ""; + if (import.meta.env.VITE_ADRIFT_DEV) { console.log( "%cADRIFT RUNNING IN DEVELOPMENT MODE", @@ -71,14 +74,25 @@ console.warn("Transport closed"); } - async function connectFirebase() { - rtctransport = transport = new RTCTransport( + function createRTCTransport() { + let transport = new RTCTransport( onTransportOpen, onTransportClose, - console.log, - console.log, - console.log + () => { + rtcState = `Connection ${transport.peer.connectionState}`; + }, + () => { + rtcState = `Signaling ${transport.peer.connectionState}`; + }, + () => { + rtcState = `Gathering ${transport.peer.connectionState}`; + } ); + return transport; + } + + async function connectFirebase() { + rtctransport = transport = createRTCTransport(); let creds = await signInWithEmailAndPassword(auth, email, password); @@ -104,14 +118,15 @@ }); } + async function connectSwarm() { + rtctransport = transport = createRTCTransport(); + + // let offer = await rtctransport.createOffer(); + await SignalFirebase.signalSwarm("test"); + } + async function connectDevHttp() { - rtctransport = transport = new RTCTransport( - onTransportOpen, - onTransportClose, - console.log, - console.log, - console.log - ); + rtctransport = transport = createRTCTransport(); let offer = await rtctransport.createOffer(); console.log("offer created", offer); console.log(JSON.stringify(offer)); @@ -232,6 +247,10 @@ > + +

+ {rtcState} +

{:else}
@@ -245,7 +264,15 @@ + +
+ +

+ {rtcState} +

diff --git a/tracker/src/main.ts b/tracker/src/main.ts index 9f1cbfc..a09cafb 100644 --- a/tracker/src/main.ts +++ b/tracker/src/main.ts @@ -6,9 +6,12 @@ import expressWs from "express-ws"; import serviceAccount from "./admin-creds.json"; import admin, { ServiceAccount } from "firebase-admin"; +import { WebSocket } from "ws"; dotenv.config(); +let members: WebSocket[] = []; + const app = express() as unknown as expressWs.Application; expressWs(app); @@ -20,9 +23,54 @@ admin.initializeApp({ credential: admin.credential.cert(serviceAccount as ServiceAccount), databaseURL: "https://adrift-6c1f6-default-rtdb.firebaseio.com" }); +let db = admin.database(); +let reff = db.ref("/swarm"); + +reff.set({ + dummy: 1, +}); + +let ids: string[] = ["dummy"]; + +reff.on("value", snapshot => { + let val = snapshot.val(); + if (!val) return; + + if (Object.keys(val) == ids) { + return; + } + + let newkeys = Object.keys(val).filter(id => id != "dummy" && !ids.includes(id)); + + for (let key of newkeys) { + let offer = val[key]; + console.log("new offer:" + offer); + + if (members.length < 1) { + db.ref(`/swarm/${key}`).set(JSON.stringify({ error: "no swarm members found" })); + console.error("no swarm members!"); + } + + let selectedmember = members[Math.floor(Math.random() * members.length)]; + + } + + ids = ids.concat(newkeys); +}); + + +app.ws("/join", (ws, _req) => { + + console.log("ws connect"); + members.push(ws); + ws.on("message", (msg) => { + + }); + + ws.onclose = () => { + members.filter(member => member != ws); + }; -app.ws("/join", (ws: any, _req: any) => { - console.log(ws, _req); }); app.listen(17776, () => console.log("listening"));