| @@ -0,0 +1,70 @@ | |||
| class Listener{ | |||
| constructor(wl){ // wl = white list | |||
| this.__listeners = {}; | |||
| this.__IsAllowed = (name) => { | |||
| if (wl !== null) | |||
| return (wl.length > 0) ? (wl.indexOf(name) >= 0) : true; | |||
| return false; | |||
| }; | |||
| } | |||
| on(name, fn){ | |||
| if (this.__IsAllowed(name)){ | |||
| if (!(name in this.__listeners)){ | |||
| this.__listeners[name] = []; | |||
| } | |||
| this.__listeners[name].push(fn); | |||
| } | |||
| } | |||
| trigger(){ | |||
| if (arguments.length > 0){ | |||
| let name = arguments[0]; | |||
| if (name in this.__listeners){ | |||
| let args = Array.prototype.slice.call(arguments); | |||
| this.__listeners[name].forEach((fn) => { | |||
| fn.apply(null, args); | |||
| }); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| class IO{ | |||
| constructor(rl, wl){ | |||
| rl = (rl === null || (rl instanceof Array)) ? rl : []; | |||
| wl = (wl === null || (wl instanceof Array)) ? wl : []; | |||
| this.__rlisteners = (rl !== null) ? (new Listener(rl)) : null; | |||
| this.__wlisteners = (wl !== null) ? (new Listener(wl)) : null; | |||
| } | |||
| onRead(name, fn){ | |||
| this.__rlisteners.on(name, fn); | |||
| return this; | |||
| } | |||
| onWrite(name, fn){ | |||
| this.__wlisteners.on(name, fn); | |||
| return this; | |||
| } | |||
| onRW(name, fn){ | |||
| this.__rlisteners.on(name, fn); | |||
| this.__wlisteners.on(name, fn); | |||
| return this; | |||
| } | |||
| triggerRead(){ | |||
| this.__rlisteners.apply(this.__rlisteners, Array.prototype.slice.call(arguments)); | |||
| return this; | |||
| } | |||
| triggerWrite(){ | |||
| this.__wlisteners.apply(this.__wlisteners, Array.prototype.slice.call(arguments)); | |||
| return this; | |||
| } | |||
| } | |||
| module.exports = IO; | |||