/** Concept each channel can have child channels ??**/ var EventualChannel = require('./eventual-channel'); class EventualContext2 extends EventualChannel { constructor(eventual) { super(eventual); } broadcast(name,...args) { // Special send to all eventual contexts var tocall = []; this.eventual._events.ctx.forEach((c) => { tocall.push(...c.search(name)); }); return this.process(tocall,args) } state(name,...args) { this.eventual.state(name,args); } destroy() { this.childs = null; this.listeners = null; var i = this.eventual._events.ctx.indexOf(this); if(i!=-1) this.eventual._events.ctx.splice(i,1); } toString() { var out = []; this.eventual._events.ctx.forEach((c) => { var cur = c; // First level function listChild(cur,prefix) { for( var c in cur.childs) { var name = (prefix)?prefix + ":" + c:c; out.push(name); listChild(cur.childs[c], name); } } listChild(cur,""); }); return out.join("\n"); } } /** Old and deprecated **/ class EventualContext extends EventualChannel { constructor(eventual) { super(); this.eventual = eventual; // Contextual listeners, it will invalidate regexp? this.listeners = []; } process(tocall,args,donecb) { tocall.forEach((l) => { l.callback(...args); }); } broadcast(name,...args) { this.eventual._events.ctx.forEach((c) => { c.emit(name,...args); }); } /** flat model **/ on(name,cb) { // Any listener will be placed here this.listeners.push({ name: name, callback:cb }); return this; } emit(name,...args) { // We need to go trought all contexts in Eventual var tocall = []; this.eventual._events.ctx.forEach((c) => { c.listeners.forEach((l) => { if(l.name == name) { tocall.push(l); } }) }); this.process(tocall,name,args); }/**/ destroy() { var i = this.eventual._events.ctx.indexOf(this); if(i!=-1) this.eventual._events.ctx.splice(i,1); this.listeners = null; } } module.exports = EventualContext2;