fix tracker tracking disconnected servers

This commit is contained in:
CoolElectronics 2023-08-16 18:27:31 -04:00
parent 751a70c188
commit dda5302931
No known key found for this signature in database
GPG key ID: F63593D168636C50
4 changed files with 35 additions and 13 deletions

View file

@ -119,14 +119,19 @@
let offer = await rtctransport.createOffer(); let offer = await rtctransport.createOffer();
connectionState = "Routing you to an available node..."; connectionState = "Routing you to an available node...";
try {
let answer = await SignalFirebase.signalSwarm(JSON.stringify(offer)); let answer = await SignalFirebase.signalSwarm(JSON.stringify(offer));
connectionState = "Linking to node..."; connectionState = "Linking to node...";
await new Promise((r) => { await new Promise((r) => {
setTimeout(r, 500); setTimeout(r, 500);
}); });
rtctransport.answer(answer.answer, answer.candidates); rtctransport.answer(answer.answer, answer.candidates);
} catch (e) {
console.error(e);
connectionState = e;
}
} }
async function connectDevHttp() { async function connectDevHttp() {

6
pnpm-lock.yaml generated
View file

@ -453,6 +453,9 @@ importers:
tracker: tracker:
dependencies: dependencies:
'@types/uuid':
specifier: ^9.0.2
version: 9.0.2
dotenv: dotenv:
specifier: ^16.3.1 specifier: ^16.3.1
version: 16.3.1 version: 16.3.1
@ -474,6 +477,9 @@ importers:
typescript: typescript:
specifier: ^5.1.6 specifier: ^5.1.6
version: 5.1.6 version: 5.1.6
uuid:
specifier: ^9.0.0
version: 9.0.0
devDependencies: devDependencies:
'@types/express': '@types/express':
specifier: ^4.17.17 specifier: ^4.17.17

View file

@ -11,13 +11,15 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@types/uuid": "^9.0.2",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"express-ws": "^5.0.2", "express-ws": "^5.0.2",
"firebase": "^10.1.0", "firebase": "^10.1.0",
"firebase-admin": "^11.10.1", "firebase-admin": "^11.10.1",
"tracker-list": "workspace:*", "tracker-list": "workspace:*",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"typescript": "^5.1.6" "typescript": "^5.1.6",
"uuid": "^9.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/express": "^4.17.17", "@types/express": "^4.17.17",

View file

@ -8,9 +8,11 @@ import serviceAccount from "./admin-creds.json";
import admin, { ServiceAccount } from "firebase-admin"; import admin, { ServiceAccount } from "firebase-admin";
import { WebSocket } from "ws"; import { WebSocket } from "ws";
import { v4 as uuid } from "uuid";
dotenv.config(); dotenv.config();
let members: WebSocket[] = []; let members: Record<string, WebSocket> = {};
const app = express() as unknown as expressWs.Application; const app = express() as unknown as expressWs.Application;
@ -47,14 +49,15 @@ reff.on("value", snapshot => {
let offer = val[key]; let offer = val[key];
console.log("new offer:" + offer); console.log("new offer:" + offer);
if (members.length < 1) { if (Object.keys(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; return;
} }
let selectedmember = members[Math.floor(Math.random() * members.length)]; let selectedid = Object.keys(members)[Math.floor(Math.random() * Object.keys(members).length)];
let selectedmember = members[selectedid];
selectedmember.once("message", (answer) => { selectedmember.once("message", (answer) => {
console.log("setting answer" + answer); console.log("setting answer" + answer);
db.ref(`/swarm/${key}`).set(answer); db.ref(`/swarm/${key}`).set(answer);
@ -69,13 +72,19 @@ reff.on("value", snapshot => {
app.ws("/join", (ws, _req) => { app.ws("/join", (ws, _req) => {
console.log("ws connect"); let id = uuid();
members.push(ws); console.log(_req.ip);
console.log(`ws connect of id ${id}`);
members[id] = ws;
ws.onclose = () => { ws.onclose = () => {
members.filter(member => member != ws); delete members[id];
}; };
}); });
setInterval(() => {
console.log(`${Object.keys(members).length} members`);
}, 5000);
app.listen(17776, () => console.log("listening")); app.listen(17776, () => console.log("listening"));