import { IEventListener } from './IEventListener';
import { INotifiable } from '../run/INotifiable';
/**
 * An interface for Events, which are part of the Command design pattern.
 * Events allows to send asynchronious notifications to multiple subscribed listeners.
 *
 * @see [[IEventListener]]
 */
export interface IEvent extends INotifiable {
    /**
     * Gets the event name.
     *
     * @returns the name of the event.
     */
    getName(): string;
    /**
     * Gets all subscribed listeners.
     *
     * @returns a list of listeners.
     */
    getListeners(): IEventListener[];
    /**
     * Adds a listener to receive notifications for this event.
     *
     * @param listener      the listener reference to add.
     */
    addListener(listener: IEventListener): void;
    /**
     * Removes a listener, so that it no longer receives notifications for this event.
     *
     * @param listener      the listener reference to remove.
     */
    removeListener(listener: IEventListener): void;
}
