Add 'mapcheck.js'
This commit is contained in:
127
mapcheck.js
Normal file
127
mapcheck.js
Normal 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); });
|
||||
};
|
||||
Reference in New Issue
Block a user