109 lines
1.9 KiB
TypeScript
109 lines
1.9 KiB
TypeScript
|
'use strict';
|
||
|
|
||
|
import Log = require('log');
|
||
|
|
||
|
let seq : Sequencer;
|
||
|
|
||
|
class Sequencer {
|
||
|
private time : number;
|
||
|
private running : boolean;
|
||
|
|
||
|
private arr : any[] = [];
|
||
|
private loops : number = 1;
|
||
|
|
||
|
private cfg : any;
|
||
|
private cmd : any;
|
||
|
private CMDS : any = {};
|
||
|
private ipc : any;
|
||
|
private log : any;
|
||
|
private id : string = 'sequence';
|
||
|
|
||
|
constructor (cfg : any, cmd : any) {
|
||
|
this.cfg = cfg;
|
||
|
this.cmd = cmd;
|
||
|
this.cmds(cfg.cmd);
|
||
|
this.init();
|
||
|
}
|
||
|
|
||
|
private cmds (obj : any) {
|
||
|
let keys : string[] = Object.keys(obj);
|
||
|
let key : string;
|
||
|
for (key in keys) {
|
||
|
this.CMDS[keys[key]] = key;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//currently called by ui
|
||
|
private async init () {
|
||
|
this.log = Log({ label : this.id })
|
||
|
this.ipc = require('electron').ipcMain;
|
||
|
this.listen();
|
||
|
}
|
||
|
|
||
|
private listen () {
|
||
|
this.ipc.on(this.id, this.listener.bind(this));
|
||
|
}
|
||
|
|
||
|
private async listener (event : any, arg : any) {
|
||
|
console.dir(arg)
|
||
|
if (arg && arg.set) {
|
||
|
this.setSteps(arg.set);
|
||
|
} else if (arg && arg.loops) {
|
||
|
this.loops = arg.loops;
|
||
|
}
|
||
|
event.returnValue = true;
|
||
|
}
|
||
|
|
||
|
public setSteps (steps : any) {
|
||
|
console.dir(steps)
|
||
|
}
|
||
|
//new
|
||
|
public async start (arg : any) {
|
||
|
if (arg && arg.arr) {
|
||
|
this.arr = arg.arr;
|
||
|
}
|
||
|
if (arg && arg.loops) {
|
||
|
this.loops = arg.loops;
|
||
|
}
|
||
|
|
||
|
for (let x = 0; x < this.loops; x++) {
|
||
|
for (let y = 0; y < this.arr.length; y++) {
|
||
|
if (this.running) {
|
||
|
await this.step(y);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//new
|
||
|
public pause () {
|
||
|
|
||
|
}
|
||
|
/**
|
||
|
* Stop the sequence
|
||
|
**/
|
||
|
public stop () {
|
||
|
this.running = false;
|
||
|
//clear?
|
||
|
|
||
|
}
|
||
|
|
||
|
private async step (index : number) {
|
||
|
try {
|
||
|
await this.cmdMap(index)
|
||
|
} catch (err) {
|
||
|
throw err;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
private async cmdMap (index : number) {
|
||
|
const cmdOriginal : string = this.arr[index].cmd;
|
||
|
const cmd : string = this.CMDS[cmdOriginal];
|
||
|
return await this.cmd[cmd];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = function (cfg : any, cmd : any) {
|
||
|
return new Sequencer(cfg, cmd);
|
||
|
}
|