Collexion pingpong works yo

master
= 2019-09-18 01:38:13 -04:00
parent 6f16cffa16
commit dfbcfd7bf4
4 changed files with 96 additions and 40 deletions

View File

@ -1,34 +1,63 @@
const {Signale} = require('signale'); const {Signale} = require('signale');
const log = new Signale({ const log = new Signale({
scope: 'EXEC' scope: 'COLLEXION'
}); });
const path = require('path'); const path = require('path');
const fs = require('fs'); const fs = require('fs');
const uuid = require('uuid'); const uuid = require('uuid');
const timeout = 3000;
const root = (typeof window === 'undefined' ? global : window) const root = (typeof window === 'undefined' ? global : window)
const {Entity} = require('./entity.js') const {Entity} = require('./entity.js')
class Link {
class System { constructor(symbol) {
constructor(cache) { this.symbol = symbol;
this.cache = cache;
this.entities = {};
for(const uuid of cache.getInstances()) {
this.loadEntity(uuid)
}
} }
async send(name, destination, options) { toString() {
// log.debug(`sending ${name}`); return "" + this.symbol;
}
}
if(!(destination in this.entities)) { class Collexion {
this.loadEntity(destination); constructor() {
log.debug('loading entity...') // this.cache = cache;
this.entities = {};
// for(const uuid of cache.getInstances()) {
// this.loadEntity(uuid)
// }
}
createInstances(template) {
const instances = {};
for(const symbol in template) {
const instTemplate = template[symbol];
const _class = instTemplate.Code;
const inst = new _class(this);
inst._data = instTemplate.Data;
instances[symbol] = inst;
} }
this.entities[destination].dispatch(name, options); for(const symbol in instances) {
const inst = instances[symbol];
inst.start()
}
for(const symbol in instances) {
const inst = instances[symbol];
const instTemplate = template[symbol];
inst._links = instTemplate.Links;
for (const linkKey in inst._links) {
const link = inst._links[linkKey];
inst._links[linkKey] = instances[link];
}
}
for(const symbol in instances) {
const inst = instances[symbol];
inst.connected()
}
} }
loadEntity(uuid) { loadEntity(uuid) {
@ -51,4 +80,4 @@ class System {
} }
module.exports = {System}; module.exports = {Collexion, Link};

View File

@ -1,5 +1,30 @@
const = require('.'); const {Collexion, Link, LinkArray} = require('./../../core/Collexion.js');
console.log(ref) const PingPong = require('./pingpong.js')
;(async () => {
const collexion = new Collexion({});
collexion.createInstances({
'A': {
Code: PingPong,
Data: {
boop: true
},
Links: {
thing: new Link('B')
}
},
'B': {
Code: PingPong,
Data: {
},
Links: {
thing: new Link('B')
}
}
})
})();
// const ExampleModule = require('./module.js.js'); // const ExampleModule = require('./module.js.js');

View File

@ -1,20 +0,0 @@
const {Signale} = require('signale');
const log = new Signale({
scope: 'MODULE'
});
module.exports.entity = class module {
async start() {
console.log(this.data)
if(this.data.boop)
this.boop();
}
async boop() {
log.info(`Boop! ${this.data.thing}`)
await new Promise(res => setTimeout(res, 1000));
this.send('boop', this.data.thing)
}
}

View File

@ -0,0 +1,22 @@
const {Signale} = require('signale');
const log = new Signale({
scope: 'PING_PONG'
});
module.exports = class module {
async start() {
console.log(this._data)
}
connected() {
if(this._data.boop)
this.boop();
}
async boop() {
log.info(`Boop!`)
await new Promise(res => setTimeout(res, 1000));
this._links.thing.boop();
}
}