connect to tracker inside server

This commit is contained in:
CoolElectronics 2023-08-14 21:31:58 -04:00
parent a839d0fe51
commit 5cef78d47c
No known key found for this signature in database
GPG key ID: F63593D168636C50
4 changed files with 27 additions and 11 deletions

View file

@ -9,7 +9,7 @@ import {
import { Agent as HTTPSAgent, request as httpsRequest } from "https"; import { Agent as HTTPSAgent, request as httpsRequest } from "https";
import fuck from "ipaddr.js"; import fuck from "ipaddr.js";
import { HTTPRequestPayload } from "protocol"; import { HTTPRequestPayload } from "protocol";
import { Readable } from "stream"; // import { Readable } from "stream";
const { isValid, parse } = fuck; const { isValid, parse } = fuck;
export interface BareErrorBody { export interface BareErrorBody {
@ -172,8 +172,8 @@ export async function bareFetch(
}); });
else throw new RangeError(`Unsupported protocol: '${remote.protocol}'`); else throw new RangeError(`Unsupported protocol: '${remote.protocol}'`);
if (request.body) Readable.from([request.body]).pipe(outgoing); // if (request.body) Readable.from([request.body]).pipe(outgoing);
else outgoing.end(); // else outgoing.end();
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
outgoing.on("response", (response: IncomingMessage) => { outgoing.on("response", (response: IncomingMessage) => {

View file

@ -9,6 +9,9 @@ import { auth } from "firebase-config";
import { getDatabase, onValue, ref, set } from "firebase/database"; import { getDatabase, onValue, ref, set } from "firebase/database";
import { AdriftServer } from "./server"; import { AdriftServer } from "./server";
import { WebSocket } from "isomorphic-ws";
const configuration = { const configuration = {
iceServers: [ iceServers: [
{ {
@ -161,11 +164,7 @@ async function connectFirebase() {
if (str) { if (str) {
let data = JSON.parse(str); let data = JSON.parse(str);
console.log(data);
console.log(data.offer);
console.log(data.localCandidates);
if (data && data.offer && data.localCandidates) { if (data && data.offer && data.localCandidates) {
console.log("answerng");
answerRtc(data, (answer) => { answerRtc(data, (answer) => {
console.log("answering"); console.log("answering");
set(peer, JSON.stringify(answer)); set(peer, JSON.stringify(answer));
@ -176,4 +175,18 @@ async function connectFirebase() {
} }
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")); app.listen(3000, () => console.log("listening"));

View file

@ -199,7 +199,7 @@ export class AdriftServer {
if (!init) return; if (!init) return;
const { cursor, seq, op } = init; const { cursor, seq, op } = init;
switch (op) { switch (op) {
case C2SRequestTypes.HTTPRequest: { case C2SRequestTypes.HTTPRequestChunk: {
let resp: { let resp: {
payload: HTTPResponsePayload; payload: HTTPResponsePayload;
body: AsyncIterable<ArrayBuffer>; body: AsyncIterable<ArrayBuffer>;

View file

@ -49,10 +49,16 @@ reff.on("value", snapshot => {
if (members.length < 1) { if (members.length < 1) {
db.ref(`/swarm/${key}`).set(JSON.stringify({ error: "no swarm members found" })); db.ref(`/swarm/${key}`).set(JSON.stringify({ error: "no swarm members found" }));
console.error("no swarm members!"); console.error("no swarm members!");
return;
} }
let selectedmember = members[Math.floor(Math.random() * members.length)]; 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); ids = ids.concat(newkeys);
@ -63,9 +69,6 @@ app.ws("/join", (ws, _req) => {
console.log("ws connect"); console.log("ws connect");
members.push(ws); members.push(ws);
ws.on("message", (msg) => {
});
ws.onclose = () => { ws.onclose = () => {
members.filter(member => member != ws); members.filter(member => member != ws);