/** @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;
}
