ソースを参照

Created class that can handle specialty IO events.

master
Bryan Miller 5年前
コミット
07593c8ca9
1個のファイルの変更70行の追加0行の削除
  1. +70
    -0
      src/common/wireable.js

+ 70
- 0
src/common/wireable.js ファイルの表示

@@ -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;

読み込み中…
キャンセル
保存