import { IReceiveId, SID, IRoute, IRspData } from './IConnector';
import Application from '../application';
export interface IPushScheduler {
    /**
     * Component lifecycle callback
     */
    start(): void;
    /**
     * Component lifecycle function
     * @return {void}
     */
    stop(): void;
    /**
     * 调度发生时调用
     */
    schedule(route: IRoute, data: IRspData, receiveIds: IReceiveId[], opts: IScheduleOpts): void;
}
export interface IBroadcastOpts {
    binded?: boolean;
    filterParam?: any;
}
export interface IScheduleOpts {
    type?: 'broadcast' | 'response';
    userOptions?: IBroadcastOpts;
}
export declare type IPushSelector = (route: string, msg: any, sids: SID[], opts: any) => number;
export declare type IPushSchedulerOrCtor = {
    new (app: Application, opts?: any): IPushScheduler;
} | IPushScheduler;
export interface SinglePushScheduler {
    scheduler?: IPushSchedulerOrCtor;
}
export interface MultiPushSchedulerOptions {
    scheduler?: {
        id: number;
        scheduler: IPushSchedulerOrCtor;
        options: IPushSchedulerOptions;
    }[];
    selector?: IPushSelector;
}
export declare type IPushSchedulerOptions = SinglePushScheduler | MultiPushSchedulerOptions;
