/// TRTCCallingDelegate回调事件
enum TRTCCallingDelegate {
  /// 错误回调,表示 SDK 不可恢复的错误,一定要监听并分情况给用户适当的界面提示
  ///
  /// 参数param:
  ///
  /// errCode	错误码
  ///
  /// errMsg	错误信息
  ///
  /// extraInfo	扩展信息字段,个别错误码可能会带额外的信息帮助定位问题
  onError,

  /// 警告回调,用于告知您一些非严重性问题,例如出现卡顿或者可恢复的解码失败。
  ///
  /// 参数param:
  ///
  /// warningCode	错误码
  ///
  /// warningMsg	警告信息
  ///
  /// extraInfo	扩展信息字段,个别警告码可能会带额外的信息帮助定位问题
  onWarning,

  ///本地进房
  ///
  /// 如果加入成功,result 会是一个正数(result > 0),代表加入房间的时间消耗,单位是毫秒(ms)。
  ///
  /// 如果加入失败,result 会是一个负数(result < 0),代表进房失败的错误码。
  ///
  /// 参数param:
  ///
  /// result > 0 时为进房耗时(ms),result < 0 时为进房错误码
  onEnterRoom,

  /// 有用户加入当前房间。
  ///
  /// 参数param:
  ///
  /// userId	用户标识
  onUserEnter,

  /// 有用户离开当前房间。
  ///
  /// 参数param:
  ///
  /// userId	用户标识
  ///
  /// reason	离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。
  onUserLeave,

  /*
  * 正在IM群组通话时,如果其他与会者邀请他人,会收到此回调
  * 例如 A-B-C 正在IM群组中,A邀请[D、E]进入通话,B、C会收到[D、E]的回调
  * 如果此时 A 再邀请 F 进入群聊,那么B、C会收到[D、E、F]的回调
  * @param userIdList 邀请群组
  */
  onGroupCallInviteeListUpdate,

  /*
  * 被邀请通话回调
  * @param sponsor 邀请者
  * @param userIdList 同时还被邀请的人
  * @param isFromGroup 是否IM群组邀请
  * @param callType 邀请类型 1-语音通话,2-视频通话
  */
  onInvited,

  /*
   * 1. 在C2C通话中,只有发起方会收到拒绝回调
   * 例如 A 邀请 B、C 进入通话,B拒绝,A可以收到该回调,但C不行
   *
   * 2. 在IM群组通话中,所有被邀请人均能收到该回调
   * 例如 A 邀请 B、C 进入通话,B拒绝,A、C均能收到该回调
   * @param userId 拒绝通话的用户
   */
  onReject,

  /*
    * 1. 在C2C通话中,只有发起方会收到无人应答的回调
    * 例如 A 邀请 B、C 进入通话,B不应答,A可以收到该回调,但C不行
    *
    * 2. 在IM群组通话中,所有被邀请人均能收到该回调
    * 例如 A 邀请 B、C 进入通话,B不应答,A、C均能收到该回调
    * @param userId
    */
  onNoResp,

  /*
   * 邀请方忙线
   * @param userId 忙线用户
   */
  onLineBusy,

  /*
   * 作为被邀请方会收到,收到该回调说明本次通话被取消了
   */
  onCallingCancel,

  /*
  * 作为被邀请方会收到,收到该回调说明本次通话超时未应答
  */
  onCallingTimeout,

  /*
  * 收到该回调说明本次通话结束了
  */
  onCallEnd,

  /// 远端用户是否存在可播放的主路画面(一般用于摄像头)
  ///
  /// 当您收到 onUserVideoAvailable(userId, true) 通知时,表示该路画面已经有可用的视频数据帧到达。 此时,您需要调用 startRemoteView(userid) 接口加载该用户的远程画面。 然后,您会收到名为 onFirstVideoFrame(userid) 的首帧画面渲染回调。
  ///
  /// 当您收到 onUserVideoAvailable(userId, false) 通知时,表示该路远程画面已经被关闭,可能由于该用户调用了 muteLocalVideo() 或 stopLocalPreview()。
  ///
  /// 参数param:
  ///
  /// userId	用户标识
  ///
  /// available	画面是否开启
  onUserVideoAvailable,

  /// 远端用户是否存在可播放的主路画面(一般用于摄像头)
  ///
  /// 当您收到 onUserVideoAvailable(userId, true) 通知时,表示该路画面已经有可用的视频数据帧到达。 此时,您需要调用 startRemoteView(userid) 接口加载该用户的远程画面。 然后,您会收到名为 onFirstVideoFrame(userid) 的首帧画面渲染回调。
  ///
  /// 当您收到 onUserVideoAvailable(userId, false) 通知时,表示该路远程画面已经被关闭,可能由于该用户调用了 muteLocalVideo() 或 stopLocalPreview()。
  ///
  /// 参数param:
  ///
  /// userId	用户标识
  ///
  /// available	画面是否开启
  onUserAudioAvailable,

  /// 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量。
  ///
  /// 您可以通过调用 TRTCCloud 中的 enableAudioVolumeEvaluation 接口来开关这个回调或者设置它的触发间隔。 需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调; 如果没有人说话,则 userVolumes 为空,totalVolume 为0。
  ///
  /// 注意:userId 为本地用户 ID 时表示自己的音量,userVolumes 内仅包含正在说话(音量不为0)的用户音量信息。
  ///
  /// 参数param:
  ///
  /// userVolumes	所有正在说话的房间成员的音量,取值范围0 - 100。
  ///
  /// totalVolume	所有远端成员的总音量, 取值范围0 - 100。
  onUserVoiceVolume,

  //其他用户登录了同一账号,被踢下线
  onKickedOffline
}