mirror of
https://github.com/MercuryWorkshop/adrift.git
synced 2025-05-12 22:00:02 -04:00
fix tracker tracking disconnected servers
This commit is contained in:
parent
751a70c188
commit
dda5302931
4 changed files with 35 additions and 13 deletions
|
@ -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
6
pnpm-lock.yaml
generated
|
@ -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
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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"));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue