diff options
author | fragosti <francesco.agosti93@gmail.com> | 2018-11-10 08:22:36 +0800 |
---|---|---|
committer | fragosti <francesco.agosti93@gmail.com> | 2018-11-10 08:22:36 +0800 |
commit | ff027ee36a5c2384004c9b55baa42919b5d9fa65 (patch) | |
tree | 72300769affc9d33f5c8ef32aadd1b8cc31f98d6 /packages/instant/src/util/heartbeater.ts | |
parent | ba292ead45f451e4d7d2fac74582b8406cd4a586 (diff) | |
parent | 397b4e289015f9bb0831c1a0ce6fee601670b487 (diff) | |
download | dexon-sol-tools-ff027ee36a5c2384004c9b55baa42919b5d9fa65.tar dexon-sol-tools-ff027ee36a5c2384004c9b55baa42919b5d9fa65.tar.gz dexon-sol-tools-ff027ee36a5c2384004c9b55baa42919b5d9fa65.tar.bz2 dexon-sol-tools-ff027ee36a5c2384004c9b55baa42919b5d9fa65.tar.lz dexon-sol-tools-ff027ee36a5c2384004c9b55baa42919b5d9fa65.tar.xz dexon-sol-tools-ff027ee36a5c2384004c9b55baa42919b5d9fa65.tar.zst dexon-sol-tools-ff027ee36a5c2384004c9b55baa42919b5d9fa65.zip |
Merge branch 'development' of https://github.com/0xProject/0x-monorepo into feature/instant/metamask-connect-flow
Diffstat (limited to 'packages/instant/src/util/heartbeater.ts')
-rw-r--r-- | packages/instant/src/util/heartbeater.ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/packages/instant/src/util/heartbeater.ts b/packages/instant/src/util/heartbeater.ts new file mode 100644 index 000000000..e700d489e --- /dev/null +++ b/packages/instant/src/util/heartbeater.ts @@ -0,0 +1,35 @@ +import { intervalUtils } from '@0x/utils'; +import * as _ from 'lodash'; + +type HeartbeatableFunction = () => Promise<void>; +export class Heartbeater { + private _intervalId?: NodeJS.Timer; + private readonly _performImmediatelyOnStart: boolean; + private readonly _performFunction: HeartbeatableFunction; + + public constructor(performingFunctionAsync: HeartbeatableFunction, performImmediatelyOnStart: boolean) { + this._performFunction = performingFunctionAsync; + this._performImmediatelyOnStart = performImmediatelyOnStart; + } + + public start(intervalTimeMs: number): void { + if (!_.isUndefined(this._intervalId)) { + throw new Error('Heartbeat is running, please stop before restarting'); + } + + if (this._performImmediatelyOnStart) { + // tslint:disable-next-line:no-floating-promises + this._performFunction(); + } + + // tslint:disable-next-line:no-unbound-method + this._intervalId = intervalUtils.setAsyncExcludingInterval(this._performFunction, intervalTimeMs, _.noop); + } + + public stop(): void { + if (this._intervalId) { + intervalUtils.clearInterval(this._intervalId); + } + this._intervalId = undefined; + } +} |