Add 'mapcheck.js'

This commit is contained in:
2022-09-14 22:31:33 +02:00
parent cb9f9be70f
commit 8e41e21a73

127
mapcheck.js Normal file
View File

@@ -0,0 +1,127 @@
var fs = require("fs");
var exec = require('child_process').exec;
var text = fs.readFileSync("/home/csserver/serverfiles/cstrike/mapcycle.txt").toString('utf-8');
var maps = text.split("\n").filter(String)
var mapsBak = [...maps]
var currMapcycle = [...maps];
var notListed = new Array();
var i = 0;
var mapsLocation = './serverfiles/cstrike/maps/';
console.log(maps);
restart();
function deleteMap(map) {
fs.readdir(mapsLocation, (err, files) => {
files.forEach(file => {
if(file.split('.')[0] == map) {
console.log(`Deleted ${mapsLocation + file}`);
fs.unlinkSync( mapsLocation + file );
}
});
});
}
function checkMaps() {
var map = maps[i];
execute(`/home/csserver/csserver send "changelevel ${map}"`, function(changelevel) {
console.log(`\n\n${"-".repeat(80)}\n[${i+1} / ${maps.length}] ${map}`);
//console.log(`[${i+1} / ${maps.length+1}]`);
console.log(changelevel);
setTimeout(details, 5000);
});
}
function reset() {
i = 0;
text = fs.readFileSync("/home/csserver/serverfiles/cstrike/mapcycle.txt").toString('utf-8');
maps = text.split("\n").filter(String);
restart();
}
function details() {
execute("/home/csserver/csserver details", function(details) {
//console.log(details);
currMapcycle.shift();
if (details.match(/not listed/)) {
console.log("Master server: not listed");
notListed.push(maps[i]);
writeFile(notListed, 'notListed.txt');
console.log(currMapcycle);
writeFile(currMapcycle, './serverfiles/cstrike/mapcycle.txt');
deleteMap(maps[i]);
removeByValue(mapsBak, maps[i]);
console.log(mapsBak);
setTimeout(reset, 5000);
//throw new Error("Exiting on purpose");
}
else if (details.match(/listed/)) {
console.log("Master server: listed");
i++;
i < maps.length ? checkMaps() : finish();
}
});
}
function removeByValue(array, item) {
var index = array.indexOf(item);
if (index !== -1) {
array.splice(index, 1);
}
console.log(`Removed ${item} from map pool.`);
}
function writeFile(arr, file) {
const writeStream = fs.createWriteStream(file);
const pathName = writeStream.path;
// write each value of the array on the file breaking line
arr.forEach(value => writeStream.write(`${value}\n`));
// the finish event is emitted when all data has been flushed from the stream
writeStream.on('finish', () => {
console.log(`wrote all the array data to file ${pathName}`);
});
// handle the errors on the write process
writeStream.on('error', (err) => {
console.error(`There is an error writing the file ${pathName} => ${err}`)
});
// close the stream
writeStream.end();
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function finish() {
console.log("Finish");
writeFile(mapsBak, './serverfiles/cstrike/mapcycle.txt');
}
function restart() {
console.log("Restarting...");
execute("/home/csserver/csserver restart", function(restart) {
console.log(restart);
checkMaps();
});
}
function execute(command, callback){
exec(command, function(error, stdout, stderr) { callback(stdout); });
};