var fs = require('fs'); var needle = require("needle"); // require config.json var config = require('./config'); // connect us to the server with rcon // IP, port, password var Rcon = require('simple-rcon'); var client = new Rcon({ host: config.clientIP, port: config.clientPort, password: config.clientPassword, timeout: 0 }).connect(); if (!fs.existsSync(config.factorioDirectory)){ console.error("FATAL ERROR: config.factorioDirectory DOES NOT EXIST, PLEASE UPDATE CONFIG.JSON"); process.exit(1); } // make sure we got the files we need if (!fs.existsSync(config.factorioDirectory + "/script-output/")){ fs.mkdirSync(config.factorioDirectory + "/script-output/"); } if (!fs.existsSync(config.factorioDirectory + "/script-output/")){ fs.writeFileSync(config.factorioDirectory + "/script-output/output.txt", "") } fs.writeFileSync(config.factorioDirectory + "/script-output/orders.txt", "") fs.writeFileSync(config.factorioDirectory + "/script-output/txbuffer.txt", ""); client.on('authenticated', function() { console.log('Authenticated!'); }).on('connected', function() { console.log('Connected!'); }).on('disconnected', function() { console.log('Disconnected!'); // now reconnect client.connect(); }); // set some globals confirmedOrders = []; lastSignalCheck = Date.now(); // provide items -------------------------------------------------------------- // trigger when something happens to output.txt fs.watch(config.factorioDirectory + "/script-output/output.txt", function(eventType, filename) { // get array of lines in file items = fs.readFileSync(config.factorioDirectory + "/script-output/output.txt", "utf8").split("\n"); // if you found anything, reset the file if(items[0]) { fs.writeFileSync(config.factorioDirectory + "/script-output/output.txt", "") } for(i = 0;i < items.length; i++) { if(items[i]) { g = items[i].split(" "); g[0] = g[0].replace("\u0000", ""); console.log("exporting " + JSON.stringify(g)); // send our entity and count to the master for him to keep track of needle.post(config.masterIP + ":" + config.masterPort + '/place', {name:g[0], count:g[1]}, function(err, resp, body){ // console.log(body); }); } } }) // request items -------------------------------------------------------------- setInterval(function() { // get array of lines in file items = fs.readFileSync(config.factorioDirectory + "/script-output/orders.txt", "utf8").split("\n"); // if we actually got anything from the file, proceed and reset file if(items[0]) { fs.writeFileSync(config.factorioDirectory + "/script-output/orders.txt", ""); // prepare a package of all our requested items in a more tranfer friendly format var preparedPackage = {}; for(i = 0;i < items.length; i++) { (function(i){ if(items[i]) { items[i] = items[i].split(" "); items[i][0] = items[i][0].replace("\u0000", ""); items[i][0] = items[i][0].replace(",", ""); if(preparedPackage[items[i][0]]){ if(typeof Number(preparedPackage[items[i][0]].count) == "number" && typeof Number(items[i][1]) == "number") { preparedPackage[items[i][0]] = {"name":items[i][0], "count":Number(preparedPackage[items[i][0]].count) + Number(items[i][1])}; } else if (typeof Number(items[i][1]) == "number") { preparedPackage[items[i][0]] = {"name":items[i][0], "count":Number(items[i][1])}; } } else if (typeof Number(items[i][1]) == "number") { preparedPackage[items[i][0]] = {"name":items[i][0], "count":Number(items[i][1])}; } } })(i); } // request our items, one item at a time for(i = 0;i