aboutsummaryrefslogtreecommitdiffstats
path: root/packages/instant/src/util/heartbeater.ts
diff options
context:
space:
mode:
authorfragosti <francesco.agosti93@gmail.com>2018-11-10 08:22:36 +0800
committerfragosti <francesco.agosti93@gmail.com>2018-11-10 08:22:36 +0800
commitff027ee36a5c2384004c9b55baa42919b5d9fa65 (patch)
tree72300769affc9d33f5c8ef32aadd1b8cc31f98d6 /packages/instant/src/util/heartbeater.ts
parentba292ead45f451e4d7d2fac74582b8406cd4a586 (diff)
parent397b4e289015f9bb0831c1a0ce6fee601670b487 (diff)
downloaddexon-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.ts35
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;
+ }
+}