import { SessionDestroyReason } from "../core/mqtt/message/SessionDestroyReason";
import { CastError } from "../util/CastError";
import { AccountBindDeviceVO } from "../vo/account/AccountBindDeviceVO";
import { LoginUserVO } from "../vo/account/LoginUserVO";
import { CastSessionVO } from "../vo/cast/CastSessionVO";
import { ControllerDeviceVO } from "../vo/device/ControllerDeviceVO";
import { DisplayDeviceVO } from "../vo/device/DisplayDeviceVO";
import { DisplayReportVO } from "../vo/report/DisplayReportVO";
export interface IControllerCallback {
    /**
     * 收到自身MQTT断连，说明与MQTT集群断开连接
     */
    onMySelfDisconnected(cause: string): void;
    /**
     * 控制端成功连接到给定显示终端，已做好消息监听后回调
     * @param displayDevice 云端返回的已连接的显示终端信息
     * @param controllerDevice 云端返回的成功连接的控制终端信息
     */
    onDisplayConnected(displayDevice: DisplayDeviceVO, controllerDevice: ControllerDeviceVO): void;
    /**
     * 控制端成功断开给定显示终端，移除消息监听后回调
     * @param displayDevice 云端返回的已断开连接的显示终端信息
     */
    onDisplayDisconnected(displayDevice: DisplayDeviceVO): void;
    /**
     * 显示终端下线通知，控制终端应终止并销毁相关联会话，返回初始状态
     * 注意，此通知仅当控制端已经连接了一个显示端时，才有可能触发
     * @param displayDevice 下线的显示设备信息
     */
    onDisplayOffline(displayDevice: DisplayDeviceVO): void;
    /**
     * 显示终端信息（名称、网络等）变更，告知控制终端可供刷新UI
     * @param displayReport 显示终端信息
     */
    onDisplayReport(displayReport: DisplayReportVO): void;
    /**
     * 云端通知有新的投屏会话建立
     * @param castSession 已创建成功的投屏会话信息
     */
    onCastSessionCreate(castSession: CastSessionVO): void;
    /**
     * 收到此回调后，在此回调内进行三方音视频SDK的配置，让三方音视频SDK开始工作
     * 三方音视频SDK开始工作后，在此回调内调用SDK提供的push接口告知对端正式开始推流
     * @param castSession 当前投屏会话信息
     * @param mediaPayload 投屏媒体数据，比如：文档投屏的http地址，NRTC的channel name，P2P的各类密钥
     */
    onReadyToPush(castSession: CastSessionVO, mediaPayload: string): void;
    /**
     * 对端已经开始推流，本端判断投屏会话的具体类别、协议类型，决策使用何种三方音视频SDK启动拉流并渲染上屏
     * @param castSession 当前投屏会话信息
     * @param mediaPayload 投屏媒体数据，比如：文档投屏的http地址，NRTC的channel name，P2P的各类密钥
     */
    onCastSessionPushStart(castSession: CastSessionVO, mediaPayload: string): void;
    /**
     * 对端已经结束推流，本端应结束渲染上屏
     * @param castSession 当前投屏会话信息
     */
    onCastSessionPushEnd(castSession: CastSessionVO): void;
    /**
     * 云端通知此投屏会话已彻底结束，本端可清理相关资源
     * 触发时机是任意一端主动销毁会话，或对端被云端判定为离线
     * @param castSession 当前投屏会话信息
     * @param reason 销毁原因，可选参数
     */
    onCastSessionDestroy(castSession: CastSessionVO, reason?: SessionDestroyReason): void;
    /**
     * 云端通知同账号下有用户被踢下线
     * 获得此通知的前提是此控制端已经成功登录了一个账号，且此账号下有用户被踢下线
     * @param user 用户信息
     */
    onUserHasBeenKicked(user: LoginUserVO): void;
    /**
     * 云端通知同账号下有绑定设备上线
     * 获得此通知的前提是此控制端已经成功登录了一个账号，且此账号下有绑定设备上线
     * 注意，此通知不论控制端是否已连接显示端，只要登录了账号，就有可能触发
     * @param accountBindDevice 账号绑定设备信息
     */
    onAccountBindDeviceOnline(accountBindDevice: AccountBindDeviceVO): void;
    /**
     * 云端通知同账号下有绑定设备离线
     * 获得此通知的前提是此控制端已经成功登录了一个账号，且此账号下有绑定设备离线
     * 注意，此通知不论控制端是否已连接显示端，只要登录了账号，就有可能触发
     * @param accountBindDevice 账号绑定设备信息
     */
    onAccountBindDeviceOffline(accountBindDevice: AccountBindDeviceVO): void;
    /**
     * 内部执行出现异常时的回调
     * @param msg 异常信息
     * @deprecated 已废弃，请使用 onError(error: CastError)
     */
    onError(msg: string): void;
    /**
     * 内部执行出现异常时的回调
     * @param error 异常信息
     */
    onError(error: CastError): void;
}
//# sourceMappingURL=IControllerCallback.d.ts.map