nope/lib/dispatcher/nopeDispatcher.ts

68 lines
1.9 KiB
TypeScript

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2020-10-12 18:52:00
* @modify date 2021-10-19 09:15:25
* @desc [description]
*/
import { comparePatternAndPath } from "../helpers/pathMatchingMethods";
import {
IEventAdditionalData,
INopeDispatcher
} from "../types/nope/index";
import { NopeCore } from "./Core";
/**
* A Dispatcher to perform a function on a Remote
* Dispatcher. Therefore a Task is created and forwarded
* to the remote.
*
* @export
* @class nopeDispatcher
*/
export class NopeDispatcher extends NopeCore implements INopeDispatcher {
public get isMaster(): boolean {
return false;
}
setPropertyData<T>(pattern: string, data: T): boolean {
throw new Error("Method not implemented.");
}
getPropertyData<T>(pattern: string): T {
return this.propertyDistributor.pullData<T>(pattern)
}
subscribeToEvent(eventName: string, callback: any): void {
return this.eventDistributor.registerSubscription(eventName, callback)
}
emitEvent<T>(eventName: string, data: T, options: Partial<IEventAdditionalData> = {}) {
this.eventDistributor.emit(eventName, data, options)
}
query(pattern: string, type: "instances" | "services" | "properties" | "events"): string[] {
let items: string[] = []
switch (type) {
case "instances":
items = this.instanceManager.instances.data.getContent().map(item => item.identifier);
break;
case "services":
items = this.rpcManager.services.data.getContent();
break;
case "properties":
items = this.propertyDistributor.publishers.data.getContent();
break;
case "events":
items = this.eventDistributor.publishers.data.getContent();
break;
default:
throw Error("Invalid Type-Parameter")
}
return items.filter(item => comparePatternAndPath(pattern, item).affected);
}
}