

/**
 * 事件分发者
 */
export default interface IEventDispatcher{

    /**
     * 添加事件
     * @param key 
     * @param caller 
     * @param func 
     * @param priority 优先级 数字越小优先级越高 
     */
    AddEvent(key:string,caller:any,func:Function,priority?:number):void;

    /**
     * 删除事件监听
     * @param key 
     * @param caller 
     * @param func 
     */
    RemoveEvent(key:string,caller:any,func:Function):void;

    /**
     * 删除指定对象所有的事件处理
     * @param caller 
     */
    RemoveEventByCaller(caller:any):void;

    /**
     * 删除所有事件监听
     */
    RemoveAllEvent():void;

    /**
     * 派发事件
     * @param key 
     * @param data 
     */
    DispatchEvent(key:string,data?:any):void;

    /**
     * 是否有事件监听
     * @param key 
     */
    HasEvent(key:string):boolean;

    /**
     * 是否包含指定函数事件监听
     * @param key 
     * @param caller 
     * @param func 
     */
    HasEventHandler(key:string,caller:any,func:Function):boolean;
}
