WIP option 1 stuff

This commit is contained in:
CoolElectronics 2023-08-14 21:17:12 -04:00
parent 23222b19db
commit c67214d356
No known key found for this signature in database
GPG key ID: F63593D168636C50
3 changed files with 92 additions and 17 deletions

View file

@ -1,5 +1,5 @@
import { getDatabase, onValue, ref, set, remove } from "firebase/database"; import { getDatabase, onValue, ref, set, remove } from "firebase/database";
import "../firebase-config"; // import "firebase-config";
import { v4 as uuid } from "uuid"; import { v4 as uuid } from "uuid";
import { Offer } from "./RTCTransport"; import { Offer } from "./RTCTransport";
@ -26,8 +26,8 @@ export async function signalSwarm(offer: string): Promise<Offer> {
return; return;
let data = JSON.parse(text); let data = JSON.parse(text);
if (data.err) { if (data.error) {
reject(new Error(data.err)); reject(new Error(data.error));
return; return;
} }
if (!(data && data.answer && data.candidates)) return; if (!(data && data.answer && data.candidates)) return;

View file

@ -9,6 +9,7 @@
Connection, Connection,
DevWsTransport, DevWsTransport,
RTCTransport, RTCTransport,
SignalFirebase,
} from "client"; } from "client";
import { import {
Button, Button,
@ -40,6 +41,8 @@
let url: string; let url: string;
let proxyIframe: HTMLIFrameElement; let proxyIframe: HTMLIFrameElement;
let rtcState = "";
if (import.meta.env.VITE_ADRIFT_DEV) { if (import.meta.env.VITE_ADRIFT_DEV) {
console.log( console.log(
"%cADRIFT RUNNING IN DEVELOPMENT MODE", "%cADRIFT RUNNING IN DEVELOPMENT MODE",
@ -71,14 +74,25 @@
console.warn("Transport closed"); console.warn("Transport closed");
} }
async function connectFirebase() { function createRTCTransport() {
rtctransport = transport = new RTCTransport( let transport = new RTCTransport(
onTransportOpen, onTransportOpen,
onTransportClose, onTransportClose,
console.log, () => {
console.log, rtcState = `Connection ${transport.peer.connectionState}`;
console.log },
() => {
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); 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() { async function connectDevHttp() {
rtctransport = transport = new RTCTransport( rtctransport = transport = createRTCTransport();
onTransportOpen,
onTransportClose,
console.log,
console.log,
console.log
);
let offer = await rtctransport.createOffer(); let offer = await rtctransport.createOffer();
console.log("offer created", offer); console.log("offer created", offer);
console.log(JSON.stringify(offer)); console.log(JSON.stringify(offer));
@ -232,6 +247,10 @@
> >
</Card> </Card>
</div> </div>
<h2>
{rtcState}
</h2>
</div> </div>
{:else} {:else}
<div class="flex items-center justify-center h-full"> <div class="flex items-center justify-center h-full">
@ -245,7 +264,15 @@
<Button type="filled" on:click={connectDevWS} <Button type="filled" on:click={connectDevWS}
>Connect with localhost websocket transport</Button >Connect with localhost websocket transport</Button
> >
<Button type="filled" on:click={connectSwarm}
>Connect with the swarm (webrtc, insecure)
</Button>
</div> </div>
<h2>
{rtcState}
</h2>
</div> </div>
</Card> </Card>
</div> </div>

View file

@ -6,9 +6,12 @@ import expressWs from "express-ws";
import serviceAccount from "./admin-creds.json"; import serviceAccount from "./admin-creds.json";
import admin, { ServiceAccount } from "firebase-admin"; import admin, { ServiceAccount } from "firebase-admin";
import { WebSocket } from "ws";
dotenv.config(); dotenv.config();
let members: WebSocket[] = [];
const app = express() as unknown as expressWs.Application; const app = express() as unknown as expressWs.Application;
expressWs(app); expressWs(app);
@ -20,9 +23,54 @@ admin.initializeApp({
credential: admin.credential.cert(serviceAccount as ServiceAccount), credential: admin.credential.cert(serviceAccount as ServiceAccount),
databaseURL: "https://adrift-6c1f6-default-rtdb.firebaseio.com" 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")); app.listen(17776, () => console.log("listening"));