12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- class Channel {
- constructor(context,name) {
- this.context = context;
- this._name = name; // Full name
- }
- name(name) {
- if(name == undefined || name.length === 0) return this._name;
- return this._name + Channel.SEP + name;
- }
- channel(...names) { // Sub channel
- var name = names.join(Channel.SEP);
- var finalName = this.name(name);
- //console.log("Desired channel:" , names, "Result", finalName);
- return new Channel(this.context,finalName);
- }
- on(sname,callback,order = 0) {
- if(typeof(sname) != "string"){
- throw new Error("First argument should be a string");
- }
- 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(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);
- }
- }
- Channel.SEP = "/"; // Channel separator
- module.exports = Channel;
|