From 5cef78d47cc06d5cad24c230d8fed261b9890a1a Mon Sep 17 00:00:00 2001 From: CoolElectronics Date: Mon, 14 Aug 2023 21:31:58 -0400 Subject: [PATCH] connect to tracker inside server --- server/src/http.ts | 6 +++--- server/src/main.ts | 21 +++++++++++++++++---- server/src/server.ts | 2 +- tracker/src/main.ts | 9 ++++++--- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/server/src/http.ts b/server/src/http.ts index ca40655..d9b213f 100644 --- a/server/src/http.ts +++ b/server/src/http.ts @@ -9,7 +9,7 @@ import { import { Agent as HTTPSAgent, request as httpsRequest } from "https"; import fuck from "ipaddr.js"; import { HTTPRequestPayload } from "protocol"; -import { Readable } from "stream"; +// import { Readable } from "stream"; const { isValid, parse } = fuck; export interface BareErrorBody { @@ -172,8 +172,8 @@ export async function bareFetch( }); else throw new RangeError(`Unsupported protocol: '${remote.protocol}'`); - if (request.body) Readable.from([request.body]).pipe(outgoing); - else outgoing.end(); + // if (request.body) Readable.from([request.body]).pipe(outgoing); + // else outgoing.end(); return await new Promise((resolve, reject) => { outgoing.on("response", (response: IncomingMessage) => { diff --git a/server/src/main.ts b/server/src/main.ts index 97bb84f..1bdee2c 100644 --- a/server/src/main.ts +++ b/server/src/main.ts @@ -9,6 +9,9 @@ import { auth } from "firebase-config"; import { getDatabase, onValue, ref, set } from "firebase/database"; import { AdriftServer } from "./server"; +import { WebSocket } from "isomorphic-ws"; + + const configuration = { iceServers: [ { @@ -161,11 +164,7 @@ async function connectFirebase() { if (str) { let data = JSON.parse(str); - console.log(data); - console.log(data.offer); - console.log(data.localCandidates); if (data && data.offer && data.localCandidates) { - console.log("answerng"); answerRtc(data, (answer) => { console.log("answering"); set(peer, JSON.stringify(answer)); @@ -176,4 +175,18 @@ async function connectFirebase() { } connectFirebase(); +let tracker = new WebSocket("ws://localhost:17776/join"); +tracker.on("message", (str: string) => { + if (!str) return; + let data = JSON.parse(str); + if (!(data && data.offer && data.localCandidates)) return; + console.log("got offer"); + + answerRtc(data, (answer) => { + console.log("have an answer"); + tracker.send(JSON.stringify(answer)); + }) + +}); + app.listen(3000, () => console.log("listening")); diff --git a/server/src/server.ts b/server/src/server.ts index ae09848..6270f2d 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -199,7 +199,7 @@ export class AdriftServer { if (!init) return; const { cursor, seq, op } = init; switch (op) { - case C2SRequestTypes.HTTPRequest: { + case C2SRequestTypes.HTTPRequestChunk: { let resp: { payload: HTTPResponsePayload; body: AsyncIterable; diff --git a/tracker/src/main.ts b/tracker/src/main.ts index a09cafb..9686915 100644 --- a/tracker/src/main.ts +++ b/tracker/src/main.ts @@ -49,10 +49,16 @@ reff.on("value", snapshot => { if (members.length < 1) { db.ref(`/swarm/${key}`).set(JSON.stringify({ error: "no swarm members found" })); console.error("no swarm members!"); + return; } let selectedmember = members[Math.floor(Math.random() * members.length)]; + selectedmember.once("message", (answer) => { + db.ref(`/swarm/${key}`).set(answer); + }); + selectedmember.send(offer); + } ids = ids.concat(newkeys); @@ -63,9 +69,6 @@ app.ws("/join", (ws, _req) => { console.log("ws connect"); members.push(ws); - ws.on("message", (msg) => { - - }); ws.onclose = () => { members.filter(member => member != ws);