/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2021-03-01 15:05:09 * @modify date 2021-03-01 17:42:12 * @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 = [ "onAurevoir", "onBonjour", "onNewInstanceGeneratorsAvailable", "onNewInstancesAvailable", "onNewObservablesAvailable", "onNewServicesAvailable", "onTaskCancelation", ]; export class DebuggedEventLayer extends EventLayer { constructor( _emitter: IEmitter = new EventEmitter(), subscriptionMode: "individual" | "generic" = "individual", resultSharing: "individual" | "generic" = "individual", _logger = getNopeLogger("debug-layer", "info") ) { super(_emitter,subscriptionMode,resultSharing,_logger); const _this = this; // We Subscribe to the defined methods, we want to listen. for (const method of METHODS){ this[method as any]((data) => { if (_this._logger){ _this._logger.debug(method,data); } }); } } async onEvent( event: string, cb: (data: IExternalEventMsg) => void ): Promise { this._on("event_" + event, cb); if (this._logger){ const _this = this; this._on("event_" + event, (data) => { _this._logger.debug("received event on", event, data); }); } } async onRpcRequest( name: string, cb: (data: IRequestTaskMsg) => void ): Promise { this._on(name, cb); if (this._logger){ const _this = this; this._on(name, (data) => { _this._logger.debug("received rpc request",name, data); }); } } async onRpcResponse( name: string, cb: (result: IResponseTaskMsg) => void ): Promise { this._on(name, cb); if (this._logger){ const _this = this; this._on(name, (data) => { _this._logger.debug("received rpc response",name, data); }); } } }