From 8e41e21a739534ab60458f28f03fe49af7cc2b90 Mon Sep 17 00:00:00 2001 From: zino Date: Wed, 14 Sep 2022 22:31:33 +0200 Subject: [PATCH] Add 'mapcheck.js' --- mapcheck.js | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 mapcheck.js diff --git a/mapcheck.js b/mapcheck.js new file mode 100644 index 0000000..6b69247 --- /dev/null +++ b/mapcheck.js @@ -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); }); +}; \ No newline at end of file