const chs = "/"; // Channel separator class Channel { constructor(context,name) { this.context = context; this._name = name; // Full name } name(name) { if(name == undefined) return this._name; return this._name + chs + name; } channel(...names) { // Sub channel var name = names.join("/"); return new Channel(this.context,this.name(name)); } on(sname,callback,order) { var name = this.name(sname); var listener = this.context.get(name,true); listener.callbacks.push({name,callback,order}); //this.context.on(this.name(name),cb,order); return this; } after(name,cb) { this.on(this.name(name),cb,1000); return this; } emit(name,...args){ return this.context.eventual.emit(this.name(name),...args); } propagate(name,...args) { // special case return this.context.eventual.propagate(this.name(name),this._name,...args); } set(name,value) { this.context.eventual.set(this.name(name),value); return this; } watch(sname,callback) { var name = this.name(sname); if(this.context.watchers[name]== undefined) this.context.watchers[name]= []; this.context.watchers[name].push(callback); callback(this.context.eventual._events.store[name]); //this.context.watch(this.name + ":" + name,cb); } } module.exports = Channel;