started work on extracting server launching and IO systems

This commit is contained in:
Danielv123 committed 2018-03-27 20:50:10 +02:00
1 parent e694593fdb
commit 802c21f41e
2 files changed
+102 -3

No files matched your search

+3 -3
View File
@@ -23,9 +23,9 @@ coverage
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
node_modules
node_modules/*
!node_modules/_app
Factorio*
/factorio
/instances
+99
View File
@@ -0,0 +1,99 @@
/**
class factorioServer
This class has the responsiblity of :
* spawning a factorio server
* Handling input via stdin or RCON
*/
const fs = require("fs");
class factorioServer {
constructor({
factorioDirectory = "./../../factorio",
instanceDirectory = "./../../instances/data",
instanceName = "Default server name",
factorioPort = Math.floor(Math.random() * 65535),
serversettings = {}
} = {}){
this.factorioDirectory = factorioDirectory;
this.instanceDirectory = instanceDirectory;
this.instanceName = instanceName;
this.factorioPort = factorioPort;
this.serversettings = Object.assign({
"name": "Clusterio instance: " + this.instanceName,
"description": "Public factorio server running clusterio",
"tags": ["clusterio"],
"max_players": "20",
"visibility": "public",
"username": "",
"token": "",
"game_password": "",
"verify_user_identity": true,
"admins": ["Danielv123"],
"allow_commands": true,
"autosave_interval": 10,
"autosave_slots": 5,
"afk_autokick_interval": 0,
"auto_pause": false,
}, serversettings)
// ensure instance exists
initialize();
}
async initialize(){
if(!isValidInstance()){
await createInstance();
}
}
async createInstance(path = this.instanceDirectory){
// create folders
let folders = [
"/script-output/",
"/saves/",
"/mods/",
"/instanceMods/",
];
fs.mkdirSync(path)
folders.forEach(folder => fs.mkdirSync(path + folder));
// create files
let files = [
{name: "/script-output/output.txt", content: ""},
{name: "/script-output/orders.txt", content: ""},
{name: "/script-output/txbuffer.txt", content: ""},
{name: "/config.ini", content: "[path]\r\n\ read-data=__PATH__executable__/../../data\r\n\ write-data=__PATH__executable__/../../../instances/" + instance + "\r\n\ "},
{name: "/config.json", content: JSON.stringify({
factorioPort: this.factorioPort,
clientPassword: Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8),
}, null, 4)},
{name: "/server-settings.json", content: JSON.stringify(this.serversettings)},
];
files.forEach(file => fs.writeFile(path + file.name, file.content, doneWritingHandler));
let filesToWrite = files.length;
function doneWritingHandler(){
if(!--filesToWrite){
return path;
}
}
}
isValidInstance(path = this.instanceDirectory){
if(fs.existsSync(instancedirectory)){
return true;
} else {
return false;
}
}
async createMap(name = "map.zip"){
if(!this.isValidInstance()){
await createInstance();
}
}
}