mirror of
https://github.com/MercuryWorkshop/adrift.git
synced 2025-05-13 06:10:01 -04:00
WIP option 1 stuff
This commit is contained in:
parent
23222b19db
commit
c67214d356
3 changed files with 92 additions and 17 deletions
|
@ -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<Offer> {
|
|||
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;
|
||||
|
|
|
@ -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 @@
|
|||
>
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
<h2>
|
||||
{rtcState}
|
||||
</h2>
|
||||
</div>
|
||||
{:else}
|
||||
<div class="flex items-center justify-center h-full">
|
||||
|
@ -245,7 +264,15 @@
|
|||
<Button type="filled" on:click={connectDevWS}
|
||||
>Connect with localhost websocket transport</Button
|
||||
>
|
||||
|
||||
<Button type="filled" on:click={connectSwarm}
|
||||
>Connect with the swarm (webrtc, insecure)
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<h2>
|
||||
{rtcState}
|
||||
</h2>
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
|
|
|
@ -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"));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue