channel.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. class Channel {
  2. constructor(context,name) {
  3. this.context = context;
  4. this._name = name; // Full name
  5. }
  6. name(name) {
  7. if(name == undefined || name.length === 0) return this._name;
  8. return this._name + Channel.SEP + name;
  9. }
  10. channel(...names) { // Sub channel
  11. var name = names.join(Channel.SEP);
  12. var finalName = this.name(name);
  13. //console.log("Desired channel:" , names, "Result", finalName);
  14. return new Channel(this.context,finalName);
  15. }
  16. on(sname,callback,order = 0) {
  17. if(typeof(sname) != "string"){
  18. throw new Error("First argument should be a string");
  19. }
  20. var name = this.name(sname);
  21. var listener = this.context.get(name,true);
  22. listener.callbacks.push({name,callback,order});
  23. //this.context.on(this.name(name),cb,order);
  24. return this;
  25. }
  26. after(name,cb) {
  27. this.on(name,cb,1000);
  28. return this;
  29. }
  30. emit(name,...args){
  31. return this.context.eventual.emit(this.name(name),...args);
  32. }
  33. propagate(name,...args) {
  34. // special case
  35. return this.context.eventual.propagate(this.name(name),this._name,...args);
  36. }
  37. set(name,value) {
  38. this.context.eventual.set(this.name(name),value);
  39. return this;
  40. }
  41. watch(sname,callback) {
  42. var name = this.name(sname);
  43. if(this.context.watchers[name]== undefined) this.context.watchers[name]= [];
  44. this.context.watchers[name].push(callback);
  45. callback(this.context.eventual._events.store[name]);
  46. //this.context.watch(this.name + ":" + name,cb);
  47. }
  48. }
  49. Channel.SEP = "/"; // Channel separator
  50. module.exports = Channel;