UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

130 lines 8.91 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import '@iotize/tap/service/impl/interface'; import { Subject } from 'rxjs'; import { tap as rxTap } from 'rxjs/operators'; import { debug } from './debug'; export const DEFAULT_KEEP_ALIVE_PERIOD_MS = 5000; const TAG = 'KeepAliveEngine'; export class KeepAliveEngine { constructor(tap, _options) { this.tap = tap; this._options = _options; this._lastResponseTime = 0; this._isStopped = true; this._frameCounter = 0; this._events = new Subject(); debug(TAG, 'new KeepAliveEngine()'); this.tap.client.addInterceptor((req, handle) => { return handle.handle(req).pipe(rxTap({ next: () => { debug(TAG, 'update last response time', this._lastResponseTime, '=>', new Date().getTime()); this._lastResponseTime = new Date().getTime(); }, })); }); } /** * Keep alive request count */ get counter() { return this._frameCounter; } /** * returns event observable */ get events() { return this._events.asObservable(); } /** * Change keep alive period */ set period(p) { if (typeof p !== 'number') { p = 0; } this._options.period = p; if (this._options.period <= 0) { this.clearTimeout(); } else if (!this.timeoutId && this.running) { this._setupNextTimeout(0); } } get running() { return !this._isStopped; } get options() { return this._options; } start() { this._isStopped = false; if (!this.timeoutId && this.options.period > 0) { this._setupNextTimeout(0); } this._events.next({ type: 'start', }); } stop() { this._isStopped = true; this.clearTimeout(); this._events.next({ type: 'stop', }); } clearTimeout() { if (this.timeoutId) { clearTimeout(this.timeoutId); this.timeoutId = undefined; } } _setupNextTimeout(timeoutMs) { if (this._isStopped) { return; } this._events.next({ type: 'rescheduleKeepAlive', timeout: timeoutMs, }); this.timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () { if (this.tap.isConnected()) { const remainingTime = this._options.period - elapsedTime(this._lastResponseTime); if (remainingTime > 0) { debug(TAG, 'Reschedule keep alive in ', remainingTime); this._setupNextTimeout(remainingTime); } else { debug(TAG, 'Running keep alive'); this._frameCounter++; try { this._events.next({ type: 'tick', }); yield this.tap.service.interface.keepAlive(); } catch (err) { this._events.next({ type: 'error', error: err, }); } if (this._options.period > 0) { this._setupNextTimeout(this._options.period); } } } }), timeoutMs); } } function elapsedTime(time) { return new Date().getTime() - time; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VlcC1hbGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2tlZXAtYWxpdmUvc3JjL2tlZXAtYWxpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxvQ0FBb0MsQ0FBQztBQUc1QyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFFakQsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUM7QUEyQjlCLE1BQU0sT0FBTyxlQUFlO0lBNkMxQixZQUNVLEdBQVEsRUFDUixRQUEwQjtRQUQxQixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ1IsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUE3QzVCLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBZ0JsQixZQUFPLEdBQTRCLElBQUksT0FBTyxFQUFFLENBQUM7UUE2QnZELEtBQUssQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDN0MsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDNUIsS0FBSyxDQUFDO2dCQUNKLElBQUksRUFBRSxHQUFHLEVBQUU7b0JBQ1QsS0FBSyxDQUNILEdBQUcsRUFDSCwyQkFBMkIsRUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLEVBQ0osSUFBSSxJQUFJLEVBQUUsQ0FB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