68 lines
1.9 KiB
TypeScript
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);
|
|
}
|
|
|
|
}
|