nope/lib/communication/mirrors/eventMirror.ts

91 lines
2.5 KiB
TypeScript
Raw Normal View History

2021-03-22 19:24:15 +00:00
/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2021-03-22 19:03:15
2021-10-19 08:01:00 +00:00
* @modify date 2021-10-19 09:10:49
2021-03-22 19:24:15 +00:00
* @desc [description]
*/
2021-08-17 15:52:46 +00:00
import { EventEmitter } from "events";
import * as Logger from "js-logger";
2021-03-22 19:24:15 +00:00
import { ILogger } from "js-logger";
2021-08-04 16:17:23 +00:00
import { NopeObservable } from "../../observables/nopeObservable";
2021-03-22 19:24:15 +00:00
import {
ICommunicationMirror,
IEmitter,
ValidEventTypesOfMirror
} from "../../types/nope/nopeCommunication.interface";
import { INopeObservable } from "../../types/nope/nopeObservable.interface";
2021-04-12 05:09:47 +00:00
/**
* 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}
*/
2021-03-22 19:24:15 +00:00
export class EventMirror implements ICommunicationMirror {
2021-04-12 05:09:47 +00:00
/**
* 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
*/
2021-03-22 19:24:15 +00:00
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);
});
}
2021-03-22 19:24:15 +00:00
}
2021-04-12 05:09:47 +00:00
/**
* 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
*/
2021-03-22 19:24:15 +00:00
emit(event: ValidEventTypesOfMirror, data: any): void {
this._emitter.emit(event, data);
}
2021-04-12 05:09:47 +00:00
/**
* Flag, showing whether the Mirror is connected or not.
*
* @type {INopeObservable<boolean>}
* @memberof EventMirror
*/
2021-03-22 19:24:15 +00:00
connected: INopeObservable<boolean>;
2021-08-17 15:52:46 +00:00
receivesOwnMessages: boolean;
2021-10-19 08:01:00 +00:00
async dispose(): Promise<void> {
// Disposes the Emitter.
(this._emitter as any)?.removeAllListeners();
}
2021-04-12 05:09:47 +00:00
/**
* 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
*/
2021-03-22 19:24:15 +00:00
constructor(
protected _emitter: IEmitter = new EventEmitter() as any,
protected _logger?: ILogger
) {
this.connected = new NopeObservable<boolean>();
2021-08-17 15:52:46 +00:00
this.connected.setContent(true);
this.receivesOwnMessages = true;
2021-03-22 19:24:15 +00:00
}
}