@pmouli/isy-matter-server
Version:
Service to expose an ISY device as a Matter Border router
57 lines (42 loc) • 1.86 kB
text/typescript
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()];
}*/
}