|
|
|
import { ConnectionState } from "./ConnectionState";
|
|
|
|
import { SprinklersDevice } from "./SprinklersDevice";
|
|
|
|
|
|
|
|
export abstract class SprinklersRPC {
|
|
|
|
abstract readonly connectionState: ConnectionState;
|
|
|
|
abstract readonly connected: boolean;
|
|
|
|
|
|
|
|
abstract start(): void;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Acquires a reference to a device. This reference must be released by calling
|
|
|
|
* SprinklersDevice#release for every time this method was called
|
|
|
|
* @param id The id of the device
|
|
|
|
*/
|
|
|
|
acquireDevice(id: string): SprinklersDevice {
|
|
|
|
const device = this.getDevice(id);
|
|
|
|
device.acquire();
|
|
|
|
return device;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces a device to be released. The device will no longer be updated.
|
|
|
|
*
|
|
|
|
* This should not be used normally, instead SprinklersDevice#release should be called to manage
|
|
|
|
* each reference to a device.
|
|
|
|
* @param id The id of the device to remove
|
|
|
|
*/
|
|
|
|
abstract releaseDevice(id: string): void;
|
|
|
|
|
|
|
|
protected abstract getDevice(id: string): SprinklersDevice;
|
|
|
|
}
|