// // QXRoomMessageManager.m // QXLive // // Created by 启星 on 2025/6/10. // #import "QXRoomMessageManager.h" #import #import "QXMineNetwork.h" #import "QXGiftPlayerManager.h" #import "QXGiftDisplayManager.h" #import #import "TUIChatConfig.h" @interface QXRoomMessageManager() @property (nonatomic,strong)NSString *groupId; @property (nonatomic,strong)NSString *roomId; @end @implementation QXRoomMessageManager + (instancetype)shared { static QXRoomMessageManager *global = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ global = [[self alloc] init]; }); return global; } - (instancetype)init { self = [super init]; if (self) { /// 设置聊天消息是否展示已读未读,只有旗舰版才支持 #if DEVELOPENT == 1 [TUIChatConfig defaultConfig].msgNeedReadReceipt = NO; #else [TUIChatConfig defaultConfig].msgNeedReadReceipt = YES; #endif } return self; } -(void)joinGroupWithRoomId:(NSString *)roomId{ MJWeakSelf if (self.groupId) { [self quitGroupWithRoomId:self.groupId]; } [[V2TIMManager sharedInstance] addGroupListener:self]; [[V2TIMManager sharedInstance] addSimpleMsgListener:self]; [[V2TIMManager sharedInstance] addAdvancedMsgListener:self]; NSString *groupId = [NSString stringWithFormat:@"room%@",roomId]; [[V2TIMManager sharedInstance] joinGroup:groupId msg:@"大家好,我来啦" succ:^{ QXLOG(@"腾讯IM加入聊天室成功"); weakSelf.groupId = groupId; weakSelf.roomId = roomId; } fail:^(int code, NSString *desc) { // 加入群组失败 QXLOG(@"腾讯IM加入聊天室失败-code%d-原因%@",code,desc); }]; } -(void)quitGroupWithRoomId:(NSString *)roomId{ MJWeakSelf self.groupId = nil; self.roomId = nil; [[V2TIMManager sharedInstance] removeGroupListener:self]; [[V2TIMManager sharedInstance] removeSimpleMsgListener:self]; [[V2TIMManager sharedInstance] removeAdvancedMsgListener:self]; NSString *groupId = [NSString stringWithFormat:@"room%@",roomId]; [[V2TIMManager sharedInstance] quitGroup:groupId succ:^{ } fail:^(int code, NSString * _Nullable desc) { }]; } // 新成员加入 -(void)onMemberEnter:(NSString *)groupID memberList:(NSArray *)memberList{ } // 有人离开 -(void)onMemberLeave:(NSString *)groupID member:(V2TIMGroupMemberInfo *)member{ } - (void)onRecvNewMessage:(V2TIMMessage *)msg { if (msg.isBroadcastMessage) { // 收到了广播消息 NSData *data = msg.customElem.data; NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; QXLOG(@"收到广播消息---%@",jsonStr); QXHeadLineModel *headline = [QXHeadLineModel yy_modelWithJSON:jsonStr]; if (self.delegate && [self.delegate respondsToSelector:@selector(recieveHeadline:)]) { [self.delegate recieveHeadline:headline]; } } } // 收到系统消息 -(void)onReceiveRESTCustomData:(NSString *)groupID data:(NSData *)data{ NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; QXRoomMessage *msg = [QXRoomMessage yy_modelWithJSON:jsonStr]; NSString *groupId = [NSString stringWithFormat:@"room%@",msg.RoomId]; if ([groupId isEqualToString:self.groupId]) { // 处理逻辑 NSInteger meesageType = msg.MsgType.integerValue; switch (meesageType) { case QXRoomMessageTypeSystem:{ /// 系统消息 } break; case QXRoomMessageTypeJoin:{ /// 用户进入房间 QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; NSString *jia_jia = [NSString stringWithFormat:@"%@",msg.Text[@"jia_jia"]]; if (([jia_jia hasPrefix:@"http"] || [jia_jia hasPrefix:@"https"]) && ([jia_jia hasSuffix:@"svga"] || [jia_jia hasSuffix:@"mp4"])) { // QXGiftModel *md = [[QXGiftModel alloc] init]; // md.play_image = jia_jia; [[QXGiftPlayerManager shareManager] displayChatEffectView:jia_jia]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { [self.delegate didInsertMessge:model]; } if ([model.FromUserInfo.user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) { return; } if (self.delegate && [self.delegate respondsToSelector:@selector(roomOnlineNumberDidChangedIsAdd:)]) { [self.delegate roomOnlineNumberDidChangedIsAdd:YES]; } } break; case QXRoomMessageTypeQuit:{ /// 用户退出房间 if (self.delegate && [self.delegate respondsToSelector:@selector(roomOnlineNumberDidChangedIsAdd:)]) { [self.delegate roomOnlineNumberDidChangedIsAdd:NO]; } } break; case QXRoomMessageTypeGift:{ /// 收到礼物 QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeGift; NSArray *arr = [model.GiftInfo.play_image componentsSeparatedByString:@","]; [[QXGiftPlayerManager shareManager] displayFullEffectViewWithMorePlayImages:arr]; [[QXGiftDisplayManager sharedManager] receiveGift:model]; if (model.ToUserInfos.count>0) { if (self.delegate && [self.delegate respondsToSelector:@selector(didRecieveGiftWithWithUserInfos:)]) { [self.delegate didRecieveGiftWithWithUserInfos:model.ToUserInfos]; } }else{ if (self.delegate && [self.delegate respondsToSelector:@selector(didRecieveGiftWithWithUserInfo:)]) { [self.delegate didRecieveGiftWithWithUserInfo:model.ToUserInfo]; } } if (model.text.length == 0) { return; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { [self.delegate didInsertMessge:model]; } } break; case QXRoomMessageTypeAplayPitModeDidChanged:{ /// 上麦模式发生变化 if (self.delegate && [self.delegate respondsToSelector:@selector(aplayPitModeDidChanged:)]) { NSString* room_up_pit_type = [NSString stringWithFormat:@"%@",msg.Text[@"room_up_pit_type"]]; [self.delegate aplayPitModeDidChanged:room_up_pit_type]; } } break; case QXRoomMessageTypeUpSeat:{ /// 用户上麦 QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { [self.delegate didInsertMessge:model]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didUpDownSeatWithUser:isUpSeat:pit_number:)]) { NSString *pit_number = [NSString stringWithFormat:@"%@",msg.Text[@"pit_number"]]; [self.delegate didUpDownSeatWithUser:model.FromUserInfo isUpSeat:YES pit_number:pit_number.integerValue]; } } break; case QXRoomMessageTypeDownSeat:{ /// 用户下麦 QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { [self.delegate didInsertMessge:model]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didUpDownSeatWithUser:isUpSeat:pit_number:)]) { NSString *pit_number = [NSString stringWithFormat:@"%@",msg.Text[@"pit_number"]]; [self.delegate didUpDownSeatWithUser:model.FromUserInfo isUpSeat:NO pit_number:pit_number.integerValue]; } } break; case QXRoomMessageTypeSwicthSong:{ /// 点歌 NSString *action = [NSString stringWithFormat:@"%@",msg.Text[@"action"]]; if (action.intValue == 1) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(applySongWaitAgreeWithUserNickname:)]) { [self.delegate applySongWaitAgreeWithUserNickname:model.FromUserInfo.nickname]; } return; } if (action.intValue == 2) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(nextSongDidStartWithSongInfo:nextInfo:)]) { [self.delegate nextSongDidStartWithSongInfo:model.songInfo nextInfo:model.nextInfo]; } return; } if (action.intValue == 4) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(applySongNoAgreeWithUserId:)]) { [self.delegate applySongNoAgreeWithUserId:model.FromUserInfo.user_id]; } return; } if (action.intValue == 3) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(nextSongDidChangedWithNextSong:)]) { [self.delegate nextSongDidChangedWithNextSong:model.nextInfo]; } return; } // @{ // @"action":@"1", // 1有人发起点歌 主持人同意点歌走房间类型变化推送 2 切歌 3 下一首歌有变化 4 拒绝 // // // 有人发起点歌时 前端收到推送为1 根据当前自己所在的麦位是否为主持麦,为主持麦时弹出有人申请点歌弹窗,其余人不处理该条推送 // // @"songInfo":@{ // 仅在切歌时有该条消息 // @"song_code":@"歌曲code", // @"song_name":@"歌曲名称", // @"singer":@"演唱者", // @"poster":@"歌曲封面", // @"duration":@"歌曲时长", // // @"user_id":@"点唱用户id", // @"nickname":@"点唱用户昵称", // @"avatar":@"点唱用户头像", // @"dress":@"点唱用户装扮", // @"charm":@"点唱用户魅力", // } // } } break; case QXRoomMessageTypeRoomTypeChanged:{ if (self.delegate && [self.delegate respondsToSelector:@selector(roomTypeDidChanged)]) { [self.delegate roomTypeDidChanged]; } } break;; case QXRoomMessageTypeCharmRankList:{ /// 点唱房魅力发生变化 if (self.delegate && [self.delegate respondsToSelector:@selector(songRoomCharmRankListDidChanged:)]) { NSArray *list = [NSArray yy_modelArrayWithClass:[QXRoomPitModel class] json:msg.Text[@"userCharmList"]]; [self.delegate songRoomCharmRankListDidChanged:list]; } } break;; case QXRoomMessageTypeRoomInfoChanged:{ if (self.delegate && [self.delegate respondsToSelector:@selector(roomInfoDidChanged:)]) { QXRoomInfoModel *model = [QXRoomInfoModel yy_modelWithJSON:msg.Text[@"RoomInfo"]]; [self.delegate roomInfoDidChanged:model]; } } break;; case QXRoomMessageTypeSetManage:{ if (self.delegate && [self.delegate respondsToSelector:@selector(roomSetManagerOrCompere:isManager:isAdd:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; [self.delegate roomSetManagerOrCompere:model.FromUserInfo isManager:YES isAdd:YES]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:userId:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model userId:model.FromUserInfo.user_id]; } } break;; case QXRoomMessageTypeSetCompere:{ if (self.delegate && [self.delegate respondsToSelector:@selector(roomSetManagerOrCompere:isManager:isAdd:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; [self.delegate roomSetManagerOrCompere:model.FromUserInfo isManager:NO isAdd:YES]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:userId:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model userId:model.FromUserInfo.user_id]; } } break;; case QXRoomMessageTypeCompereIsDelete:{ if (self.delegate && [self.delegate respondsToSelector:@selector(roomSetManagerOrCompere:isManager:isAdd:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; [self.delegate roomSetManagerOrCompere:model.FromUserInfo isManager:NO isAdd:NO]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:userId:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model userId:model.FromUserInfo.user_id]; } } break;; case QXRoomMessageTypeManagerIsDelete:{ if (self.delegate && [self.delegate respondsToSelector:@selector(roomSetManagerOrCompere:isManager:isAdd:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; [self.delegate roomSetManagerOrCompere:model.FromUserInfo isManager:YES isAdd:NO]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:userId:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model userId:model.FromUserInfo.user_id]; } } break;; case QXRoomMessageTypeTakeOff:{ if (self.delegate && [self.delegate respondsToSelector:@selector(userDidTakeOffWithUserInfo:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; [self.delegate userDidTakeOffWithUserInfo:model.FromUserInfo]; } } break;; case QXRoomMessageTypeRoomClearCharm:{ if (self.delegate && [self.delegate respondsToSelector:@selector(roomClearCharm)]) { [self.delegate roomClearCharm]; } } break;; case QXRoomMessageTypeSeatMute:{ /// 房间麦位位被禁麦 } break;; case QXRoomMessageTypeSeatLock:{ /// 房间被锁麦 if (self.delegate && [self.delegate respondsToSelector:@selector(roomSeatStatusDidChangedIsLock:pit_number:)]) { NSString *is_lock = [NSString stringWithFormat:@"%@",msg.Text[@"is_lock"]]; NSString *pit_number = [NSString stringWithFormat:@"%@",msg.Text[@"pit_number"]]; [self.delegate roomSeatStatusDidChangedIsLock:is_lock pit_number:pit_number]; } } break; case QXRoomMessageTypeRoomUserMute:{ /// 用户被禁言 if (self.delegate && [self.delegate respondsToSelector:@selector(userMuteStatusDidChanged:isMute:isMutePit:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; NSString *is_mute = [NSString stringWithFormat:@"%@",msg.Text[@"is_mute"]]; NSString *is_mute_pit = [NSString stringWithFormat:@"%@",msg.Text[@"is_mute_pit"]]; [self.delegate userMuteStatusDidChanged:model.FromUserInfo isMute:is_mute isMutePit:is_mute_pit]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:userId:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model userId:model.FromUserInfo.user_id]; } } break; case QXRoomMessageTypeRoomAuctionUpSeat:{ if (self.delegate && [self.delegate respondsToSelector:@selector(auctionUpSeatWithUserInfo:isUpSeat:)]) { NSString *type = [NSString stringWithFormat:@"%@",msg.Text[@"type"]]; /// 1 上麦 2 下麦 QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; [self.delegate auctionUpSeatWithUserInfo:model.FromUserInfo isUpSeat:type.intValue==1]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model]; } } break; case QXRoomMessageTypeRoomAuctionStart:{ if (self.delegate && [self.delegate respondsToSelector:@selector(auctionStartOrEndIsStart:user:getUser:)]) { QXRoomAuctionUser *user = [QXRoomAuctionUser yy_modelWithJSON:msg.Text[@"auction_user"]]; [self.delegate auctionStartOrEndIsStart:YES user:user getUser:nil]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model]; } } break; case QXRoomMessageTypeRoomAuctionPitChanged:{ if (self.delegate && [self.delegate respondsToSelector:@selector(auctionListDidChanged:)]) { NSArray *list = [NSArray yy_modelArrayWithClass:[QXRoomPitModel class] json:msg.Text[@"auction_list"]]; [self.delegate auctionListDidChanged:list]; } } break; case QXRoomMessageTypeRoomAuctionEnd:{ if (self.delegate && [self.delegate respondsToSelector:@selector(auctionStartOrEndIsStart:user:getUser:)]) { QXRoomAuctionUser *user = [QXRoomAuctionUser yy_modelWithJSON:msg.Text[@"auction_user"]]; QXRoomAuctionUser *getUser = [QXRoomAuctionUser yy_modelWithJSON:msg.Text[@"recipient"]]; [self.delegate auctionStartOrEndIsStart:NO user:user getUser:getUser]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model]; } } break; case QXRoomMessageTypeRoomAuctionDelayTime:{ if (self.delegate && [self.delegate respondsToSelector:@selector(auctionTimeDelayWithEndTime:)]) { NSString *endTime = [NSString stringWithFormat:@"%@",msg.Text[@"duration"]]; [self.delegate auctionTimeDelayWithEndTime:endTime]; } } break; case QXRoomMessageTypeRoomAuctionTypeDidChanged:{ if (self.delegate && [self.delegate respondsToSelector:@selector(auctionTypeDidChanged:)]) { NSString *endTime = [NSString stringWithFormat:@"%@",msg.Text[@"type"]]; [self.delegate auctionTypeDidChanged:endTime]; } } break; case QXRoomMessageTypeRoomCabinRoomValueChanged:{ if (self.delegate && [self.delegate respondsToSelector:@selector(cabinRoomValueDidChanged:)]) { NSString *hot_value = [NSString stringWithFormat:@"%@",msg.Text[@"hot_value"]]; [self.delegate cabinRoomValueDidChanged:hot_value]; } } break; case QXRoomMessageTypeRoomRecieveInvitePk:{ if (self.delegate && [self.delegate respondsToSelector:@selector(recievePKInviteWithSendRoomId:AcceptRoomId:PkId:message:)]) { NSString *SendRoomId = [NSString stringWithFormat:@"%@",msg.Text[@"SendRoomId"]]; NSString *AcceptRoomId = [NSString stringWithFormat:@"%@",msg.Text[@"AcceptRoomId"]]; NSString *PkId = [NSString stringWithFormat:@"%@",msg.Text[@"PkId"]]; NSString *message = [NSString stringWithFormat:@"%@",msg.Text[@"text"]]; [self.delegate recievePKInviteWithSendRoomId:SendRoomId AcceptRoomId:AcceptRoomId PkId:PkId message:message]; } } break; case QXRoomMessageTypeRoomPKAgreeOrRefuse:{ NSString *user_id = [NSString stringWithFormat:@"%@",msg.Text[@"user_id"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(agreeOrRefusePKIsAgree:user_id:room_id:pk_id:)]) { NSString *type = [NSString stringWithFormat:@"%@",msg.Text[@"type"]]; NSString *room_id = [NSString stringWithFormat:@"%@",msg.Text[@"room_id"]]; NSString *pk_id = [NSString stringWithFormat:@"%@",msg.Text[@"pk_id"]]; [self.delegate agreeOrRefusePKIsAgree:type.intValue==1 user_id:user_id room_id:room_id pk_id:pk_id]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:userId:)]) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model userId:user_id]; } } break; case QXRoomMessageTypeRoomPKStart:{ if (self.delegate && [self.delegate respondsToSelector:@selector(pkStartWithPkEndTimes:pk_id:)]) { NSString *pk_end_times = [NSString stringWithFormat:@"%@",msg.Text[@"pk_end_times"]]; NSString *pk_id = [NSString stringWithFormat:@"%@",msg.Text[@"pk_id"]]; [self.delegate pkStartWithPkEndTimes:pk_end_times pk_id:pk_id]; } } break; case QXRoomMessageTypeRoomPKEnd:{ if (self.delegate && [self.delegate respondsToSelector:@selector(pkResultWithIsVictory:end_time:victory_name:victory_cover:defeated_name:defeated_cover:)]) { NSString *type = [NSString stringWithFormat:@"%@",msg.Text[@"type"]]; NSString *victory_name = [NSString stringWithFormat:@"%@",msg.Text[@"victory_name"]]; NSString *victory_cover = [NSString stringWithFormat:@"%@",msg.Text[@"victory_cover"]]; NSString *defeated_name = [NSString stringWithFormat:@"%@",msg.Text[@"defeated_name"]]; NSString *defeated_cover = [NSString stringWithFormat:@"%@",msg.Text[@"defeated_cover"]]; NSString *end_time = [NSString stringWithFormat:@"%@",msg.Text[@"end_time"]]; [self.delegate pkResultWithIsVictory:type.intValue end_time:end_time victory_name:victory_name victory_cover:victory_cover defeated_name:defeated_name defeated_cover:defeated_cover]; } } break; case QXRoomMessageTypeRoomPKDisconnect:{ if (self.delegate && [self.delegate respondsToSelector:@selector(pkDisConnect)]) { [self.delegate pkDisConnect]; } } break; case QXRoomMessageTypePKValueDidChanged:{ if (self.delegate && [self.delegate respondsToSelector:@selector(roomPKValueDidChangedWithRoomIdA:create_value_a:room_id_b:receive_value_b:)]) { NSString *room_id_a = [NSString stringWithFormat:@"%@",msg.Text[@"room_id_a"]]; NSString *room_id_b = [NSString stringWithFormat:@"%@",msg.Text[@"room_id_b"]]; NSString *create_value_a = [NSString stringWithFormat:@"%@",msg.Text[@"create_value_a"]]; NSString *receive_value_b = [NSString stringWithFormat:@"%@",msg.Text[@"receive_value_b"]]; [self.delegate roomPKValueDidChangedWithRoomIdA:room_id_a create_value_a:create_value_a room_id_b:room_id_b receive_value_b:receive_value_b]; } } break; case QXRoomMessageTypeRoomInLineNumber:{ if (self.delegate && [self.delegate respondsToSelector:@selector(aplayMicInLineNumberDidChanged:)]) { NSString *count = [NSString stringWithFormat:@"%@",msg.Text[@"count"]]; [self.delegate aplayMicInLineNumberDidChanged:count]; } } break; case QXRoomMessageTypeRoomOnlineNumber:{ NSString *online_number = [NSString stringWithFormat:@"%@",msg.Text[@"online_number"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(roomOnlineNumberDidChangedOnlineNumber:)]) { [self.delegate roomOnlineNumberDidChangedOnlineNumber:online_number]; } } break; case QXRoomMessageTypeRoomPkNeedAgree:{ QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(roomPKRecieveLoserWantToRunRoadWithUserInfo:)]) { [self.delegate roomPKRecieveLoserWantToRunRoadWithUserInfo:model.FromUserInfo]; } } break; case QXRoomMessageTypeRoomBlindBox:{ QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeGift; if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { [self.delegate didInsertMessge:model]; } } break; case QXRoomMessageTypeRoomUserInfoDidChanged:{ QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeChat; if (self.delegate && [self.delegate respondsToSelector:@selector(roomUserInfoDidChanged:)]) { [self.delegate roomUserInfoDidChanged:model.FromUserInfo]; } } break; /// 交友房 case QXRoomMessageTypeRoomFriendPartDidChanged:{ QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(friendPartDidChangedWithType:friend_id:end_time:relationModel:)]) { [self.delegate friendPartDidChangedWithType:model.step friend_id:model.friend_id end_time:model.end_time relationModel:model.friend_user]; } if (model.step.intValue != 3) { if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model]; } } } break; case QXRoomMessageTypeRoomFriendDelayTime:{ NSString *end_time = [NSString stringWithFormat:@"%@",msg.Text[@"end_time"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(friendTimeDelayWithTime:)]) { [self.delegate friendTimeDelayWithTime:end_time]; } } break; case QXRoomMessageTypeSeatDidChanged:{ NSArray *pitArray = [NSArray yy_modelArrayWithClass:[QXRoomPitModel class] json:msg.Text[@"list"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(friendSeatDidChanged:)]) { [self.delegate friendSeatDidChanged:pitArray]; } } break; case QXRoomMessageTypeHeartDidChanged:{ NSArray *heartArray = [NSArray yy_modelArrayWithClass:[QXRoomFriendHeartListModel class] json:msg.Text[@"list"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(friendHeartNumberDidChanged:)]) { [self.delegate friendHeartNumberDidChanged:heartArray]; } } break; case QXRoomMessageTypeRoomFriendCreateRelation:{ QXRoomFriendRelationModel *relationModel = [QXRoomFriendRelationModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(friendRelationIsCreatedWithrelationModel:)]) { [self.delegate friendRelationIsCreatedWithrelationModel:relationModel]; } } break; case QXRoomMessageTypeFriendRoomQuit:{ if (self.delegate && [self.delegate respondsToSelector:@selector(friendCabinRoomIsQuit)]) { [self.delegate friendCabinRoomIsQuit]; } } break; case QXRoomMessageTypeCabinTimeDelay:{ NSString *end_time = [NSString stringWithFormat:@"%@",msg.Text[@"time_day"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(friendCabinRoomTimeDelayWithTime:)]) { [self.delegate friendCabinRoomTimeDelayWithTime:end_time]; } } break; case QXRoomMessageTypeMeetActivityProgressUpdate:{ NSDictionary *progressDict = msg.Text; if (self.delegate && [self.delegate respondsToSelector:@selector(meetActivityProgressIsUpdate:)]) { [self.delegate meetActivityProgressIsUpdate:progressDict]; } } break; case QXRoomMessageTypeMeetActivityDrawGift:{ QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(meetActivityGiftInfoIsUpdate:)]) { [self.delegate meetActivityGiftInfoIsUpdate:model]; } } break; case QXRoomMessageTypeRoomDidFire:{ QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; NSInteger fromPitNumber = [msg.Text[@"from_pit_number"] integerValue]; NSInteger toPitNumber = [msg.Text[@"to_pit_number"] integerValue]; if (self.delegate && [self.delegate respondsToSelector:@selector(roomSeatExchangedWithFromPitNumber:toPitNumber:userInfo:)]) { [self.delegate roomSeatExchangedWithFromPitNumber:fromPitNumber toPitNumber:toPitNumber userInfo:model.FromUserInfo]; } if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { model.messageType = QXRoomChatMessageTypeSystem; [self.delegate didInsertMessge:model]; } } break; case QXRoomMessageTypeRoomClearUserCharm:{ NSString *userId = [NSString stringWithFormat:@"%@",msg.Text[@"user_id"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(roomClearUserCharmWithUserId:)]) { [self.delegate roomClearUserCharmWithUserId:userId]; } } break; case QXRoomMessageTypeRoomUserOnlineStatus:{ NSString *userId = [NSString stringWithFormat:@"%@",msg.Text[@"user_id"]]; // 1 在线 2离线 NSInteger type = 1; type = [msg.Text[@"type"] integerValue]; BOOL isOnline = type == 1?YES:NO; // if (self.delegate && [self.delegate respondsToSelector:@selector(roomUserOnlineStatusDidChanged:userId:)]) { // [self.delegate roomUserOnlineStatusDidChanged:YES userId:userId]; // } NSDictionary *parm = @{ @"user_id":userId, @"is_online":[NSNumber numberWithBool:isOnline], }; [[NSNotificationCenter defaultCenter] postNotificationName:noticeRoomUserOnlineStatusDidChanged object:parm]; } break; case QXRoomMessageTypeSendRedpacket:{ QXRedPacketModel *model = [QXRedPacketModel yy_modelWithJSON:msg.Text[@"redpacketInfo"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(recievedRedPacket:)]) { [self.delegate recievedRedPacket:model]; } } break; case QXRoomMessageTypeRedpacketFinished:{ NSString *redpacket_id = [NSString stringWithFormat:@"%@",msg.Text[@"redpacket_id"]]; if (self.delegate && [self.delegate respondsToSelector:@selector(redPacketDidFinished:)]) { [self.delegate redPacketDidFinished:redpacket_id]; } } break; default: break; } } } /** /// 有人向我发起pk QXRoomMessageTypeRoomRecieveInvitePk = 1029, /// 拒绝或接受pk QXRoomMessageTypeRoomPKAgreeOrRefuse = 1030, /// pk开始 QXRoomMessageTypeRoomPKStart = 1031, /// pk结束 惩罚时间 QXRoomMessageTypeRoomPKEnd = 1032, /// pk断开 QXRoomMessageTypeRoomPKDisconnect = 1033, */ -(void)onRecvC2CTextMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info text:(NSString *)text{ } -(void)onRecvC2CCustomMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info customData:(NSData *)data{ NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; QXRoomMessage *msg = [QXRoomMessage yy_modelWithJSON:jsonStr]; NSInteger meesageType = msg.MsgType.integerValue; if (meesageType == QXRoomMessageTypeMuteRemoteAudio){ NSString *json = [NSString stringWithFormat:@"%@",msg.Text[@"text"]]; NSDictionary *dict = [json jsonValueDecoded]; NSInteger is_mute = [[dict objectForKey:@"is_mute"] integerValue]; QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; if (self.delegate && [self.delegate respondsToSelector:@selector(pkMuteRemoteAudio:fromUserInfo:)]) { [self.delegate pkMuteRemoteAudio:is_mute==1 fromUserInfo:model.FromUserInfo]; } } } -(void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data{ NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; QXRoomMessage *msg = [QXRoomMessage yy_modelWithJSON:jsonStr]; if ([groupID isEqualToString:self.groupId]) { NSInteger meesageType = msg.MsgType.integerValue; if (meesageType == QXRoomMessageTypeText) { QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text]; model.messageType = QXRoomChatMessageTypeChat; if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { [self.delegate didInsertMessge:model]; } }else if (meesageType == QXRoomMessageTypeClearMessage) { if (self.delegate && [self.delegate respondsToSelector:@selector(didClearAllMessage)]) { [self.delegate didClearAllMessage]; } }else if (meesageType == QXRoomMessageTypeSongLrc){ NSString *json = [NSString stringWithFormat:@"%@",msg.Text[@"text"]]; NSDictionary *dict = [json jsonValueDecoded]; NSInteger positionMs = [[dict objectForKey:@"position"] integerValue]; if (positionMs<=0) { return; } if (self.delegate && [self.delegate respondsToSelector:@selector(roomSongLrcProgress:)]) { [self.delegate roomSongLrcProgress:positionMs]; } QXLOG(@"收到歌词进度userID--%@---positionMs---%ld",info.userID,positionMs); }else if (meesageType == QXRoomMessageTypeMuteLocalAudio){ NSString *json = [NSString stringWithFormat:@"%@",msg.Text[@"text"]]; NSDictionary *dict = [json jsonValueDecoded]; NSInteger is_mute = [[dict objectForKey:@"is_mute"] integerValue]; QXUserHomeModel *userModel = [QXUserHomeModel yy_modelWithJSON:msg.Text[@"FromUserInfo"]]; AgoraRtcAudioVolumeInfo *userInfo = [[AgoraRtcAudioVolumeInfo alloc] init]; userInfo.uid = userModel.user_id.longLongValue; userInfo.volume = 0; [[NSNotificationCenter defaultCenter] postNotificationName:noticeUserSpeak object:userInfo]; } } } -(void)sendChatMessage:(NSString *)message messageType:(QXRoomMessageType)messageType needInsertMessage:(BOOL)needInsertMessage{ NSDictionary *dict = @{ @"RoomId":self.roomId?self.roomId:@"", @"MsgType":[NSNumber numberWithInteger:messageType], @"Text":@{ @"FromUserInfo":@{ @"user_id":[QXGlobal shareGlobal].loginModel.user_id?[QXGlobal shareGlobal].loginModel.user_id:@"", @"nickname":[QXGlobal shareGlobal].loginModel.nickname?[QXGlobal shareGlobal].loginModel.nickname:@"", @"avatar":[QXGlobal shareGlobal].loginModel.avatar?[QXGlobal shareGlobal].loginModel.avatar:@"", @"icon":[QXGlobal shareGlobal].loginModel.icon?[QXGlobal shareGlobal].loginModel.icon:@"", }, @"text":message } }; if (needInsertMessage) { QXRoomChatListModel *model = [[QXRoomChatListModel alloc] init]; model.text = message; QXUserHomeModel *userInfo = [[QXUserHomeModel alloc] init]; userInfo.avatar = [QXGlobal shareGlobal].loginModel.avatar; userInfo.nickname = [QXGlobal shareGlobal].loginModel.nickname; userInfo.user_id = [QXGlobal shareGlobal].loginModel.user_id; userInfo.icon = [QXGlobal shareGlobal].loginModel.icon; model.FromUserInfo = userInfo; model.messageType = QXRoomChatMessageTypeChat; if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) { [self.delegate didInsertMessge:model]; } } NSString *jsonStr = [dict jsonStringEncoded]; NSData *data =[jsonStr dataUsingEncoding:NSUTF8StringEncoding]; [[V2TIMManager sharedInstance] sendGroupCustomMessage:data to:self.groupId priority:V2TIM_PRIORITY_NORMAL succ:^{ QXLOG(@"发送自定义消息成功"); } fail:^(int code, NSString * _Nullable desc) { QXLOG(@"发送自定义消息失败"); }]; } -(void)sendC2CMessage:(NSString *)message messageType:(QXRoomMessageType)messageType userId:(NSString *)userId{ NSDictionary *dict = @{ @"RoomId":self.roomId?self.roomId:@"", @"MsgType":[NSNumber numberWithInteger:messageType], @"Text":@{ @"FromUserInfo":@{ @"user_id":[QXGlobal shareGlobal].loginModel.user_id?[QXGlobal shareGlobal].loginModel.user_id:@"", @"nickname":[QXGlobal shareGlobal].loginModel.nickname?[QXGlobal shareGlobal].loginModel.nickname:@"", @"avatar":[QXGlobal shareGlobal].loginModel.avatar?[QXGlobal shareGlobal].loginModel.avatar:@"", @"icon":[QXGlobal shareGlobal].loginModel.icon?[QXGlobal shareGlobal].loginModel.icon:@"", }, @"text":message } }; NSString *jsonStr = [dict jsonStringEncoded]; NSData *data =[jsonStr dataUsingEncoding:NSUTF8StringEncoding]; NSString*toUserId = [NSString stringWithFormat:@"u%@",userId]; // [[V2TIMManager sharedInstance] sendC2CCustomMessage:data to:toUserId succ:^{ // // } fail:^(int code, NSString * _Nullable desc) { // // }]; V2TIMMessage *message1 = [[V2TIMManager sharedInstance] createCustomMessage:data]; message1.isExcludedFromUnreadCount = YES; message1.isExcludedFromContentModeration = YES; [[V2TIMManager sharedInstance] sendMessage:message1 receiver:toUserId groupID:nil priority:(V2TIM_PRIORITY_HIGH) onlineUserOnly:YES offlinePushInfo:nil progress:^(uint32_t progress) { } succ:^{ } fail:^(int code, NSString * _Nullable desc) { }]; } @end @implementation QXRoomMessage @end