diff --git a/sharedPlugins/remoteMap/chunkStore.js b/sharedPlugins/remoteMap/chunkStore.js deleted file mode 100644 index 330ab601..00000000 --- a/sharedPlugins/remoteMap/chunkStore.js +++ /dev/null @@ -1,100 +0,0 @@ -var mkdirp = require("mkdirp-promise"); -var mkdirpSync = require("mkdirp").sync; -var fs = require("fs"); -var events = require("events"); -var path = require("path"); - -var objectOps = require("./../../lib/objectOps"); - -var LinvoDB = require("linvodb3"); -// LinvoDB.dbPath = "./database/linvodb/"; - - -let allowLogging = true; -let log = string => (allowLogging)? console.log(string):"" - -module.exports = class chunkStore { - constructor(name, chunkSize = 32, path = "./chunkStore/"){ - if(!name || (typeof name != "string" && typeof name != "number")) throw new Error("chunkstore requires a name string as first param"); - name = name.toString(); - this.name = name; - this.chunkSize = chunkSize; - this.path = (path[path.length] == "/") ? path : path+"/"; - mkdirpSync(path+name); - LinvoDB.dbPath = this.path; - - this.db = new LinvoDB(name, {}, {}); - - this.eventEmitter = new events.EventEmitter(); - } - setEntity(x/**{number}*/, y/**{number}*/, newEntity/**{object}*/){ - return new Promise((resolve, reject) => { - x = Math.floor(x); - y = Math.floor(y); - this.db.find({x, y}, (err, docs) => { - if(typeof newEntity == "object"){ - if(err) reject(err); - let entityDoc = {x, y, entity: newEntity}; - if(docs && docs[0] && docs[0]._id){ - entityDoc._id = docs[0]._id; - } - this.db.save(entityDoc, (err,docs) => { - if(err) reject(err); - resolve(docs); - this.eventEmitter.emit("change", docs) - }); - } else { - docs.forEach(doc => { - doc.remove(()=>{ - // removed :) - }); - }); - resolve(); - this.eventEmitter.emit("change", {x,y}); - } - }); - }); - } - getEntity(x, y){ - return new Promise((resolve, reject) => { - this.db.find({x:Math.floor(x), y:Math.floor(y)}, (err, docs) => { - if(err) reject(err); - resolve(docs); - }); - }); - } - onEntityChange(eventhandler/**function*/){ - if(typeof eventhandler == "function") { - this.eventEmitter.on("change", eventhandler); - } - } - 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 - }; - fs.readFile(this.path+this.name+"/"+x+"/"+y, (err, chunkFile) => { - - if(err){ - log(err) - resolve(chunk); - } else { - if(objectOps.isJSON(chunkFile)) { - log("returned from file") - let chunk = JSON.parse(chunkFile); - resolve(chunk); - } else { - log("file failed") - resolve(chunk); - } - } - }); // add x and y values as well and we are done? - */ - }); - } -} \ No newline at end of file diff --git a/sharedPlugins/remoteMap/chunkStore.spe_c.js b/sharedPlugins/remoteMap/chunkStore.spe_c.js deleted file mode 100644 index fbd325ca..00000000 --- a/sharedPlugins/remoteMap/chunkStore.spe_c.js +++ /dev/null @@ -1,64 +0,0 @@ -var assert = require("assert"); - -var chunkStore = require("./chunkStore.js"); - -describe("remoteMap/chunkStore.js", () => { - // define some values for our test - const inserterX = 14.5; // rounds to 15 - const inserterY = -17.5; // rounds to -17, +64 would be 47 - const inserterName = "inserter"; - - 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 */, undefined, "./database/unitTests/chunkStore/"); - assert.equal(store.name, "910239"); - }); - it("allows you to store the locations of entities", done => { - store.setEntity(inserterX, inserterY, {name:inserterName, otherData:"can be arbitrary"}).then(() => { - done(); - // nothing to do here really - }); - }); - it("returns entities at positions you query for", done => { - setTimeout(()=>{ - store.getEntity(inserterX, inserterY).then(entities => { - entity = entities[0] - // console.log(entity) - assert.equal(entity.x, 14); - assert.equal(entity.y, -18); - assert.equal(entity.entity.name, "inserter"); - assert.equal(entity.entity.otherData, "can be arbitrary"); - done(); - }); - },300); - }); - it("deletes entities when not provided with an object as 3rd arg", done => { - store.setEntity(inserterX, inserterY).then(entity => { - assert(entity === undefined); - setTimeout(()=>{ - store.getEntity(inserterX, inserterY).then(entities => { - // console.log(entities) - assert.equal(entities.length, 0, "Why are we getting results, it should be empty?"); - done(); - }); - },300); - }); - }); - describe("validates input by throwing when it is invalid", ()=>{ - it("throws if called without a string as the first parameter", ()=>{ - assert.throws(()=>{ - let throwingChunkStore = new chunkStore(undefined, undefined, "asdasda"); - }); - assert.throws(()=>{ - let throwingChunkStore = new chunkStore({}, undefined, "asdasdas"); - }); - }); - it("converts numbers to strings automatically if they are provided as the first parameter", ()=>{ - assert.ok(()=>{ - let nonThrowingChunkStore = new chunkStore(42, undefined, "./database/unitTests/chunkStore/"); - }); - }); - }); -}); diff --git a/sharedPlugins/scenario_loader/index.js b/sharedPlugins/scenario_loader/index.js index bcce9c8d..319ffe2b 100644 --- a/sharedPlugins/scenario_loader/index.js +++ b/sharedPlugins/scenario_loader/index.js @@ -103,19 +103,14 @@ class AsyncArray extends Array { super(arr) this.data = arr; // In place of Array subclassing } -} - - filterAsync(predicate) { + async filterAsync(predicate) { // Take a copy of the array, it might mutate by the time we've finished const data = Array.from(this.data); // Transform all the elements into an array of promises using the predicate // as the promise - return Promise.all(data.map((element, index) => predicate(element, index, data))) - // Use the result of the promises to call the underlying sync filter function - .then(result => { - return data.filter((element, index) => { - return result[index]; - }); + const result = await Promise.all(data.map((element, index) => predicate(element, index, data))); + return data.filter((element, index) => { + return result[index]; }); } }