import { SignalControllerChannelInfo, SignalControllerCallingStatus, SignalControllerCallParams, SignalControllerEvents } from './types'; import EventEmitter from 'eventemitter3'; import V2NIM from 'nim-web-sdk-ng'; declare class SignalController extends EventEmitter { callStatus: SignalControllerCallingStatus; callTimeout: number; offlineEnabled: boolean; enableAutoJoinSignalChannel: boolean; enableRecord: boolean; /** 外部占线检查:用于检查群呼是否正在进行中 */ externalBusyChecker?: () => boolean; private _nim; private _signal; private _callTimer?; private _rejectTimer?; private _channelInfo?; private _pendingChannelId?; private _stateGeneration; private _offlineInviteEvents; private _offlineCancelInviteEvents; private _offlineControlEvents; get channelInfo(): SignalControllerChannelInfo | undefined; get nimInstance(): V2NIM; /** * * @param im im实例对象 * @param kitName 上层kit名称 * @param version 上层kit版本 * @param debug 是否开启debug,输出日志 */ constructor({ nim }: { nim: V2NIM; }); call(opt: SignalControllerCallParams): Promise; accept(opt?: { nertcJoinRoomQueryParamMap?: string; }): Promise; cancel(opt?: { channelId?: string; extraString?: string; }): Promise; reject(opt?: { channelId?: string; reason?: number; extraString?: string; }): Promise; hangup(opt?: { channelId?: string; extraString?: string; duration?: number; }): Promise; hangupSilently(opt?: { channelId?: string; extraString?: string; duration?: number; }): Promise; control(opt?: { ext?: any; }): Promise; reconnect(): void; resetState(): void; destroy(): void; private _signalCallEx; /** * V10: Dispatcher for online events (replaces 6 separate old event handlers) */ private _onOnlineEvent; /** * V10: Multi-client event (replaces feature=3 branches of _signalingAccept/_signalingReject) */ private _onMultiClientEvent; /** * V10: Offline event handler (replaces feature=1 branches of _signalingInvite/_signalingCancelInvite) * * 注意:onSyncRoomInfoList 仅在用户有活跃房间时才触发(NIM SDK 内部判断 datas.length > 0)。 * 被叫未接听过任何通话时没有活跃房间,onSyncRoomInfoList 不会触发, * 若依赖它来处理离线邀请,来电会永久丢失。 * 因此在此处直接处理离线邀请,不再等待 onSyncRoomInfoList。 */ private _onOfflineEvent; /** * V10: Sync room info list (replaces _singalingSyncChannels + _onDataSync) * 兜底处理:若 onSyncRoomInfoList 触发(用户有活跃房间时),处理尚未被 _onOfflineEvent 处理的离线邀请。 */ private _onSyncRoomInfoList; /** * V10: Handle online invite event (replaces _signalingInvite case 0) */ private _handleOnlineInvite; /** * V10: Handle online accept event (replaces _signalingAccept case 0/1) */ private _handleOnlineAccept; /** * V10: Handle online reject event (replaces _signalingReject case 0) */ private _handleOnlineReject; /** * V10: Handle online cancel invite event (replaces _signalingCancelInvite case 0) */ private _handleOnlineCancelInvite; /** * V10: Handle online close event (replaces _signalingClose) */ private _handleOnlineClose; /** * V10: Handle online control event (replaces _signalingCustomCommand) */ private _handleOnlineControl; /** * 离线控制指令延迟 flush,等 channelInfo 就绪后处理(对应老代码 _flushOfflineCustomCommandEvents) */ private _flushOfflineControlEvents; /** * 接收呼叫 * V10: joinRoom() + acceptInvite() replaces joinAndAccept() */ private _signalAccept; /** * 取消呼叫中的信令 * V10: cancelInvite() with inviteeAccountId */ private _signalCancel; /** * 拒绝通话,可能通过占线、超时、主动等方式触发 * V10: rejectInvite() with inviterAccountId */ private _signalReject; /** * 关闭信令房间 * V10: closeRoom(channelId, offlineEnabled, serverExtension) */ private _signalHangup; private _signalHangupSilently; private _closeRoomAfterHangup; /** * 单人通话下,需要通知服务端退出的情况 * @param userId IM的account账号 * @param status */ private _sendMessage; /** * V10: Format SDK channel info using new field names * @param data - {channelInfo, members} from getRoomInfoByChannelName or roomInfo from call/joinRoom * @param rtcInfo - rtcInfo from call/joinRoom result (nullable) */ private _formatSDKChannelInfo; } export default SignalController;