import { HTTPConfig } from "../config/HTTPConfig";
import { IHttpRequester } from "../core/http/IHttpRequester";
import { MQTTLogic } from "../core/mqtt/MQTTLogic";
import { IControllerMQTTCallback } from "../core/mqtt/impl/IControllerMQTTCallback";
import { BindDeviceAction } from "../core/mqtt/message/BindDeviceAction";
import { SessionAction } from "../core/mqtt/message/SessionAction";
import { CastError } from "../util/CastError";
import { AccountBindDeviceVO } from "../vo/account/AccountBindDeviceVO";
import { LoginUserVO } from "../vo/account/LoginUserVO";
import { CastProtocol } from "../vo/cast/CastProtocol";
import { CastSessionVO } from "../vo/cast/CastSessionVO";
import { CastType } from "../vo/cast/CastType";
import { ControllerDeviceType } from "../vo/device/ControllerDeviceType";
import { ControllerDeviceVO } from "../vo/device/ControllerDeviceVO";
import { DevicePair } from "../vo/device/DevicePair";
import { DisplayDeviceVO } from "../vo/device/DisplayDeviceVO";
import { P2PKeyVO } from "../vo/p2p/P2PKeyVO";
import { DisplayReportVO } from "../vo/report/DisplayReportVO";
import { IControllerCallback } from "./IControllerCallback";
import { SessionDestroyReason } from '../core/mqtt/message/SessionDestroyReason';
export declare class ControllerManager implements IControllerMQTTCallback {
    private readonly TAG;
    private readonly jsonParser;
    private readonly p2pKeyFromPeer;
    private readonly httpRequestExecutor;
    private readonly cache;
    private guid;
    private mqttLogic;
    private callback;
    constructor();
    setGuid(guid: string): this;
    setCallback(callback: IControllerCallback): this;
    setHttpRequester(requester: IHttpRequester): this;
    setHttpConfig(config: HTTPConfig): this;
    setMQTTLib(mqtt: MQTTLogic): this;
    createControllerDevice(controllerDevice: ControllerDeviceVO): this;
    updateControllerType(type: ControllerDeviceType): this;
    updateNetwork(ip: string, gateway: string, mask: string): this;
    /**
     * 阻塞方法，控制终端给指定手机号发送注册/登录验证码
     * 请使用Task调用，不需要在Task中进行await，因为函数结果是通过回调触发
     * @param phoneNumber 手机号
     */
    requestVerifyCode(phoneNumber: string): Promise<boolean>;
    private subscribeAccountTopic;
    private unsubscribeAccountTopic;
    /**
     * 阻塞方法，控制终端通过手机号和短信验证码登录账号,如果账号不存在则自动注册
     * 返回值为空意味着登录失败，请检查错误信息
     * @param phoneNumber 手机号
     * @param verifyCode 短信验证码
     * @returns LoginUserVO | null 登录成功后返回用户信息，失败则返回null
     */
    login(phoneNumber: string, verifyCode: string): Promise<LoginUserVO | null>;
    /**
     * 阻塞方法，控制终端登录账号后，将access token存储下来，每次启动如果本地有access token，则调用此方法
     * 此方法如果未正常返回，则说明需要通过UI引导用户重新登录，刷新access token
     * 返回值为空意味着刷新失败，请检查错误信息
     * @param accessToken: 控制端登录账号成功后拿到的唯一令牌
     * @returns LoginUserVO | null 登录成功后返回用户信息，失败则返回null
     */
    refresh(accessToken: string): Promise<LoginUserVO | null>;
    /**
     * 阻塞方法，控制终端登录账号后，退出登录此账号
     * @param user: 已登录账号的用户信息
     * @returns boolean 退出成功返回true，否则返回false
     */
    logout(user: LoginUserVO): Promise<boolean>;
    /**
     * 阻塞方法，控制终端注销指定账号（已登录的账号）
     * @param user: 已登录账号的用户信息
     * @returns boolean 注销成功返回true，否则返回false
     */
    unRegister(user: LoginUserVO): Promise<boolean>;
    /**
     * 阻塞方法，控制终端登录账号后，获取此账号下所有已绑定的显示设备
     * @param accessToken: 控制端登录账号成功后拿到的唯一令牌
     * @returns AccountBindDeviceVO[] | null 已绑定的显示设备列表，失败则返回null
     */
    getAllBoundDevices(accessToken: string): Promise<AccountBindDeviceVO[] | null>;
    /**
     * 阻塞方法，控制终端登录账号后，对指定显示终端与本账号建立绑定关系
     * @param accessToken: 控制端登录账号成功后拿到的唯一令牌
     * @param displayDeviceId 显示终端设备ID
     * @param alias 显示终端设备别名
     * @returns AccountBindDeviceVO | null 绑定的显示设备，失败则返回null
     */
    bindDisplay(displayDeviceId: string, alias: string, accessToken: string): Promise<AccountBindDeviceVO | null>;
    /**
     * 阻塞方法，控制终端登录账号后，对指定的已绑定的显示设备进行更新，更新其别名（UI展示名称）
     * @param accessToken: 控制端登录账号成功后拿到的唯一令牌
     * @param alias 显示终端设备别名
     * @param displayDeviceId 显示终端设备ID
     * @returns AccountBindDeviceVO | null 绑定的显示设备，失败则返回null
     */
    updateBindDisplayAlias(displayDeviceId: string, alias: string, accessToken: string): Promise<AccountBindDeviceVO | null>;
    /**
     * 阻塞方法，控制终端登录账号后，解除指定显示终端与此账号之间的绑定关系
     * @param accessToken: 控制端登录账号成功后拿到的唯一令牌
     * @param displayDeviceId 显示终端设备ID
     * @returns 解除绑定成功返回true，失败则返回false
     */
    unBindDisplay(displayDeviceId: string, accessToken: string): Promise<boolean>;
    connectDisplay(displayCode: number): Promise<DevicePair | null>;
    disconnectDisplay(displayCode: number): Promise<DisplayDeviceVO | null>;
    createCastSession(castType: CastType, protocol: CastProtocol, accessToken?: string): Promise<CastSessionVO | null>;
    /**
     * 投屏会话接收端通知发送端自己已经做好准备，发送端可以准备开始往指定的投屏会话推流
     * 会触发发送端的 onReadyToPush 函数
     * @param sessionId 要推流的投屏会话id
     */
    readyToPush(sessionId: number): void;
    startPush(sessionId: number, mediaPayload: string): void;
    stopPush(sessionId: number): void;
    private generateMediaPayload;
    private sendCastSessionMessage;
    /**
     * 主动销毁投屏会话，携带销毁原因
     * @param sessionId 试图销毁的投屏会话id
     * @param reason 销毁原因，可选
     * @returns 如果会话成功被销毁则返回会话数据类，否则返回null
     */
    destroyCastSession(sessionId: number, reason?: SessionDestroyReason): Promise<CastSessionVO | null>;
    destroyAllCastSessions(): Promise<void>;
    /**
     * 阻塞方法，控制终端主动告知显示端，当前投屏会话出现异常需要处理（停推、停收、销毁）
     * @param sessionId 异常投屏会话id
     * @param error 异常原因
     */
    castSessionError(sessionId: number, error: string | CastError): void;
    sendPrivateData(data: string): void;
    getP2PKey(): P2PKeyVO | null;
    onServerDied(): void;
    onDisplayDied(): void;
    onMySelfDisconnected(cause: string): void;
    onDisplayReport(report: DisplayReportVO): void;
    onCastSession(session: CastSessionVO, action: SessionAction, mediaPayload: string, reason?: SessionDestroyReason): void;
    private readonly isValidMyDataType;
    onUserHasBeenKicked(user: LoginUserVO): void;
    onAccountBindDevice(accountBindDevice: AccountBindDeviceVO, action: BindDeviceAction): void;
}
//# sourceMappingURL=ControllerManager.d.ts.map