UNPKG

@pmouli/isy-matter-server

Version:

Service to expose an ISY device as a Matter Border router

57 lines (42 loc) 1.86 kB
import { Behavior } from '@matter/node'; import type { Family } from 'isy-nodejs/Definitions/Global/Families'; import type { ISYDevice } from 'isy-nodejs/ISYDevice'; import { Factory } from 'isy-nodejs/Utils'; import { Registry } from 'isy-nodejs/Registry'; export namespace BehaviorRegistry { const registry = new Registry<string, Behavior.Type>(); export function register<T extends Behavior.Type, F extends Family>( behavior: T & { cluster: { name: string }; factory?: Factory<any> }, family?: keyof typeof Family ): void { if (family) { registry.register(behavior.cluster.name.toLowerCase(), behavior, family); return; } registry.register(behavior.cluster.name.toLowerCase(), behavior, behavior.factory as any); } export function get<T extends ISYDevice.Any>(node: T, cluster: string): Behavior.Type { return registry.get(node, cluster.toLowerCase()); } /*const registry: {[x:string]: Behavior.Type} = {}; const nodeLevelRegistry: {[x:string]: {[x:string]: Behavior.Type}} = {}; register<T extends Behavior.Type>(behavior: T & {cluster: {name: string}, nodeClass: {nodeDefId}} ): void { registry[behavior.cluster.name.toLowerCase()] = behavior; nodeLevelRegistry[behavior.nodeClass.nodeDefId] = nodeLevelRegistry[behavior. nodeClass.nodeDefId] ?? {}; nodeLevelRegistry[behavior.nodeClass.nodeDefId][behavior.cluster.name.toLowerCase()] = behavior; } function get(nodeClass: typeof ISYNode, cluster: string): Behavior.Type { if(nodeLevelRegistry[nodeClass.nodeDefId]) return nodeLevelRegistry[nodeClass.nodeDefId][cluster.toLowerCase()]; else for (const nodeDefId in NodeFactory.getImplements(nodeClass)) { if(nodeLevelRegistry[nodeDefId][cluster.toLowerCase()]) return nodeLevelRegistry[nodeDefId][cluster.toLowerCase()]; } return registry[cluster.toLowerCase()]; }*/ }