Files
midi_ios/QXLive/Config/QXRoomMessageManager.m
2025-09-15 18:20:22 +08:00

768 lines
41 KiB
Objective-C

//
// QXRoomMessageManager.m
// QXLive
//
// Created by 启星 on 2025/6/10.
//
#import "QXRoomMessageManager.h"
#import <ImSDK_Plus/ImSDK_Plus.h>
#import "QXMineNetwork.h"
#import "QXGiftPlayerManager.h"
#import <AgoraRtcKit/AgoraRtcEngineKit.h>
@interface QXRoomMessageManager() <V2TIMGroupListener,V2TIMSimpleMsgListener,V2TIMAdvancedMsgListener>
@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;
}
-(void)joinGroupWithRoomId:(NSString *)roomId{
MJWeakSelf
if (self.groupId) {
[self quitGroupWithRoomId:roomId];
}
[[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<V2TIMGroupMemberInfo *> *)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;
[[QXGiftPlayerManager shareManager] displayFullEffectView:model.GiftInfo.play_image];
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:)]) {
[self.delegate roomSeatExchangedWithFromPitNumber:fromPitNumber toPitNumber:toPitNumber];
}
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;
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