/** @module commands */
import { IEvent } from './IEvent';
import { Parameters } from '../run/Parameters';
/**
 * An interface for listener objects that receive notifications on fired events.
 *
 * @see [[IEvent]]
 * @see [[Event]]
 *
 * ### Example ###
 *
 *     export class MyListener implements IEventListener {
 *         private onEvent(correlationId: string, event: IEvent, args: Parameters): void {
 *             console.log("Fired event " + event.getName());
 *         }
 *     }
 *
 *     let event = new Event("myevent");
 *     event.addListener(new MyListener());
 *     event.notify("123", Parameters.fromTuples("param1", "ABC"));
 *
 *     // Console output: Fired event myevent
 */
export interface IEventListener {
    /**
     * A method called when events this listener is subscrubed to are fired.
     *
     * @param event 			a fired evemt
     * @param correlationId 	(optional) transaction id to trace execution through call chain.
     * @param args 			    event arguments.
     */
    onEvent(correlationId: string, event: IEvent, args: Parameters): void;
}
