IMAPlatform+TCAVLive.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. //
  2. // IMAPlatform+TCAVLive.m
  3. // TCShow
  4. //
  5. // Created by AlexiChen on 16/4/12.
  6. // Copyright © 2016年 AlexiChen. All rights reserved.
  7. //
  8. #import "IMAPlatform+TCAVLive.h"
  9. #import <IMGroupExt/IMGroupExt.h>
  10. @implementation IMAPlatform (TCAVLive)
  11. - (void)asyncExitHistoryAVChatRoom
  12. {
  13. // [[TIMGroupManager sharedInstance] GetGroupList:^(NSArray *list) {
  14. // for(int index = 0; index < list.count; index++)
  15. // {
  16. // // AVChatRoom 使用longpoll
  17. // TIMGroupInfo* info = list[index];
  18. // if ([info.groupType isEqualToString:kAVChatRoomType])
  19. // {
  20. // // 不用处理返回码,会删除自己创建的群
  21. // DebugLog(@"解散或退出历史直播房间:%@", info.group);
  22. // [[TIMGroupManager sharedInstance] DeleteGroup:info.group succ:nil fail:nil];
  23. // }
  24. // }
  25. // } fail:nil];
  26. [[TIMGroupManager sharedInstance] getGroupList:^(NSArray *list) {
  27. for(int index = 0; index < list.count; index++)
  28. {
  29. // AVChatRoom 使用longpoll
  30. TIMGroupInfo* info = list[index];
  31. if ([info.groupType isEqualToString:kAVChatRoomType])
  32. {
  33. // 不用处理返回码,会删除自己创建的群
  34. DebugLog(@"解散或退出历史直播房间:%@", info.group);
  35. [[TIMGroupManager sharedInstance] deleteGroup:info.group succ:nil fail:nil];
  36. }
  37. }
  38. } fail:nil];
  39. }
  40. // 主播 : 主播创建直播聊天室
  41. // 观众 : 观众加入直播聊天室
  42. - (void)asyncEnterAVChatRoom:(id<AVRoomAble>)room isHost:(BOOL)isHost succ:(TCAVLiveChatRoomCompletion)succ fail:(TIMFail)fail
  43. {
  44. if (!room)
  45. {
  46. DebugLog(@"直播房房间信息不正确");
  47. if (fail)
  48. {
  49. fail(-1, @"直播房房间信息不正确");
  50. }
  51. return;
  52. }
  53. NSString *title = [room liveTitle];
  54. if (!title || title.length == 0)
  55. {
  56. DebugLog(@"直播房房间信息liveTitle不正确");
  57. if (fail)
  58. {
  59. fail(-1, @"直播房房间信息liveTitle不正确");
  60. }
  61. return;
  62. }
  63. // 外部保证聊天室ID是正确的
  64. NSString *roomid = [room liveIMChatRoomId];
  65. if (isHost)
  66. {
  67. #if kSupportFixLiveChatRoomID
  68. // 如果roomid不为空,说明使用roomid作标题来创建直播群
  69. // 否则使用room liveTitle来作群名创建群
  70. if (roomid && roomid.length != 0)
  71. {
  72. DebugLog(@"----->>>>>主播开始创建直播聊天室:%@ title = %@", roomid, title);
  73. [[TIMGroupManager sharedInstance] createGroup:kAVChatRoomType members:nil groupName:title groupId:roomid succ:^(NSString *groupId) {
  74. [room setLiveIMChatRoomId:groupId];
  75. if (succ)
  76. {
  77. succ(room);
  78. }
  79. } fail:^(int code, NSString *error) {
  80. // 返回10025,group id has be used,
  81. // 10025无法区分当前是操作者是否是原群的操作者(目前业务逻辑不存在拿别人的uid创建聊天室逻辑),
  82. // 为简化逻辑,暂定创建聊天室时返回10025,就直接等同于创建成功
  83. if (code == 10025)
  84. {
  85. DebugLog(@"----->>>>>主播开始创建直播聊天室成功");
  86. [room setLiveIMChatRoomId:roomid];
  87. if (succ)
  88. {
  89. succ(room);
  90. }
  91. }
  92. else
  93. {
  94. DebugLog(@"----->>>>>主播开始创建直播聊天室失败 code: %d , msg = %@", code, error);
  95. if (fail)
  96. {
  97. fail(code, error);
  98. }
  99. }
  100. }];
  101. }
  102. else
  103. #endif
  104. {
  105. #if kSupportAVChatRoom
  106. if(roomid){ // 主播在一段时间内断开直播重新连接直播的情况
  107. [[V2TIMManager sharedInstance] joinGroup:roomid msg:nil succ:^{
  108. if (succ)
  109. {
  110. succ(room);
  111. }
  112. } fail:^(int code, NSString *desc) {
  113. if (code == 10013)
  114. {
  115. DebugLog(@"----->>>>>主播重新加入自己的直播聊天室成功");
  116. if (succ)
  117. {
  118. succ(room);
  119. }
  120. }
  121. else
  122. {
  123. // DebugLog(@"----->>>>>主播重新加入自己的直播聊天室失败 code: %d , msg = %@", code, error);
  124. // 作已在群的处的处理
  125. if (fail)
  126. {
  127. fail(code, desc);
  128. }
  129. }
  130. }];
  131. /*[[TIMGroupManager sharedInstance] joinGroup:roomid msg:nil succ:^{
  132. DebugLog(@"----->>>>>主播重新加入自己的直播聊天室成功");
  133. if (succ)
  134. {
  135. succ(room);
  136. }
  137. } fail:^(int code, NSString *error) {
  138. if (code == 10013)
  139. {
  140. DebugLog(@"----->>>>>主播重新加入自己的直播聊天室成功");
  141. if (succ)
  142. {
  143. succ(room);
  144. }
  145. }
  146. else
  147. {
  148. DebugLog(@"----->>>>>主播重新加入自己的直播聊天室失败 code: %d , msg = %@", code, error);
  149. // 作已在群的处的处理
  150. if (fail)
  151. {
  152. fail(code, error);
  153. }
  154. }
  155. }];*/
  156. }else{
  157. [[TIMGroupManager sharedInstance] createAVChatRoomGroup:title succ:^(NSString *chatRoomID) {
  158. #else
  159. [[TIMGroupManager sharedInstance] createChatRoomGroup:@[[self.host imUserId]] groupName:title succ:^(NSString *chatRoomID) {
  160. #endif
  161. DebugLog(@"----->>>>>主播开始创建IM聊天室成功");
  162. [room setLiveIMChatRoomId:chatRoomID];
  163. if (succ)
  164. {
  165. succ(room);
  166. }
  167. } fail:^(int code, NSString *error) {
  168. DebugLog(@"----->>>>>主播开始创建IM聊天室失败 code: %d , msg = %@", code, error);
  169. if (fail)
  170. {
  171. fail(code, error);
  172. }
  173. }];
  174. }
  175. }
  176. }
  177. else
  178. {
  179. if (roomid.length == 0)
  180. {
  181. DebugLog(@"----->>>>>观众加入直播聊天室ID为空");
  182. if (fail)
  183. {
  184. fail(-1, @"直播聊天室ID为空");
  185. }
  186. return;
  187. }
  188. [[V2TIMManager sharedInstance] joinGroup:roomid msg:nil succ:^{
  189. if (succ)
  190. {
  191. succ(room);
  192. }
  193. } fail:^(int code, NSString *desc) {
  194. if (code == 10013)
  195. {
  196. DebugLog(@"----->>>>>观众加入直播聊天室成功");
  197. if (succ)
  198. {
  199. succ(room);
  200. }
  201. }
  202. else
  203. {
  204. // DebugLog(@"----->>>>>观众加入直播聊天室失败 code: %d , msg = %@", code, error);
  205. // 作已在群的处的处理
  206. if (fail)
  207. {
  208. fail(code, desc);
  209. }
  210. }
  211. }];
  212. // 观众加群
  213. /*[[TIMGroupManager sharedInstance] joinGroup:roomid msg:nil succ:^{
  214. DebugLog(@"----->>>>>观众加入直播聊天室成功");
  215. if (succ)
  216. {
  217. succ(room);
  218. }
  219. } fail:^(int code, NSString *error) {
  220. if (code == 10013)
  221. {
  222. DebugLog(@"----->>>>>观众加入直播聊天室成功");
  223. if (succ)
  224. {
  225. succ(room);
  226. }
  227. }
  228. else
  229. {
  230. DebugLog(@"----->>>>>观众加入直播聊天室失败 code: %d , msg = %@", code, error);
  231. // 作已在群的处的处理
  232. if (fail)
  233. {
  234. fail(code, error);
  235. }
  236. }
  237. }];*/
  238. }
  239. }
  240. // 主播 : 主播删除直播聊天室
  241. // 观众 : 观众退出直播聊天室
  242. - (void)asyncExitAVChatRoom:(id<AVRoomAble>)room succ:(TIMSucc)succ fail:(TIMFail)fail
  243. {
  244. if (!room)
  245. {
  246. DebugLog(@"直播房房间信息不正确");
  247. if (fail)
  248. {
  249. fail(-1, @"直播房房间信息不正确");
  250. }
  251. return;
  252. }
  253. id<IMUserAble> roomHost = [room liveHost];
  254. NSString *roomid = [room liveIMChatRoomId];
  255. if (roomid.length == 0)
  256. {
  257. DebugLog(@"----->>>>>观众退出的直播聊天室ID为空");
  258. if (fail)
  259. {
  260. fail(-1, @"直播聊天室ID为空");
  261. }
  262. return;
  263. }
  264. BOOL isHost = [self.host isEqual:roomHost];
  265. if (isHost)
  266. {
  267. // 主播删群
  268. // [[TIMGroupManager sharedInstance] DeleteGroup:roomid succ:succ fail:fail];
  269. if(succ)
  270. {
  271. succ();
  272. }
  273. }
  274. else
  275. {
  276. [[V2TIMManager sharedInstance] quitGroup:roomid succ:^{
  277. NSLog(@"退出群组 %@",roomid);
  278. // if (succ)
  279. // {
  280. // [[IMAPlatform sharedInstance].contactMgr removeUser:ws];
  281. // succ();
  282. // }
  283. } fail:^(int code, NSString *msg) {
  284. // DebugLog(@"Fail code = %d, msg = %@", code, msg);
  285. // [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, msg)];
  286. // if (fail)
  287. // {
  288. // fail(code, msg);
  289. // }
  290. }];
  291. // 观众退群
  292. // [[TIMGroupManager sharedInstance] quitGroup:roomid succ:succ fail:fail];
  293. }
  294. }
  295. @end