NIMSignalManagerProtocol.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. //
  2. // NIMSignalManagerProtocol.h
  3. // NIMLib
  4. //
  5. // Created by taojinliang on 2018/10/24.
  6. // Copyright © 2018 Netease. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @class NIMSignalingChannelDetailedInfo;
  10. @class NIMSignalingNotifyInfo;
  11. @class NIMSignalingChannelInfo;
  12. @class NIMSignalingCreateChannelRequest;
  13. @class NIMSignalingDelayChannelRequest;
  14. @class NIMSignalingCloseChannelRequest;
  15. @class NIMSignalingJoinChannelRequest;
  16. @class NIMSignalingLeaveChannelRequest;
  17. @class NIMSignalingInviteRequest;
  18. @class NIMSignalingCancelInviteRequest;
  19. @class NIMSignalingRejectRequest;
  20. @class NIMSignalingAcceptRequest;
  21. @class NIMSignalingControlRequest;
  22. @class NIMSignalingCallRequest;
  23. @class NIMSignalingAcceptJoinRequest;
  24. @class NIMSignalingMemberInfo;
  25. @class NIMSignalingQueryChannelRequest;
  26. NS_ASSUME_NONNULL_BEGIN
  27. /**
  28. * 创建频道回调
  29. *
  30. * @param error 错误信息,如果成功,error 为 nil
  31. * @param response 频道相关信息
  32. */
  33. typedef void(^NIMSignalingCreateChannelBlock)(NSError * __nullable error, NIMSignalingChannelInfo * __nullable response);
  34. /**
  35. * 加入频道回调
  36. *
  37. * @param error 错误信息,如果成功,error 为 nil
  38. * @param response 频道相关信息
  39. */
  40. typedef void(^NIMSignalingJoinChannelBlock)(NSError * __nullable error, NIMSignalingChannelDetailedInfo * __nullable response);
  41. /**
  42. * 呼叫回调
  43. *
  44. * @param error 错误信息,如果成功,error 为 nil
  45. * @param response 频道相关信息
  46. */
  47. typedef void(^NIMSignalingCallBlock)(NSError * __nullable error, NIMSignalingChannelDetailedInfo * __nullable response);
  48. /**
  49. * 接受回调
  50. *
  51. * @param error 错误信息,如果成功,error 为 nil
  52. * @param response 频道相关信息
  53. */
  54. typedef void(^NIMSignalingAcceptBlock)(NSError * __nullable error, NIMSignalingChannelDetailedInfo * __nullable response);
  55. /**
  56. * 信令操作回调
  57. *
  58. * @param error 错误信息,如果成功,error 为 nil
  59. */
  60. typedef void(^NIMSignalingOperationBlock)(NSError * __nullable error);
  61. /**
  62. * 频道查询回调
  63. *
  64. * @param error 错误信息,如果成功,error 为 nil
  65. */
  66. typedef void(^NIMSignalingQueryChannelBlock)(NSError * __nullable error, NIMSignalingChannelDetailedInfo * __nullable response);
  67. /**
  68. * 频道类型
  69. */
  70. typedef NS_ENUM(NSInteger, NIMSignalingChannelType){
  71. /**
  72. * 音频类型
  73. */
  74. NIMSignalingChannelTypeAudio = 1,
  75. /**
  76. * 视频类型
  77. */
  78. NIMSignalingChannelTypeVideo = 2,
  79. /**
  80. * 自定义类型
  81. */
  82. NIMSignalingChannelTypeCustom = 3,
  83. };
  84. /**
  85. * 信令通知事件定义类型
  86. */
  87. typedef NS_ENUM(NSInteger, NIMSignalingEventType){
  88. /**
  89. * 关闭频道
  90. */
  91. NIMSignalingEventTypeClose = 1,
  92. /**
  93. * 加入频道
  94. */
  95. NIMSignalingEventTypeJoin = 2,
  96. /**
  97. * 邀请加入频道
  98. */
  99. NIMSignalingEventTypeInvite = 3,
  100. /**
  101. * 取消邀请
  102. */
  103. NIMSignalingEventTypeCancelInvite = 4,
  104. /**
  105. * 拒绝加入频道
  106. */
  107. NIMSignalingEventTypeReject = 5,
  108. /**
  109. * 接受邀请
  110. */
  111. NIMSignalingEventTypeAccept = 6,
  112. /**
  113. * 离开频道
  114. */
  115. NIMSignalingEventTypeLeave = 7,
  116. /**
  117. * 自定义事件
  118. */
  119. NIMSignalingEventTypeContrl = 8,
  120. };
  121. /**
  122. * 通用音视频信令相关回调
  123. */
  124. @protocol NIMSignalManagerDelegate <NSObject>
  125. @optional
  126. /**
  127. 在线通知
  128. @param eventType 信令操作事件类型
  129. @param notifyResponse 信令通知回调数据
  130. @discussion 用于通知信令相关的在线通知 NIMSignalingEventType 1-8有效
  131. */
  132. - (void)nimSignalingOnlineNotifyEventType:(NIMSignalingEventType)eventType
  133. response:(NIMSignalingNotifyInfo *)notifyResponse;
  134. /**
  135. 在线多端同步通知
  136. @param eventType 信令操作事件类型:这里只有接受和拒绝
  137. @param notifyResponse 信令通知回调数据
  138. @discussion 用于通知信令相关的多端同步通知。比如自己在手机端接受邀请,PC端会同步收到这个通知 NIMSignalingEventType 5-6有效
  139. */
  140. - (void)nimSignalingMultiClientSyncNotifyEventType:(NIMSignalingEventType)eventType
  141. response:(NIMSignalingNotifyInfo *)notifyResponse;
  142. /**
  143. 离线通知
  144. @param notifyResponse 信令通知回调数据
  145. @discussion 用于通知信令相关的离线通知信息。需要用户在调用相关接口时,打开存离线的开关。如果用户已经接收消息,该通知会在服务器标记已读,之后不会再收到该消息 NIMSignalingEventType 1-7有效
  146. */
  147. - (void)nimSignalingOfflineNotify:(NSArray <NIMSignalingNotifyInfo *> *)notifyResponse;
  148. /**
  149. 频道列表同步通知
  150. @param notifyResponse 信令通知回调数据
  151. @discussion 在login或者relogin后,会通知该设备账号还未退出的频道列表,用于同步;如果没有在任何频道中,也会返回该同步通知,list为空
  152. */
  153. - (void)nimSignalingChannelsSyncNotify:(NSArray <NIMSignalingChannelDetailedInfo *> *)notifyResponse;
  154. /**
  155. 房间成员同步通知
  156. @param notifyResponse 信令通知回调数据
  157. @discussion 用于同步频道内的成员列表变更,当前该接口为定时接口,2分钟同步一次,成员有变化时才上报。
  158. 由于一些特殊情况,导致成员在离开或掉线前没有主动调用离开频道接口,使得该成员的离开没有对应的离开通知事件,由该回调接口【频道成员变更同步通知】告知用户
  159. */
  160. - (void)nimSignalingMembersSyncNotify:(NIMSignalingChannelDetailedInfo *)notifyResponse;
  161. @end
  162. /**
  163. * 通用音视频信令协议
  164. */
  165. @protocol NIMSignalManager <NSObject>
  166. /**
  167. 创建频道
  168. @param request 创建频道请求
  169. @param completion 完成回调
  170. @discussion 该接口用户创建频道,同一时刻频道名互斥,不能重复创建。但如果频道名缺省,服务器会自动分配频道id。对于频道在创建后如果没人加入,有效期2小时,当有成员加入后会自动延续频道有效期。当主动关闭频道或者最后一个成员退出后2小时后频道销毁。
  171. @discussion 错误码 200:成功 10405:房间已存在
  172. */
  173. - (void)signalingCreateChannel:(NIMSignalingCreateChannelRequest *)request
  174. completion:(nullable NIMSignalingCreateChannelBlock)completion;
  175. /**
  176. 关闭频道
  177. @param request 关闭频道请求
  178. @param completion 完成回调
  179. @discussion 该接口可以由创建者和频道内所有成员调用,无权限限制。调用该接口成功后,其他所有频道内的成员都回收到频道结束的通知,被动离开频道。此时其他成员需要调用离开接口,也不会收到别人的离开通知。
  180. @discussion 错误码 200:成功 10406:不在房间内
  181. */
  182. - (void)signalingCloseChannel:(NIMSignalingCloseChannelRequest *)request
  183. completion:(nullable NIMSignalingOperationBlock)completion;
  184. /**
  185. 加入频道
  186. @param request 加入频道请求
  187. @param completion 完成回调
  188. @discussion 错误码 200:成功 10407:已经房间内 10420:已经在房间内(自己的其他端) 10419:房间人数超限 10417:uid冲突
  189. */
  190. - (void)signalingJoinChannel:(NIMSignalingJoinChannelRequest *)request
  191. completion:(nullable NIMSignalingJoinChannelBlock)completion;
  192. /**
  193. 离开频道
  194. @param request 离开频道请求
  195. @param completion 完成回调
  196. @discussion 该接口用于自己退出频道,但不对频道进行销毁
  197. @discussion 错误码 200:成功 10406:不在房间内
  198. */
  199. - (void)signalingLeaveChannel:(NIMSignalingLeaveChannelRequest *)request
  200. completion:(nullable NIMSignalingOperationBlock)completion;
  201. /**
  202. 邀请加入频道
  203. @param request 邀请加入频道请求
  204. @param completion 完成回调
  205. @discussion 该接口用于邀请对方加入频道,邀请者必须是创建者或者是频道中成员。如果需要对离线成员邀请,可以打开离线邀请开关并填写推送信息。被邀请者在线后通过离线通知接收到该邀请,并通过房间信息中的invalid_字段判断房间的有效性,也可以对所有离线消息处理后判断该邀请是否被取消。
  206. @discussion 错误码 200:成功 10404:房间不存在 10406:不在房间内(自己)10407:已经房间内(对方)10419:房间人数超限 10201:对方云信不在线 10202:对方推送不可达
  207. */
  208. - (void)signalingInvite:(NIMSignalingInviteRequest *)request
  209. completion:(nullable NIMSignalingOperationBlock)completion;
  210. /**
  211. 取消邀请
  212. @param request 取消邀请请求
  213. @param completion 完成回调
  214. @discussion 错误码 200:成功 10404:房间不存在 10408:邀请不存在或已过期 10409:邀请已经拒绝 10410:邀请已经接受
  215. */
  216. - (void)signalingCancelInvite:(NIMSignalingCancelInviteRequest *)request
  217. completion:(nullable NIMSignalingOperationBlock)completion;
  218. /**
  219. 拒绝邀请
  220. @param request 拒绝邀请请求
  221. @param completion 完成回调
  222. @discussion 拒绝邀请后用户也可以通过加入频道接口加入频道,接口的使用由用户的业务决定
  223. @discussion 错误码 200:成功 10404:房间不存在 10408:邀请不存在或已过期 10409:邀请已经拒绝 10410:邀请已经接受
  224. */
  225. - (void)signalingReject:(NIMSignalingRejectRequest *)request
  226. completion:(nullable NIMSignalingOperationBlock)completion;
  227. /**
  228. 接受邀请
  229. @param request 接受邀请请求
  230. @param completion 完成回调
  231. @discussion 接受频道接口
  232. 不开自动加入开关:该接口只接受邀请并告知邀请者,并同步通知自己的其他在线设备,但不会主动加入频道,需要单独调用加入接口
  233. 打开自动加入开关:该接口为组合接口,等同于先调用接受邀请,成功后再加入房间。
  234. @discussion 错误码 200:成功 10404:房间不存在 10408:邀请不存在或已过期 10409:邀请已经拒绝 10410:邀请已经接受 10407:已经房间内 10420:已经在房间内(自己的其他端) 10419:房间人数超限 10417:uid冲突
  235. */
  236. - (void)signalingAccept:(NIMSignalingAcceptRequest *)request
  237. completion:(nullable NIMSignalingAcceptBlock)completion;
  238. /**
  239. 自定义控制指令
  240. @param request 自定义控制指令请求
  241. @param completion 完成回调
  242. @discussion 该接口用于在频道中透传一些自定义指令,协助频道管理。该接口允许非频道内成员调用,但接收者必须是频道内成员或创建者
  243. @discussion 错误码 200:成功 10404:房间不存在 10406:不在房间内(自己或者对方)
  244. */
  245. - (void)signalingControl:(NIMSignalingControlRequest *)request
  246. completion:(nullable NIMSignalingOperationBlock)completion;
  247. /**
  248. 呼叫
  249. @param request 呼叫请求
  250. @param completion 完成回调
  251. @discussion 用于用户新开一个频道并邀请对方加入频道,该接口为组合接口,等同于用户先创建频道,成功后加入频道并邀请对方
  252. @discussion 错误码 200:成功 10405:房间已存在 10201:对方云信不在线 10202:对方推送不可达。该接口是用户呼叫场景的组合接口封装,调用该接口,sdk底层分别会 创建、加入、邀请,再返回用户结果,其中任何一步失败,就返回失败(其中邀请返回10201和10202,认为是成功,返回码还是10201和10202给上层),失败时,sdk需要主动close。常用于但不限于点对点呼叫发起。
  253. @discussion error的错误码为10201和10202时,返回的房间信息时有效的,需要用户主动close房间
  254. */
  255. - (void)signalingCall:(NIMSignalingCallRequest *)request
  256. completion:(nullable NIMSignalingCallBlock)completion;
  257. /**
  258. 查询频道信息
  259. @param request 查询请求
  260. @param completion 完成回调
  261. */
  262. - (void)signalingQueryChannelInfo:(NIMSignalingQueryChannelRequest *)request
  263. completion:(nullable NIMSignalingQueryChannelBlock)completion;
  264. /**
  265. * 添加通知对象
  266. *
  267. * @param delegate 通知对象
  268. */
  269. - (void)addDelegate:(id<NIMSignalManagerDelegate>)delegate;
  270. /**
  271. * 移除通知对象
  272. *
  273. * @param delegate 通知对象
  274. */
  275. - (void)removeDelegate:(id<NIMSignalManagerDelegate>)delegate;
  276. @end
  277. NS_ASSUME_NONNULL_END