From a644efe1abe8072bc92efa6d0fefde7504563086 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 11 Apr 2022 15:10:16 -0300 Subject: add a timer parameter in the wallet constructor in order to resolve #7120 --- packages/taler-wallet-core/src/util/timer.ts | 54 ++++++++++++++++++---------- 1 file changed, 35 insertions(+), 19 deletions(-) (limited to 'packages/taler-wallet-core/src/util') 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; -- cgit v1.2.3