Refactor client.js command handling into functions

Move the various actions performed by client.js into separate async
functions and do the command action logic if client.js is invoked as a
module directly.
This commit is contained in:
Hornwitser committed 2019-09-09 12:44:09 +02:00
1 parent 98900e72dc
commit 1bbf1542d2
1 file changed
+97 -49
+97 -49
View File
@@ -21,12 +21,6 @@ const configManager = require("lib/manager/configManager.js");
const pluginManager = require("lib/manager/pluginManager");
const hashFile = require('lib/hash').hashFile;
console.warn(`
+==========================================================+
I WARNING: This is the development branch for the 2.0 I
I version of clusterio. Expect things to break. I
+==========================================================+
`);
// argument parsing
const args = require('minimist')(process.argv.slice(2));
@@ -35,33 +29,10 @@ const args = require('minimist')(process.argv.slice(2));
var config = require(args.config || './config');
var global = {};
if (!fs.existsSync(config.instanceDirectory)) {
fs.mkdirSync(config.instanceDirectory);
}
if (!fs.existsSync("./sharedPlugins/")) {
fs.mkdirSync("sharedPlugins");
}
if (!fs.existsSync("./sharedMods/")) {
fs.mkdirSync("sharedMods");
}
const instance = process.argv[3];
const instancedirectory = config.instanceDirectory + '/' + instance;
const command = process.argv[2];
// Set the process title, shows up as the title of the CMD window on windows
// and as the process name in ps/top on linux.
process.title = "clusterioClient "+instance;
// add better stack traces on promise rejection
process.on('unhandledRejection', r => console.log(r));
// make sure we have the master access token (can't write to master without it since clusterio 2.0)
if(!config.masterAuthToken || typeof config.masterAuthToken !== "string"){
console.error("ERROR invalid config!");
console.error("Master server now needs an access token for write operations. As clusterio slaves depends \
upon this, please add your token to config.json in the field named masterAuthToken. \
You can retrieve your auth token from the master in secret-api-token.txt after running it once.");
}
const needleOptionsWithTokenAuthHeader = {
compressed:true,
headers: {
@@ -118,9 +89,7 @@ function messageInterface(command, callback) {
});
}
// handle commandline parameters
if (!command || command == "help" || command == "--help") {
function printUsage() {
console.error("Usage: ");
console.error("node client.js start [instance name]");
console.error("node client.js list");
@@ -131,8 +100,9 @@ if (!command || command == "help" || command == "--help") {
console.error("node client.js manage shared plugins install https://github.com/Danielv123/playerManager");
console.error("For more management options, do");
console.error("node client.js manage");
process.exit(1);
} else if (command == "list") {
}
async function listPlugins() {
let instanceNames = fileOps.getDirectoriesSync(config.instanceDirectory);
instanceNames.unshift("Name:");
let longestInstanceName = 0;
@@ -175,8 +145,9 @@ if (!command || command == "help" || command == "--help") {
});
displayLines.forEach(line => console.log(line));
process.exit(0);
} else if (command == "manage"){
}
async function manage() {
// console.log("Launching mod manager");
//const fullUsage = 'node client.js manage [instance, "shared"] ["mods", "config"] ...';
function usage(instance, tool, action){
@@ -262,8 +233,9 @@ if (!command || command == "help" || command == "--help") {
console.log('Usage:');
usage(instance);
}
// process.exit(0);
} else if (command == "delete") {
}
async function deleteInstance() {
if (!process.argv[3]) {
console.error("Usage: node client.js delete [instance]");
process.exit(1);
@@ -275,7 +247,9 @@ if (!command || command == "help" || command == "--help") {
console.error("Instance not found: " + process.argv[3]);
process.exit(0);
}
} else if (command == "download") {
}
async function downloadMod() {
console.log("Downloading mods...");
// get JSON data about releases
let res = syncRequest('GET', 'https://api.github.com/repos/Danielv123/factorioClusterioMod/releases', {"headers":{"User-Agent":"factorioClusterio"}});
@@ -292,11 +266,9 @@ if (!command || command == "help" || command == "--help") {
response.pipe(file);
}).end();
}
} else if (command == "start" && instance === undefined) {
console.error("ERROR: No instanceName provided!");
console.error("Usage: node client.js start [instanceName]");
process.exit(0);
} else if (command == "start" && typeof instance == "string" && instance != "/" && !fs.existsSync(instancedirectory)) {
}
async function createInstance() {
// if instance does not exist, create it
console.log("Creating instance...");
fs.mkdirSync(instancedirectory);
@@ -403,8 +375,10 @@ write-data=${ path.resolve(config.instanceDirectory, instance) }\r\n
process.exit(0);
}
});
} else if (command == "start" && typeof instance == "string" && instance != "/" && fs.existsSync(instancedirectory)){(async () => {
});
}
async function startInstance() {
// Exit if no instance specified (it should be, just a safeguard);
if(instancedirectory != config.instanceDirectory+"/undefined"){
var instanceconfig = require(path.resolve(instancedirectory,'config'));
@@ -563,9 +537,61 @@ write-data=${ path.resolve(config.instanceDirectory, instance) }\r\n
confirmedOrders = [];
lastSignalCheck = Date.now();
});
})()} else {
console.error("Invalid arguments, quitting.");
process.exit(1);
}
async function startClient() {
if (!fs.existsSync(config.instanceDirectory)) {
fs.mkdirSync(config.instanceDirectory);
}
if (!fs.existsSync("./sharedPlugins/")) {
fs.mkdirSync("sharedPlugins");
}
if (!fs.existsSync("./sharedMods/")) {
fs.mkdirSync("sharedMods");
}
// Set the process title, shows up as the title of the CMD window on windows
// and as the process name in ps/top on linux.
process.title = "clusterioClient "+instance;
// add better stack traces on promise rejection
process.on('unhandledRejection', r => console.log(r));
// make sure we have the master access token (can't write to master without it since clusterio 2.0)
if(!config.masterAuthToken || typeof config.masterAuthToken !== "string"){
console.error("ERROR invalid config!");
console.error("Master server now needs an access token for write operations. As clusterio slaves depends \
upon this, please add your token to config.json in the field named masterAuthToken. \
You can retrieve your auth token from the master in secret-api-token.txt after running it once.");
}
// handle commandline parameters
if (!command || command == "help" || command == "--help") {
printUsage();
process.exit(1);
} else if (command == "list") {
await listPlugins();
process.exit(0);
} else if (command == "manage"){
await manage();
// process.exit(0);
} else if (command == "delete") {
await deleteInstance();
} else if (command == "download") {
await downloadMod();
} else if (command == "start" && instance === undefined) {
console.error("ERROR: No instanceName provided!");
console.error("Usage: node client.js start [instanceName]");
process.exit(0);
} else if (command == "start" && typeof instance == "string" && instance != "/" && !fs.existsSync(instancedirectory)) {
await createInstance();
} else if (command == "start" && typeof instance == "string" && instance != "/" && fs.existsSync(instancedirectory)) {
await startInstance();
} else {
console.error("Invalid arguments, quitting.");
process.exit(1);
}
}
// ensure instancemanagement only ever runs once
@@ -801,3 +827,25 @@ function hashMods(instanceName, callback) {
callback(hashes.filter(entry => entry !== null));
});
}
if (module === require.main) {
console.warn(`
+==========================================================+
I WARNING: This is the development branch for the 2.0 I
I version of clusterio. Expect things to break. I
+==========================================================+
`
);
startClient().catch(err => {
console.error(`
+---------------------------------------------------------------+
| Unexpected error occured while starting client, please report |
| it to https://github.com/clusterio/factorioClusterio/issues |
+---------------------------------------------------------------+`
);
console.error(err);
process.exit(1);
});
}