summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/util/timer.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/util/timer.ts')
-rw-r--r--packages/taler-wallet-core/src/util/timer.ts54
1 files changed, 35 insertions, 19 deletions
diff --git a/packages/taler-wallet-core/src/util/timer.ts b/packages/taler-wallet-core/src/util/timer.ts
index d9fe3439b..c850c663c 100644
--- a/packages/taler-wallet-core/src/util/timer.ts
+++ b/packages/taler-wallet-core/src/util/timer.ts
@@ -42,7 +42,7 @@ export interface TimerHandle {
}
class IntervalHandle {
- constructor(public h: any) {}
+ constructor(public h: any) { }
clear(): void {
clearInterval(this.h);
@@ -60,7 +60,7 @@ class IntervalHandle {
}
class TimeoutHandle {
- constructor(public h: any) {}
+ constructor(public h: any) { }
clear(): void {
clearTimeout(this.h);
@@ -97,20 +97,6 @@ export const performanceNow: () => bigint = (() => {
return () => BigInt(0);
})();
-/**
- * Call a function every time the delay given in milliseconds passes.
- */
-export function every(delayMs: number, callback: () => void): TimerHandle {
- return new IntervalHandle(setInterval(callback, delayMs));
-}
-
-/**
- * Call a function after the delay given in milliseconds passes.
- */
-export function after(delayMs: number, callback: () => void): TimerHandle {
- return new TimeoutHandle(setTimeout(callback, delayMs));
-}
-
const nullTimerHandle = {
clear() {
// do nothing
@@ -125,13 +111,43 @@ const nullTimerHandle = {
/**
* Group of timers that can be destroyed at once.
*/
+export interface TimerAPI {
+ after(delayMs: number, callback: () => void): TimerHandle;
+ every(delayMs: number, callback: () => void): TimerHandle;
+}
+
+export class SetTimeoutTimerAPI implements TimerAPI {
+ /**
+ * Call a function every time the delay given in milliseconds passes.
+ */
+ every(delayMs: number, callback: () => void): TimerHandle {
+ return new IntervalHandle(setInterval(callback, delayMs));
+ }
+
+ /**
+ * Call a function after the delay given in milliseconds passes.
+ */
+ after(delayMs: number, callback: () => void): TimerHandle {
+ return new TimeoutHandle(setTimeout(callback, delayMs));
+ }
+
+
+}
+
+export const timer = new SetTimeoutTimerAPI();
+
+/**
+ * Implementation of [[TimerGroup]] using setTimeout
+ */
export class TimerGroup {
private stopped = false;
- private timerMap: { [index: number]: TimerHandle } = {};
+ private readonly timerMap: { [index: number]: TimerHandle } = {};
private idGen = 1;
+ constructor(public readonly timerApi: TimerAPI) { }
+
stopCurrentAndFutureTimers(): void {
this.stopped = true;
for (const x in this.timerMap) {
@@ -158,7 +174,7 @@ export class TimerGroup {
logger.warn("dropping timer since timer group is stopped");
return nullTimerHandle;
}
- const h = after(delayMs, callback);
+ const h = this.timerApi.after(delayMs, callback);
const myId = this.idGen++;
this.timerMap[myId] = h;
@@ -180,7 +196,7 @@ export class TimerGroup {
logger.warn("dropping timer since timer group is stopped");
return nullTimerHandle;
}
- const h = every(delayMs, callback);
+ const h = this.timerApi.every(delayMs, callback);
const myId = this.idGen++;
this.timerMap[myId] = h;