From c018c5c19bccab50b24b68f3ba7ea452b67c1050 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Sun, 5 Dec 2021 00:48:24 -0800 Subject: [PATCH] sdk: listener management --- sdk/index.d.ts | 4 +++- sdk/index.js | 7 +++++++ sdk/index.ts | 10 +++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/sdk/index.d.ts b/sdk/index.d.ts index 6bc7e9315..ca6997166 100644 --- a/sdk/index.d.ts +++ b/sdk/index.d.ts @@ -1,6 +1,6 @@ export * from './types'; import { DeviceBase } from './types'; -import type { ScryptedNativeId } from './types'; +import type { ScryptedNativeId, EventListenerRegister } from './types'; import type { ScryptedInterface, ScryptedStatic, Logger, DeviceState } from './types'; export declare class ScryptedDeviceBase extends DeviceBase { nativeId?: string; @@ -26,6 +26,7 @@ export declare class MixinDeviceBase extends DeviceBase implements DeviceStat private _log; private _console; private _deviceState; + private _listeners; constructor(mixinDevice: T, mixinDeviceInterfaces: ScryptedInterface[], mixinDeviceState: DeviceState, mixinProviderNativeId: ScryptedNativeId); get storage(): Storage; get console(): Console; @@ -34,6 +35,7 @@ export declare class MixinDeviceBase extends DeviceBase implements DeviceStat */ onDeviceEvent(eventInterface: string, eventData: any): Promise; _lazyLoadDeviceState(): void; + manageListener(listener: EventListenerRegister): void; release(): void; } declare let sdk: ScryptedStatic; diff --git a/sdk/index.js b/sdk/index.js index 2d9d7e3bf..75a2b9c44 100644 --- a/sdk/index.js +++ b/sdk/index.js @@ -60,6 +60,7 @@ class MixinDeviceBase extends types_1.DeviceBase { this.mixinDevice = mixinDevice; this.mixinDeviceInterfaces = mixinDeviceInterfaces; this.mixinProviderNativeId = mixinProviderNativeId; + this._listeners = new Set(); this._deviceState = mixinDeviceState; } get storage() { @@ -85,7 +86,13 @@ class MixinDeviceBase extends types_1.DeviceBase { } _lazyLoadDeviceState() { } + manageListener(listener) { + this._listeners.add(listener); + } release() { + for (const l of this._listeners) { + l.removeListener(); + } } } exports.MixinDeviceBase = MixinDeviceBase; diff --git a/sdk/index.ts b/sdk/index.ts index 00c66ed60..cf6b56485 100644 --- a/sdk/index.ts +++ b/sdk/index.ts @@ -1,6 +1,6 @@ export * from './types' import { ScryptedInterfaceProperty, DeviceBase } from './types'; -import type { ScryptedNativeId, DeviceManager, SystemManager, MediaManager, EndpointManager } from './types'; +import type { ScryptedNativeId, DeviceManager, SystemManager, MediaManager, EndpointManager, EventListenerRegister } from './types'; import type { ScryptedInterface, ScryptedStatic, Logger, DeviceState } from './types'; export class ScryptedDeviceBase extends DeviceBase { @@ -60,6 +60,7 @@ export class MixinDeviceBase extends DeviceBase implements DeviceState { private _log: Logger; private _console: Console; private _deviceState: DeviceState; + private _listeners = new Set(); constructor(public mixinDevice: T, public mixinDeviceInterfaces: ScryptedInterface[], mixinDeviceState: DeviceState, public mixinProviderNativeId: ScryptedNativeId) { super(); @@ -95,7 +96,14 @@ export class MixinDeviceBase extends DeviceBase implements DeviceState { _lazyLoadDeviceState() { } + manageListener(listener: EventListenerRegister) { + this._listeners.add(listener); + } + release() { + for (const l of this._listeners) { + l.removeListener(); + } } }