81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
/**
|
|
* @author Martin Karkowski
|
|
* @email m.karkowski@zema.de
|
|
* @create date 2021-03-22 19:03:15
|
|
* @modify date 2021-04-09 08:30:55
|
|
* @desc [description]
|
|
*/
|
|
|
|
import EventEmitter from "events";
|
|
import * as Logger from "js-logger";
|
|
import { ILogger } from "js-logger";
|
|
import { NopeObservable } from "../../observables/nopeObservable";
|
|
import {
|
|
ICommunicationMirror,
|
|
IEmitter,
|
|
ValidEventTypesOfMirror
|
|
} from "../../types/nope/nopeCommunication.interface";
|
|
import { INopeObservable } from "../../types/nope/nopeObservable.interface";
|
|
|
|
/**
|
|
* A Basic Mirror, used to share the events in a Mirror Style.
|
|
* This Layer should not be used directly. this should only
|
|
* be extended.
|
|
*
|
|
* @export
|
|
* @class EventMirror
|
|
* @implements {ICommunicationMirror}
|
|
*/
|
|
export class EventMirror implements ICommunicationMirror {
|
|
/**
|
|
* Function which will be used to subscribe Data
|
|
*
|
|
* @param {(symbol | ValidEventTypesOfMirror)} event The Event to listen to
|
|
* @param {(...args: any[]) => void} listener The "Listener" (A Callback, which will be called)
|
|
* @memberof EventMirror
|
|
*/
|
|
on(
|
|
event: symbol | ValidEventTypesOfMirror,
|
|
listener: (...args: any[]) => void
|
|
): void {
|
|
this._emitter.on(event, listener);
|
|
if (event !== "StatusUpdate" && this._logger?.enabledFor(Logger.DEBUG)) {
|
|
this._emitter.on(event, (...args) => {
|
|
this._logger.debug("received", "'" + event.toString() + "'", ...args);
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function, which will be used to emit data
|
|
*
|
|
* @param {ValidEventTypesOfMirror} event the name fo the event to emit something
|
|
* @param {*} data the data to emit
|
|
* @memberof EventMirror
|
|
*/
|
|
emit(event: ValidEventTypesOfMirror, data: any): void {
|
|
this._emitter.emit(event, data);
|
|
}
|
|
|
|
/**
|
|
* Flag, showing whether the Mirror is connected or not.
|
|
*
|
|
* @type {INopeObservable<boolean>}
|
|
* @memberof EventMirror
|
|
*/
|
|
connected: INopeObservable<boolean>;
|
|
|
|
/**
|
|
* Creates an instance of EventMirror.
|
|
* @param {IEmitter} [_emitter=new EventEmitter() as any] The Type of Emitter to use.
|
|
* @param {ILogger} [_logger] a Logger
|
|
* @memberof EventMirror
|
|
*/
|
|
constructor(
|
|
protected _emitter: IEmitter = new EventEmitter() as any,
|
|
protected _logger?: ILogger
|
|
) {
|
|
this.connected = new NopeObservable<boolean>();
|
|
}
|
|
}
|