nope/lib/communication/debugEventLayer.ts
2021-03-01 15:33:59 +01:00

82 lines
2.1 KiB
TypeScript

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2021-03-01 15:05:09
* @modify date 2021-03-01 15:18:06
* @desc [description]
*/
import { EventEmitter } from "events";
import { getNopeLogger } from "../logger/getLogger";
import { ICommunicationInterface, IExternalEventMsg, IRequestTaskMsg, IResponseTaskMsg } from "../types/nope/nopeCommunication.interface";
import { EventLayer, IEmitter } from "./eventLayer";
const METHODS: Array<keyof ICommunicationInterface> = [
"onAurevoir",
"onBonjour",
"onNewInstanceGeneratorsAvailable",
"onNewInstancesAvailable",
"onNewObservablesAvailable",
"onNewServicesAvailable",
"onTaskCancelation",
"onStatusUpdate"
];
export class DebuggedEventLayer extends EventLayer {
constructor(
_emitter: IEmitter = new EventEmitter(),
subscriptionMode: "individual" | "generic" = "individual",
resultSharing: "individual" | "generic" = "individual",
_logger = getNopeLogger("debug-layer", "debug")
) {
super(_emitter,subscriptionMode,resultSharing,_logger);
const _this = this;
for (const method of METHODS){
this._emitter[method]((data) => {
if (_this._logger){
_this._logger.debug(method,data);
}
});
}
}
async onEvent(
event: string,
cb: (data: IExternalEventMsg) => void
): Promise<void> {
this._on("event_" + event, cb);
if (this._logger){
const _this = this;
this._on("event_" + event, (data) => {
_this._logger.debug("received event", data);
});
}
}
async onRpcRequest(
name: string,
cb: (data: IRequestTaskMsg) => void
): Promise<void> {
this._on(name, cb);
if (this._logger){
const _this = this;
this._on(name, (data) => {
_this._logger.debug("onRpcRequest",name, data);
});
}
}
async onRpcResponse(
name: string,
cb: (result: IResponseTaskMsg) => void
): Promise<void> {
this._on(name, cb);
if (this._logger){
const _this = this;
this._on(name, (data) => {
_this._logger.debug("onRpcResponse",name, data);
});
}
}
}