smarttime/ts/smarttime.classes.interval.ts

44 lines
1.1 KiB
TypeScript
Raw Normal View History

2022-11-21 08:14:32 +00:00
import * as plugins from './smarttime.plugins.js';
2020-05-25 21:45:43 +00:00
export class Interval {
public status: 'started' | 'stopped' | 'initial' = 'initial';
private statusAuthorization: any = null;
2020-05-25 21:49:35 +00:00
2020-05-27 16:59:26 +00:00
// timings
2020-05-25 21:45:43 +00:00
public intervalMilliseconds: number;
2020-05-27 16:59:26 +00:00
public nextIntervalMillisenconds: number;
2020-05-25 21:45:43 +00:00
public intervalJobs: Array<() => any> = [];
constructor(intervalMillisencondsArg: number) {
this.intervalMilliseconds = intervalMillisencondsArg;
}
public start() {
this.status = 'started';
const statusAuth = new Date();
this.statusAuthorization = statusAuth;
const runInterval = async () => {
while (this.status === 'started' && this.statusAuthorization === statusAuth) {
await plugins.smartdelay.delayFor(this.intervalMilliseconds);
this.executeIntervalJobs();
}
};
runInterval();
}
2020-05-25 21:49:35 +00:00
public stop() {
2020-05-25 21:45:43 +00:00
this.status = 'stopped';
this.statusAuthorization = null;
}
public addIntervalJob(funcArg: () => any) {
this.intervalJobs.push(funcArg);
}
2020-05-25 21:49:35 +00:00
private executeIntervalJobs() {
2020-05-25 21:45:43 +00:00
for (const funcArg of this.intervalJobs) {
funcArg();
}
}
2020-05-25 21:49:35 +00:00
}