diff --git a/lib/chunkStore.js b/lib/chunkStore.js new file mode 100644 index 00000000..61166b50 --- /dev/null +++ b/lib/chunkStore.js @@ -0,0 +1,72 @@ +var mkdirp = require("mkdirp-promise"); +var mkdirpSync = require("mkdirp").sync; +var fs = require("fs"); + +let allowLogging = true; +let log = string => (allowLogging)? console.log(string):"" + +module.exports = class chunkStore { + constructor(name, chunkSize = 32, path = "./chunkStore/"){ + this.name = name; + this.chunkSize = chunkSize; + this.path = (path[path.length] == "/") ? path : path+"/"; + mkdirpSync(path+name); + } + setEntity(x, y, newEntity){ + return new Promise((resolve, reject) => { + localX = Math.round(x % this.chunkSize); + x = Math.floor(Math.round(x)/this.chunkSize); + localY = Math.round(y % this.chunkSize); + y = Math.floor(Math.round(y)/this.chunkSize); + + this.getChunk(x,y).then(chunk => { + if(!chunk.dataObject[localX]) chunk.dataObject[localX] = {}; + if(!chunk.dataObject[localX][localY]) chunk.dataObject[localX][localY] = {}; + + let entity = chunk.dataObject[localX][localY] + + if(newEntity && typeof newEntity == "object"){ + log("Overwriting with new entity"); + entity.name = newEntity.name; + } else { + log("Deleting entry at "+localX+", "+localY); + entity.name = undefined; + } + this.setChunk(x, y, chunk).then(()=>{ + log("Successfully saved chunk!"); + }); + }); + }); + } + setChunk(x, y, chunk){ + return new Promise((resolve, reject) => { + mkdirp(this.path+this.name+"/"+x).then(() => { + fs.writeFile(y, JSON.stringify(chunk), function(){ + + }); + }); + }); + } + getChunk(x, y){ + return new Promise((resolve, reject) => { + // make new chunk in case we can't find an existing one + let chunk = { + dataObject: {}, + position:{x,y}, // fancy ES6 feature that generates to {x:x, y:y} + chunkSize:this.chunkSize, + }; + try { + fs.readdir(this.path+this.name, chunkFiles => { + log(chunkFiles); + if(chunkFiles == undefined) { + resolve(chunk); + } else { + + } + }); // add x and y values as well and we are done? + } catch (e){ + resolve(chunk); + } + }); + } +} \ No newline at end of file diff --git a/lib/chunkStore.spec.js b/lib/chunkStore.spec.js new file mode 100644 index 00000000..3bdbeec6 --- /dev/null +++ b/lib/chunkStore.spec.js @@ -0,0 +1,23 @@ +var assert = require("assert"); + +var chunkStore = require("./chunkStore.js"); + +describe("chunkStore.js", () => { + let store // make our store elevated + it("is a constructor", ()=>{ + assert.equal(typeof chunkStore, "function"); + // create a new store and elevate it + store = new chunkStore("910239"/* instanceID, use defaults for the rest */); + assert.equal(store.name, "910239"); + }); + it("returns items located in a chunk", done => { + store.getChunk(1,0).then(chunkData => { + // console.log(chunkData); + assert.equal(typeof chunkData, "object"); + assert(chunkData.dataArray); + assert.equal(chunkData.position.x, 1); + assert.equal(chunkData.position.y, 0); + done(); + }); + }); +}); \ No newline at end of file diff --git a/master.js b/master.js index 51bf9a50..84ef5d54 100644 --- a/master.js +++ b/master.js @@ -603,8 +603,21 @@ app.get("/api/getFactorioLocale", function(req,res){ getFactorioLocale.asObject(config.factorioDirectory, "en", (err, factorioLocale) => res.send(factorioLocale)); }); -var server = app.listen(config.masterPort || 8080, function () { +var server = require("http").Server(app); +server.listen(config.masterPort || 8080, function () { console.log("Listening on port %s...", server.address().port); }); +/* Websockets for remoteMap */ +var io = require("socket.io")(server); +var slaveMappers = {}; +io.on('connection', function (socket) { + socket.emit('hello', { hello: 'world' }); + socket.on('registerSlaveMapper', function (data) { + console.log(data); + slaveMappers[data.instanceID].getChunk = function getChunk(x,y){ + + } + }); +}); module.exports = app; diff --git a/package-lock.json b/package-lock.json index f2e59c8b..7dfb549a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,11 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, "ajv": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", @@ -259,6 +264,11 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, "as-table": { "version": "1.0.31", "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.31.tgz", @@ -312,6 +322,11 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1352,6 +1367,11 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, "bagpipe": { "version": "github:Ivshti/bagpipe#328cc576d682539d635af3a8c360696af353e44a", "requires": { @@ -1402,6 +1422,16 @@ "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz", "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=" }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, "bcrypt-pbkdf": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", @@ -1411,6 +1441,14 @@ "tweetnacl": "0.14.5" } }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, "binary-extensions": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", @@ -1474,6 +1512,11 @@ } } }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", @@ -1729,6 +1772,11 @@ } } }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", @@ -2272,11 +2320,20 @@ "graceful-readlink": "1.0.1" } }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "concat-map": { "version": "0.0.1", @@ -2983,6 +3040,79 @@ "once": "1.4.0" } }, + "engine.io": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz", + "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=", + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.6.9", + "engine.io-parser": "2.1.1", + "uws": "0.14.5", + "ws": "3.3.1" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz", + "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.6.9", + "engine.io-parser": "2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.1", + "xmlhttprequest-ssl": "1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.1.tgz", + "integrity": "sha1-4Ps/DgRi9/WLt3waUun1p+JuRmg=", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.2" + } + }, "errno": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", @@ -3945,6 +4075,26 @@ "ansi-regex": "2.1.1" } }, + "has-binary2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", + "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -4239,6 +4389,11 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5766,6 +5921,14 @@ } } }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "requires": { + "mkdirp": "0.5.1" + } + }, "mocha": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", @@ -6166,6 +6329,11 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -6557,6 +6725,22 @@ "protocols": "1.4.6" } }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -7678,6 +7862,61 @@ "hoek": "4.2.0" } }, + "socket.io": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "requires": { + "debug": "2.6.7", + "engine.io": "3.1.4", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.0.4", + "socket.io-parser": "3.1.2" + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.6.7", + "engine.io-client": "3.1.4", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.1.2", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", + "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", + "requires": { + "component-emitter": "1.2.1", + "debug": "2.6.7", + "has-binary2": "1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -8397,6 +8636,11 @@ "extend-shallow": "2.0.1" } }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", @@ -8602,6 +8846,11 @@ "dev": true, "optional": true }, + "ultron": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz", + "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ=" + }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -8959,6 +9208,12 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, + "uws": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz", + "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=", + "optional": true + }, "vali-date": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", @@ -9282,6 +9537,16 @@ "signal-exit": "3.0.2" } }, + "ws": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.1.tgz", + "integrity": "sha512-8A/uRMnQy8KCQsmep1m7Bk+z/+LIkeF7w+TDMLtX1iZm5Hq9HsUDmgFGaW1ACW5Cj0b2Qo7wCvRhYN2ErUVp/A==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.0" + } + }, "x-is-function": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz", @@ -9299,6 +9564,11 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, + "xmlhttprequest-ssl": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz", + "integrity": "sha1-BPVgkVcks4kIhxXMDteBPpZ3v1c=" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -9340,6 +9610,11 @@ } } }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, "z-schema": { "version": "3.18.2", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.18.2.tgz", diff --git a/package.json b/package.json index 3bde9aa4..f9385fca 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "linvodb3": "^3.25.0", "luamin": "^1.0.4", "mkdirp": "^0.5.1", + "mkdirp-promise": "^5.0.1", "moment": "^2.19.1", "ncp": "^2.0.0", "nedb": "^1.8.0", @@ -51,6 +52,7 @@ "rmdir-sync": "^1.0.1", "semver": "^5.4.1", "simple-rcon": "^0.3.1", + "socket.io": "^2.0.4", "sync-request": "^4.0.1", "underscore": "^1.8.3" }, diff --git a/routes.js b/routes.js index efd330b0..14f7a473 100644 --- a/routes.js +++ b/routes.js @@ -11,4 +11,7 @@ module.exports = function(app) { app.get("/nodeDetails", function(req, res) { res.render("nodeDetails"); }); + app.get("/remoteMap", function(req, res) { + res.render("remoteMap"); + }); }; \ No newline at end of file diff --git a/sharedPlugins/remoteMap/index.js b/sharedPlugins/remoteMap/index.js index de920290..d3cf6da9 100644 --- a/sharedPlugins/remoteMap/index.js +++ b/sharedPlugins/remoteMap/index.js @@ -1,10 +1,13 @@ const needle = require("needle"); -const moduleConfig = require("./config"); +const io = require("socket.io"); + +const moduleConfig = require("./config"); // not to be confused with clusterio config. This config is private to this plugin. console.log("/silent-command game.print('"+moduleConfig.name+" version "+moduleConfig.version+" enabled')"); /*setInterval(function(){ console.log("/silent-command game.write_file('"+moduleConfig.scriptOutputFileSubscription+"', game.tick, true, 0)"); },1000);*/ + var config = {}; process.stdin.setEncoding('utf8'); process.stdin.on('readable', () => { @@ -17,6 +20,8 @@ process.stdin.on('readable', () => { data.shift();data.shift();data.shift(); if(data && data[0] == undefined){ // this position is now empty, delete whatever was there from DB + console.log("empty: ") + console.log(chunk) } data.forEach(entity => { let name = entity.split(" ")[0]; @@ -27,6 +32,11 @@ process.stdin.on('readable', () => { } else { // config is the same config as client.js and master.js uses config = JSON.parse(chunk); + // socket should be a global + socket = io.connect("http://"+config.masterIP+":"+config.masterPort); + socket.on("hello", data => { + socket.emit("registerSlaveMapper", {instanceID: config.unique}); + }); } }); process.stdin.on('end', () => { diff --git a/static/remoteMap.html b/static/remoteMap.html new file mode 100644 index 00000000..36f68e7d --- /dev/null +++ b/static/remoteMap.html @@ -0,0 +1,15 @@ + +
+ <%- include("head.html") %> + + + + + + <%- include("sidebar.html") %> +