/**
 * @author Martin Karkowski
 * @email m.karkowski@zema.de
 * @create date 2021-03-22 19:03:15
 * @modify date 2022-01-10 15:56:50
 * @desc [description]
 */
import { ILogger } from "js-logger";
import { EventnameToEventType, ICommunicationInterface, IEmitter } from "../../types/nope";
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 declare class EventCommunicationInterface implements ICommunicationInterface {
    protected _emitter: IEmitter;
    protected _logger?: ILogger;
    readonly receivesOwnMessages: boolean;
    /**
     * 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<T extends keyof EventnameToEventType>(eventname: T, cb: (data: EventnameToEventType[T]) => void): Promise<void>;
    /**
     * 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<T extends keyof EventnameToEventType>(eventname: T, data: EventnameToEventType[T]): Promise<void>;
    /**
     * Flag, showing whether the Mirror is connected or not.
     *
     * @type {INopeObservable<boolean>}
     * @memberof EventMirror
     */
    connected: INopeObservable<boolean>;
    dispose(): Promise<void>;
    /**
     * 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(_emitter?: IEmitter, _logger?: ILogger, receivesOwnMessages?: boolean);
    detailListeners(type: "event" | "rpc" | "data" | "response", listeners: string[]): void;
    id: string;
}
