Did a bunch of stuff, added some comments, its still a mess :)

This commit is contained in:
Christopher Cookman 2022-12-03 18:23:55 -07:00
parent 1a218503f2
commit 9633085862
Signed by: ChrisChrome
GPG key ID: A023A26E42C33A42

128
index.js
View file

@ -1,9 +1,42 @@
/*
Some foreword:
This code is a mess, I know, but it works. Eventually I'll clean it up, probably in some big rewrite.
That in itself is pretty ironic, considering this could be used for some sort of server browser, where reliability is key, but I digress.
I'll try to comment it as best as I can, but I'm not the best at explaining things.
- Chris Chrome
*/
const Steam = require("steam-server-query")
const express = require('express');
const colors = require("colors");
const app = express();
const port = 3004;
// Define objects (Need to finish moving objects up here)
var masterList = {
lastUpdated: new Date(),
servers: []
};
var serverList = {
serverCount: 0,
highestVersion: "0.0.0",
outdatedServers: 0,
versions: {},
erroredCount: 0,
lastUpdated: new Date(),
servers: {},
errored: {},
offline: {}
}
BigInt.prototype.toJSON = function () {
return this.toString()
}
@ -56,6 +89,28 @@ function splitKeyword(keyword) {
}
};
function countdown(seconds, start, end) {
return new Promise((resolve, reject) => {
var i = seconds;
var interval = setInterval(() => {
process.stdout.clearLine();
process.stdout.cursorTo(0);
// send newline on first iteration
if (i == seconds) {
process.stdout.write(`${start}${i}${end}\n`);
} else if (i < 0) {
process.stdout.write(`${start}${i}${end}\n`);
clearInterval(interval);
resolve();
} else {
process.stdout.write(`${start}${i}${end}`);
}
i--;
}, 1000);
});
}
function objectLength(object) {
var length = 0;
for (var key in object) {
@ -87,6 +142,14 @@ function checkServer(address) {
"gameId": data.gameId,
"lastUpdated": new Date()
}
// Check if server is in errored list or offline list, if so, remove it
if (serverList.errored[address]) {
delete serverList.errored[address];
}
if (serverList.offline[address]) {
delete serverList.offline[address];
}
// Add server to server list
serverList.servers[address] = output;
return output;
}).catch((err) => {
@ -109,18 +172,6 @@ function checkServer(address) {
});
}
var masterList = {
lastUpdated: new Date(),
servers: []
};
var serverList = {
lastUpdated: new Date(),
servers: {},
errored: {}
}
var highestVersion = "v0.0.0";
// findHighestVersion function
@ -190,6 +241,11 @@ function updateMasterList() {
}).catch((err) => {
console.log(`${colors.red(`[ERROR ${new Date()}]`)} Error updating master list: ${err}`);
});
// Start the next countdown
countdown(60, `${colors.cyan(`[INFO ${new Date()}]`)} Updating master list in `, " seconds").then(() => {
updateMasterList();
});
}
// updateServerList function
@ -202,13 +258,38 @@ function updateServerList() {
serverList.lastUpdated = new Date();
}
console.log(`${colors.cyan(`[INFO ${new Date()}]`)} Got server list!`);
setTimeout(findHighestVersion, 1000);
setTimeout(countVersions, 1000);
setTimeout(countOutdatedServers, 1000);
setTimeout(() => {
purgeDeadServers();
serverList.serverCount = objectLength(serverList.servers);
serverList.highestVersion = findHighestVersion();
serverList.outdatedServers = countOutdatedServers();
serverList.versions = countVersions();
serverList.erroredCount = objectLength(serverList.errored);
}, 1500);
};
// Update master list every 5 minutes
setInterval(updateMasterList, 60 * 1000);
// purgeDeadServers function, moves dead servers to offline list
function purgeDeadServers() {
let counter = 0;
console.log(`${colors.cyan(`[INFO ${new Date()}]`)} Purging dead servers...`);
for (var key in serverList.servers) {
if (serverList.servers.hasOwnProperty(key)) {
if (serverList.servers[key].lastUpdated < new Date(new Date().getTime() - 60000)) {
serverList.offline[key] = serverList.servers[key];
delete serverList.servers[key];
console.log(`${colors.cyan(`[INFO ${new Date()}]`)} Server ${key} is offline!`);
// If server somehow got into errored list, remove it
if (serverList.errored[key]) {
delete serverList.errored[key];
}
counter++;
}
}
}
console.log(`${colors.cyan(`[INFO ${new Date()}]`)} Purged ${counter} dead servers!`);
}
// Update master list every 1 minute
updateMasterList();
app.get('/check', (req, res) => {
@ -251,6 +332,14 @@ app.get('/check', (req, res) => {
"gameId": data.gameId,
"lastUpdated": new Date()
}
// Check if server is in errored list or offline list, if so, remove it
if (serverList.errored[address]) {
delete serverList.errored[address];
}
if (serverList.offline[address]) {
delete serverList.offline[address];
}
// Add server to server list
serverList.servers[req.query.address] = output;
res.setHeader("Content-Type", "application/json").send(JSON.stringify(output));
}).catch(err => {
@ -268,11 +357,6 @@ app.get('/check', (req, res) => {
// });
app.get('/serverList', (req, res) => {
serverList.serverCount = objectLength(serverList.servers);
serverList.highestVersion = findHighestVersion();
serverList.outdatedServers = countOutdatedServers();
serverList.versions = countVersions();
serverList.erroredCount = objectLength(serverList.errored);
res.setHeader("Content-Type", "application/json").send(JSON.stringify(serverList));
});