/*! Copyright (c) 2018 Siemens AG. Licensed under the MIT License. */ import { BehaviorSubject, Subject } from "rxjs"; import { Observation, Sensor, Thing } from "./objects"; import { ThingObserverController } from "./thing-observer-controller"; /** * Represents change information when sensors are registered or deregistered. */ export interface RegisteredSensorsChangeInfo { /** * New sensors that have been added. */ added: Array>; /** * Previously added sensors that have been removed. */ removed: Array>; /** * Existing sensors that have been readvertised (some properties might have changed). */ changed: Array>; /** * The current sensors after changes have been applied. */ total: Array>; } /** * A convenience controller that observes things and associated sensor and * observation objects, combining the functionality of `ThingObserverController` * and `SensorObserverController`. * * This controller is designed to be used by a client that wants to easily * handle sensor-related events as well as sensor observations. */ export declare class ThingSensorObservationObserverController extends ThingObserverController { private _sensorObserverController; private _thingOnlineSubscription; private _thingOfflineSubscription; private _sensorSubscriptions; private _observationSubscriptions; private _registeredSensors; private _registeredSensorsChangeInfo$; private _sensorObservation$; private _thingFilter; private _sensorFilter; onInit(): void; onCommunicationManagerStarting(): void; onCommunicationManagerStopping(): void; /** * Gets an Observable emitting information about changes in the currently * registered sensors. * * Registered sensor objects are augmented by a property `thing` which * references the associated `Thing` object. * * Emitted sensor objects are read-only. If you need to modify one, e.g. to * delete the `thing` property, clone the object first (using `clone()` * function in `@coaty/core`). */ get registeredSensorsChangeInfo$(): BehaviorSubject; /** * Gets an Observable emitting incoming observations on registered sensors. */ get sensorObservation$(): Subject<{ obs: Observation; sensor: Sensor; }>; /** * Sets a filter predicate that determines whether an observed thing is * relevant and should be registered with the controller. * * The filter predicate should return `true` if the passed-in thing is * relevant; `false` otherwise. * * By default, all observed things are considered relevant. * * @param thingFilter a filter predicate for things */ set thingFilter(thingFilter: (thing: Thing) => boolean); /** * Sets a filter predicate that determines whether an observed sensor is * relevant and should be registered with the controller. * * The filter predicate should return `true` if the passed-in sensor is * relevant; `false` otherwise. * * By default, all observed sensors of all relevant things are considered * relevant. * * @param sensorFilter a filter predicate for sensors */ set sensorFilter(sensorFilter: (sensor: Sensor, thing: Thing) => boolean); private _observeThings; private _onThingReceived; private _onSensorReceived; private _observeObservations; private _onDeadvertised; }