783 lines
42 KiB
Objective-C
783 lines
42 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: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<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;
|
|
NSArray *arr = [model.GiftInfo.play_image componentsSeparatedByString:@","];
|
|
[[QXGiftPlayerManager shareManager] displayFullEffectViewWithMorePlayImages:arr];
|
|
|
|
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;
|
|
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
|