File source
import { Service, SwitchEvent, ItemStatusListener } from ".";
import { exec, spawn } from "child_process";
export default class ExecService implements Service {
private items = [];
addStatusListener(type: string, item, listener: ItemStatusListener) {
let updateStatus = (cb) => {
if(!item.status) return;
let process = exec(item.status);
process.on("close", (code) => {
if(code === 0){
listener("up");
}else{
listener("down");
}
if(cb) cb();
})
};
this.items.push({item, listener, updateStatus});
if(item.interval){
let updateStatusAndSetTimeout = () => updateStatus(() => setTimeout(updateStatusAndSetTimeout, item.interval * 1000));
updateStatusAndSetTimeout();
}
}
handleEvent(type: string, item, event: SwitchEvent) {
let i = this.items.find(i => i.item === item);
if(event === "up" || event === "down"){
console.log("exec", item[event]);
let child = spawn(item[event], [], {
stdio: "ignore",
detached: true,
shell: true,
});
child.on("close", () =>{
i.updateStatus()
});
child.unref();
}
}
}