channel.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const chs = "/"; // Channel separator
  2. class Channel {
  3. constructor(context,name) {
  4. this.context = context;
  5. this._name = name; // Full name
  6. }
  7. name(name) {
  8. if(name == undefined) return this._name;
  9. return this._name + chs + name;
  10. }
  11. channel(...names) { // Sub channel
  12. var name = names.join("/");
  13. return new Channel(this.context,this.name(name));
  14. }
  15. on(sname,callback,order) {
  16. var name = this.name(sname);
  17. var listener = this.context.get(name,true);
  18. listener.callbacks.push({name,callback,order});
  19. //this.context.on(this.name(name),cb,order);
  20. return this;
  21. }
  22. after(name,cb) {
  23. this.on(this.name(name),cb,1000);
  24. return this;
  25. }
  26. emit(name,...args){
  27. return this.context.eventual.emit(this.name(name),...args);
  28. }
  29. propagate(name,...args) {
  30. // special case
  31. return this.context.eventual.propagate(this.name(name),this._name,...args);
  32. }
  33. set(name,value) {
  34. this.context.eventual.set(this.name(name),value);
  35. return this;
  36. }
  37. watch(sname,callback) {
  38. var name = this.name(sname);
  39. if(this.context.watchers[name]== undefined) this.context.watchers[name]= [];
  40. this.context.watchers[name].push(callback);
  41. callback(this.context.eventual._events.store[name]);
  42. //this.context.watch(this.name + ":" + name,cb);
  43. }
  44. }
  45. module.exports = Channel;