'use strict'; global.moduleApi = require("./module-api"); const EventEmitter = require("events"); const rtmap = require("./routemap-parser"); class ServersOrchestry extends EventEmitter { constructor () { super(); this.on("update-routemap", () => { console.log("[Update routemap]: routemap.txt updated, reloading servers..."); this.stop(); this.run(); }); this.instances = new Array(); } run () { this.hash = rtmap.hash(); const syntaxTree = rtmap.parse(); for (let faddress in syntaxTree) { const [address, port] = faddress.split(/:/gmi); const localSyntaxTree = syntaxTree[faddress]; const instance = new localSyntaxTree.Type({ address, port }, localSyntaxTree); localSyntaxTree.modules.forEach(module => module.bind(instance)); instance.run(); this.instances.push(instance); localSyntaxTree.modules.forEach(module => module.emit("runned")); } } stop () { for (let instance of this.instances) { instance.stop(); } this.instances = []; } } const orchestry = new ServersOrchestry(); orchestry.run(); setInterval(() => { if (rtmap.hash() !== orchestry.hash) orchestry.emit("update-routemap"); }, 100);