Skip to content

Instantly share code, notes, and snippets.

@YuukiTsuchida
Created May 24, 2019 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YuukiTsuchida/5e2d524a8af31ff9d742659fd37d88fd to your computer and use it in GitHub Desktop.
Save YuukiTsuchida/5e2d524a8af31ff9d742659fd37d88fd to your computer and use it in GitHub Desktop.
module.exports = class SubTrigger {
constructor() {
this.data = {};
this.exclusive = null;
}
addTrigger(triggerName) {
this.data[triggerName] = false;
}
setExclusive(triggerName, flag, availabilityTime) {
if (flag) {
this.exclusive = triggerName;
if (arguments.length === 3) {
setTimeout(() => {
this.exclusive = null;
}, availabilityTime);
}
return;
}
this.exclusive = null;
}
setInclusive(triggerName, flag, availabilityTime) {
this.data[triggerName] = flag;
if (arguments.length === 3 && flag) {
setTimeout(() => {
this.data[triggerName] = false;
}, availabilityTime);
}
}
isTriggerOn(triggerName) {
if (this.exclusive === null) {
return this.data[triggerName];
}
return this.exclusive === triggerName;
}
};
const Subtrigger = require("./subtrigger.js");
const sleep = async (a, callback) => {
await new Promise(r => setTimeout(r, a));
callback();
};
const trigger = new Subtrigger();
trigger.addTrigger("test1");
trigger.addTrigger("test2");
trigger.addTrigger("test3");
trigger.setInclusive("test1", true);
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`);
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`);
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`);
console.log("-------------------------------------------");
trigger.setInclusive("test2", true);
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`);
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`);
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`);
console.log("-------------------------------------------");
trigger.setExclusive("test3", true);
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`);
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`);
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`);
console.log("-------------------------------------------");
trigger.setExclusive("test3", false);
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`);
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`);
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`);
console.log("-------------------------------------------");
console.log("Exclusive Timeout");
trigger.setExclusive("test3", true, 100);
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`);
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`);
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`);
console.log("-------------------------------------------");
sleep(100, () => {
console.log(`test1 flag: ${trigger.isTriggerOn("test1")}`);
console.log(`test2 flag: ${trigger.isTriggerOn("test2")}`);
console.log(`test3 flag: ${trigger.isTriggerOn("test3")}`);
console.log("-------------------------------------------");
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment