UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

104 lines 7.38 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 { BehaviorSubject, empty, never, timer, } from 'rxjs'; import { map, flatMap, share, switchMap } from 'rxjs/operators'; import { MonitorEngine, } from '../api/monitor-engine.interface'; const TAG = 'TapMonitorEngine'; export class MonitoringController { constructor(initalState = INITAL_MONITORING_CONFIG) { this.initalState = initalState; this.subject = new BehaviorSubject(this.initalState); } get state() { return this.subject.value.state; } start(options) { this.subject.next(Object.assign({ state: MonitorEngine.State.START, }, options)); return this; } stop() { this.subject.next({ state: MonitorEngine.State.STOP, }); return this; } pause() { this.subject.next({ state: MonitorEngine.State.PAUSE, }); return this; } setPeriod(period) { this.subject.next({ period, }); } asSubject() { return this.subject; } } export function createDataStreamMonitor(stream, ticker, eventSubject) { return ticker.pipe(flatMap((tickerState) => __awaiter(this, void 0, void 0, function* () { // debug(TAG, `Running call at time ${time}`); return stream .readRaw() .then((value) => { // TODO event ? return value; }) .catch((error) => { eventSubject.next({ type: 'error', error, stream, timerState: tickerState, }); }); })), // filter<DataType | undefined, DataType>((value): value is DataType => { // return value !== undefined; // }), share()); } const INITAL_MONITORING_CONFIG = { dueTime: 0, period: 1000, refresh: false, state: MonitorEngine.State.STOP, }; export function createMonitoringTicker( // call: (time: number) => Promise<DataType>, controller) { const controllerSubject = controller instanceof MonitoringController ? controller.asSubject() : controller; let lastState = Object.assign(Object.assign({}, INITAL_MONITORING_CONFIG), controllerSubject.value); return controllerSubject.pipe(switchMap((partialState) => { const newState = Object.assign(Object.assign({}, lastState), partialState); lastState = newState; // console.log(TAG, 'Apply new monitoring state: ', newState); switch (newState.state) { case MonitorEngine.State.STOP: return empty(); case MonitorEngine.State.START: return timer(newState.dueTime, newState.period).pipe(map((time) => ({ time, state: newState, }))); case MonitorEngine.State.PAUSE: return never(); default: throw new Error(`InternalErorr: Not implemented monitoring state: ${newState.state}`); } })); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvci1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kYXRhL3NyYy9saWIvbW9uaXRvci9tb25pdG9yLWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLEtBQUssRUFDTCxLQUFLLEVBRUwsS0FBSyxHQUVOLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFDTCxhQUFhLEdBRWQsTUFBTSxpQ0FBaUMsQ0FBQztBQUd6QyxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQztBQTJCL0IsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUNrQixjQUEwQyx3QkFBd0I7UUFBbEUsZ0JBQVcsR0FBWCxXQUFXLENBQXVEO1FBTDVFLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FDbkMsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztJQUlDLENBQUM7SUFFSixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQW9DO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxlQUNaO1lBQ0QsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSztTQUNqQyxFQUNFLE9BQU8sRUFDVixDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUk7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNI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