Files
featherVoice/QXLive/Manager/QXRoomMessageManager.m

998 lines
54 KiB
Mathematica
Raw Normal View History

2025-08-08 10:49:36 +08:00
//
// QXRoomMessageManager.m
// QXLive
//
// Created by on 2025/6/10.
//
#import "QXRoomMessageManager.h"
#import <ImSDK_Plus/ImSDK_Plus.h>
#import "QXMineNetwork.h"
#import "QXGiftPlayerManager.h"
2025-10-20 20:05:55 +08:00
#import "QXGiftDisplayManager.h"
2025-08-08 10:49:36 +08:00
#import <AgoraRtcKit/AgoraRtcEngineKit.h>
2025-10-21 10:29:06 +08:00
#import "TUIChatConfig.h"
2025-11-11 17:19:21 +08:00
#import "QXDrifNobilityJoinRoomView.h"
2025-11-21 16:17:05 +08:00
#import "QXCustomAlertView.h"
2025-11-28 22:43:06 +08:00
#import "QXHeartBeatSpaceViewController.h"
2025-08-08 10:49:36 +08:00
@interface QXRoomMessageManager() <V2TIMGroupListener,V2TIMSimpleMsgListener,V2TIMAdvancedMsgListener>
@property (nonatomic,strong)NSString *groupId;
2025-10-20 09:43:10 +08:00
@property (nonatomic,strong)NSString *roomId;
2025-08-08 10:49:36 +08:00
@end
@implementation QXRoomMessageManager
+ (instancetype)shared {
static QXRoomMessageManager *global = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
global = [[self alloc] init];
});
return global;
}
2025-10-21 10:29:06 +08:00
- (instancetype)init
{
self = [super init];
if (self) {
}
return self;
}
2025-11-21 16:17:05 +08:00
-(void)addC2CObserver{
[[V2TIMManager sharedInstance] addSimpleMsgListener:self];
}
2025-08-08 10:49:36 +08:00
-(void)joinGroupWithRoomId:(NSString *)roomId{
MJWeakSelf
if (self.groupId) {
2025-12-04 23:35:49 +08:00
[self quitGroupWithRoomId:self.groupId removeListener:YES];
2025-08-08 10:49:36 +08:00
}
[[V2TIMManager sharedInstance] addGroupListener:self];
[[V2TIMManager sharedInstance] addAdvancedMsgListener:self];
NSString *groupId = [NSString stringWithFormat:@"room%@",roomId];
[[V2TIMManager sharedInstance] joinGroup:groupId msg:@"大家好,我来啦" succ:^{
QXLOG(@"腾讯IM加入聊天室成功");
weakSelf.groupId = groupId;
2025-10-20 09:43:10 +08:00
weakSelf.roomId = roomId;
2025-08-08 10:49:36 +08:00
} fail:^(int code, NSString *desc) {
//
QXLOG(@"腾讯IM加入聊天室失败-code%d-原因%@",code,desc);
}];
}
2025-12-04 23:35:49 +08:00
-(void)quitGroupWithRoomId:(NSString *)roomId removeListener:(BOOL)removeListener{
if (removeListener) {
self.groupId = nil;
self.roomId = nil;
[[V2TIMManager sharedInstance] removeGroupListener:self];
[[V2TIMManager sharedInstance] removeAdvancedMsgListener:self];
}
2025-08-08 10:49:36 +08:00
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"])) {
2025-10-20 09:43:10 +08:00
// QXGiftModel *md = [[QXGiftModel alloc] init];
// md.play_image = jia_jia;
[[QXGiftPlayerManager shareManager] displayChatEffectView:jia_jia];
2025-08-08 10:49:36 +08:00
}
2025-11-11 17:19:21 +08:00
if ([model.FromUserInfo.enter_image isExist]) {
[[QXDrifNobilityJoinRoomView shareView] addNobilityUserModel:model];
}
2025-08-08 10:49:36 +08:00
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;
2025-10-20 09:43:10 +08:00
NSArray *arr = [model.GiftInfo.play_image componentsSeparatedByString:@","];
[[QXGiftPlayerManager shareManager] displayFullEffectViewWithMorePlayImages:arr];
2025-10-20 20:05:55 +08:00
[[QXGiftDisplayManager sharedManager] receiveGift:model];
2025-10-20 09:43:10 +08:00
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];
}
2025-08-08 10:49:36 +08:00
}
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:)]) {
2025-10-30 00:45:15 +08:00
if (!model.is_pk) {
// pk
[self.delegate didInsertMessge:model];
}
2025-08-08 10:49:36 +08:00
}
2025-10-30 00:45:15 +08:00
if (self.delegate && [self.delegate respondsToSelector:@selector(didUpDownSeatWithUser:isUpSeat:pit_number:isPK:)]) {
2025-08-08 10:49:36 +08:00
NSString *pit_number = [NSString stringWithFormat:@"%@",msg.Text[@"pit_number"]];
2025-10-30 00:45:15 +08:00
[self.delegate didUpDownSeatWithUser:model.FromUserInfo isUpSeat:YES pit_number:pit_number.integerValue isPK:model.is_pk];
2025-08-08 10:49:36 +08:00
}
}
break;
case QXRoomMessageTypeDownSeat:{
///
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
model.messageType = QXRoomChatMessageTypeSystem;
if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) {
2025-10-30 00:45:15 +08:00
if (!model.is_pk) {
// pk
[self.delegate didInsertMessge:model];
}
2025-08-08 10:49:36 +08:00
}
2025-10-30 00:45:15 +08:00
if (self.delegate && [self.delegate respondsToSelector:@selector(didUpDownSeatWithUser:isUpSeat:pit_number:isPK:)]) {
2025-08-08 10:49:36 +08:00
NSString *pit_number = [NSString stringWithFormat:@"%@",msg.Text[@"pit_number"]];
2025-10-30 00:45:15 +08:00
[self.delegate didUpDownSeatWithUser:model.FromUserInfo isUpSeat:NO pit_number:pit_number.integerValue isPK:model.is_pk];
2025-08-08 10:49:36 +08:00
}
}
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];
2025-10-20 09:43:10 +08:00
model.messageType = QXRoomChatMessageTypeGift;
2025-08-08 10:49:36 +08:00
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];
}
2025-10-20 09:43:10 +08:00
}
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];
2025-10-30 00:45:15 +08:00
if (self.delegate && [self.delegate respondsToSelector:@selector(roomSeatExchangedWithFromPitNumber:toPitNumber:userInfo:isPK:)]) {
[self.delegate roomSeatExchangedWithFromPitNumber:fromPitNumber toPitNumber:toPitNumber userInfo:model.FromUserInfo isPK:model.is_pk];
2025-10-20 09:43:10 +08:00
}
if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) {
2025-10-30 00:45:15 +08:00
if (!model.is_pk) {
// pk
model.messageType = QXRoomChatMessageTypeSystem;
[self.delegate didInsertMessge:model];
}
2025-10-20 09:43:10 +08:00
}
}
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];
2025-12-04 14:11:00 +08:00
// BOOL isOnline = type == 1?YES:NO;
2025-10-20 09:43:10 +08:00
// if (self.delegate && [self.delegate respondsToSelector:@selector(roomUserOnlineStatusDidChanged:userId:)]) {
// [self.delegate roomUserOnlineStatusDidChanged:YES userId:userId];
// }
NSDictionary *parm = @{
@"user_id":userId,
2025-12-04 14:11:00 +08:00
@"is_online":[NSNumber numberWithInteger:type],
2025-10-20 09:43:10 +08:00
};
[[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];
}
2025-08-08 10:49:36 +08:00
}
break;
2025-11-21 16:17:05 +08:00
case QXRoomMessageTypeSingerRoomCurrentSongDidChanged:{
QXUserSongListModel *songInfo = [QXUserSongListModel yy_modelWithJSON:msg.Text[@"song_info"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(singerSongCurrentSongInfoDidChanged:)]) {
[self.delegate singerSongCurrentSongInfoDidChanged:songInfo];
}
}
break;
case QXRoomMessageTypeSingerRoomNextSongDidChanged:{
QXUserSongListModel *songInfo = [QXUserSongListModel yy_modelWithJSON:msg.Text[@"next_song_info"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(singerSongNextSongInfoDidChanged:)]) {
[self.delegate singerSongNextSongInfoDidChanged:songInfo];
}
}
break;
case QXRoomMessageTypeSingerRoomSongCountDidChanged:{
NSString *songCount = [NSString stringWithFormat:@"%@",msg.Text[@"count"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(singerSongCountDidChanged:)]) {
[self.delegate singerSongCountDidChanged:songCount];
}
}
break;
2025-11-28 22:43:06 +08:00
case QXRoomMessageTypeCpJoinRoom:{
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
[[QXGiftPlayerManager shareManager] displayCpEffectView:model];
}
break;
case QXRoomMessageTypeStartSign:{
NSString *sign_id = [NSString stringWithFormat:@"%@",msg.Text[@"sign_id"]];
NSString *end_time = [NSString stringWithFormat:@"%@",msg.Text[@"end_time"]];
NSString *sign_day = [NSString stringWithFormat:@"%@",msg.Text[@"sign_day"]];
NSString *current_body_value = [NSString stringWithFormat:@"%@",msg.Text[@"current_body_value"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(signDidStartWithEndTime:signId:signDay:signValue:)]) {
[self.delegate signDidStartWithEndTime:end_time signId:sign_id signDay:sign_day signValue:current_body_value];
}
}
break;
case QXRoomMessageTypeEndSign:{
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
NSString *sign_value = [NSString stringWithFormat:@"%@",msg.Text[@"sign_value"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(signDidEndWithUserInfo1:userInfo2:sign_value:)]) {
[self.delegate signDidEndWithUserInfo1:model.FromUserInfo userInfo2:model.ToUserInfo sign_value:sign_value];
}
}
break;
case QXRoomMessageTypeDelaySignTime:{
NSString *end_time = [NSString stringWithFormat:@"%@",msg.Text[@"end_time"]];
if (self.delegate && [self.delegate respondsToSelector:@selector(signTimeDelayWithEndTime:)]) {
[self.delegate signTimeDelayWithEndTime:end_time];
}
}
break;
case QXRoomMessageTypeSignBodyPriceDidChanged:{
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
NSString *sign_id = [NSString stringWithFormat:@"%@",msg.Text[@"sign_id"]];
NSString *sign_value = [NSString stringWithFormat:@"%@",msg.Text[@"sign_value"]];
2025-12-01 18:42:49 +08:00
NSArray *sign_coin_list;
id object = msg.Text[@"sign_coin_list"];
if ([object isKindOfClass:[NSArray class]]) {
sign_coin_list = object;
}
if (self.delegate && [self.delegate respondsToSelector:@selector(signValueDidChangedWithSignUserInfo:sign_value:signId:sign_coin_list:)]) {
[self.delegate signValueDidChangedWithSignUserInfo:model.FromUserInfo sign_value:sign_value signId:sign_id sign_coin_list:sign_coin_list];
2025-11-28 22:43:06 +08:00
}
}
break;
2025-08-08 10:49:36 +08:00
default:
break;
}
}
}
/**
/// pk
QXRoomMessageTypeRoomRecieveInvitePk = 1029,
/// pk
QXRoomMessageTypeRoomPKAgreeOrRefuse = 1030,
/// pk
QXRoomMessageTypeRoomPKStart = 1031,
/// pk
QXRoomMessageTypeRoomPKEnd = 1032,
/// pk
QXRoomMessageTypeRoomPKDisconnect = 1033,
*/
2025-11-21 16:17:05 +08:00
-(void)reSendGiftWithId:(NSString*)giftId userId:(NSString*)userId{
MJWeakSelf
[QXMineNetwork userCpReSendWithGiftId:giftId userId:userId roomId:self.roomId successBlock:^(NSDictionary * _Nonnull dict) {
id object = dict[@"cp_type"];
if ([object isKindOfClass:[NSDictionary class]]) {
NSDictionary *cpDict = (NSDictionary *)object;
NSString *cp_type = object[@"cp_type"];
if (cp_type.intValue == 1) {
/// cp
NSString *jsonStr = [cpDict jsonStringEncoded];
[[QXRoomMessageManager shared] sendC2CMessage:jsonStr messageType:(QXRoomMessageTypeSendAndRecieveCpHeartSignal) userId:userId];
}else if (cp_type.intValue == 2){
/// cp
NSString *jsonStr = [cpDict jsonStringEncoded];
[[QXRoomMessageManager shared] sendC2CMessage:jsonStr messageType:(QXRoomMessageTypeCpHeartFinished) userId:userId];
NSString *message = [NSString stringWithFormat:@"%@",cpDict[@"text"]];
[weakSelf showCpFinishedAlertViewWithText:message];
}else{
}
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
}];
}
-(void)showCpFinishedAlertViewWithText:(NSString*)text{
QXCustomAlertView *alertView = [[QXCustomAlertView alloc] init];
[alertView showInView:KEYWINDOW title:@"缘定三生 此刻同心" message:text cancleTitle:@"稍后进入" commitTitle:@"进入心动空间"];
alertView.commitBlock = ^{
QXLOG(@"进入心动空间");
2025-11-28 22:43:06 +08:00
QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
QXRoomNavigationController *navagationController = (QXRoomNavigationController*)KEYWINDOW.rootViewController;
vc.userId = QXGlobal.shareGlobal.loginModel.user_id;
[navagationController pushViewController:vc animated:YES];
2025-11-21 16:17:05 +08:00
};
}
2025-08-08 10:49:36 +08:00
-(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];
}
2025-11-21 16:17:05 +08:00
}else if (meesageType == QXRoomMessageTypeSendAndRecieveCpHeartSignal){
NSString *json = [NSString stringWithFormat:@"%@",msg.Text[@"text"]];
NSDictionary *dict = [json jsonValueDecoded];
NSString *message = [NSString stringWithFormat:@"%@",dict[@"text1"]];
__block NSString *gift_id = [NSString stringWithFormat:@"%@",dict[@"gift_id"]];
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
QXCustomAlertView *alertView = [[QXCustomAlertView alloc] init];
[alertView showInView:KEYWINDOW title:@"心动信号" message:message cancleTitle:@"再想想" commitTitle:@"回赠"];
MJWeakSelf
alertView.commitBlock = ^{
[weakSelf reSendGiftWithId:gift_id userId:model.FromUserInfo.user_id];
};
}else if (meesageType == QXRoomMessageTypeCpHeartFinished){
NSString *json = [NSString stringWithFormat:@"%@",msg.Text[@"text"]];
NSDictionary *dict = [json jsonValueDecoded];
NSString *message = [NSString stringWithFormat:@"%@",dict[@"text1"]];
[self showCpFinishedAlertViewWithText:message];
2025-08-08 10:49:36 +08:00
}
}
-(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];
2025-10-20 09:43:10 +08:00
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];
2025-11-21 16:17:05 +08:00
// NSInteger is_mute = [[dict objectForKey:@"is_mute"] integerValue];
2025-10-20 09:43:10 +08:00
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];
2025-10-24 10:52:40 +08:00
}else if (meesageType == QXRoomMessageTypeEmoji) {
QXRoomChatListModel *model = [QXRoomChatListModel yy_modelWithJSON:msg.Text];
model.messageType = QXRoomChatMessageTypeEmoji;
if (self.delegate && [self.delegate respondsToSelector:@selector(didInsertMessge:)]) {
[self.delegate didInsertMessge:model];
}
2025-08-08 10:49:36 +08:00
}
}
}
-(void)sendChatMessage:(NSString *)message messageType:(QXRoomMessageType)messageType needInsertMessage:(BOOL)needInsertMessage{
NSDictionary *dict = @{
2025-10-20 09:43:10 +08:00
@"RoomId":self.roomId?self.roomId:@"",
2025-08-08 10:49:36 +08:00
@"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:@"",
2025-10-24 10:52:40 +08:00
@"chat_bubble":[QXGlobal shareGlobal].loginModel.chat_bubble?:@"",
2025-11-11 17:19:21 +08:00
@"nobility_image":[QXGlobal shareGlobal].loginModel.nobility_image?:@"",
@"nickname_color":[QXGlobal shareGlobal].loginModel.nickname_color?:@"",
2025-08-08 10:49:36 +08:00
},
@"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;
2025-10-24 10:52:40 +08:00
userInfo.chat_bubble = [QXGlobal shareGlobal].loginModel.chat_bubble;
2025-11-11 17:19:21 +08:00
userInfo.nobility_image = [QXGlobal shareGlobal].loginModel.nobility_image;
userInfo.nickname_color = [QXGlobal shareGlobal].loginModel.nickname_color;
2025-08-08 10:49:36 +08:00
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(@"发送自定义消息失败");
}];
}
2025-10-24 10:52:40 +08:00
-(void)sendChatEmoji:(QXEmojiModel *)emoji{
2025-08-08 10:49:36 +08:00
NSDictionary *dict = @{
2025-10-20 09:43:10 +08:00
@"RoomId":self.roomId?self.roomId:@"",
2025-10-24 10:52:40 +08:00
@"MsgType":[NSNumber numberWithInteger:QXRoomMessageTypeEmoji],
2025-08-08 10:49:36 +08:00
@"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:@"",
2025-10-24 10:52:40 +08:00
@"chat_bubble":[QXGlobal shareGlobal].loginModel.chat_bubble?:@"",
2025-11-11 17:19:21 +08:00
@"nobility_image":[QXGlobal shareGlobal].loginModel.nobility_image?:@"",
@"nickname_color":[QXGlobal shareGlobal].loginModel.nickname_color?:@"",
2025-10-24 10:52:40 +08:00
},
@"emoji":@{
@"image":emoji.image?:@"",
@"animate_image":emoji.animate_image?:@""
},
@"text":@""
}
};
QXRoomChatListModel *model = [[QXRoomChatListModel alloc] init];
model.text = @"";
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;
userInfo.chat_bubble = [QXGlobal shareGlobal].loginModel.chat_bubble;
2025-11-11 17:19:21 +08:00
userInfo.nobility_image = [QXGlobal shareGlobal].loginModel.nobility_image;
userInfo.nickname_color = [QXGlobal shareGlobal].loginModel.nickname_color;
2025-10-24 10:52:40 +08:00
model.FromUserInfo = userInfo;
model.messageType = QXRoomChatMessageTypeEmoji;
model.emoji = emoji;
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?:@"",
@"nickname":[QXGlobal shareGlobal].loginModel.nickname?:@"",
@"avatar":[QXGlobal shareGlobal].loginModel.avatar?:@"",
@"icon":[QXGlobal shareGlobal].loginModel.icon?:@"",
@"chat_bubble":[QXGlobal shareGlobal].loginModel.chat_bubble?:@"",
2025-08-08 10:49:36 +08:00
},
@"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:^{
2025-11-21 16:17:05 +08:00
QXLOG(@"c2c发送成功");
2025-08-08 10:49:36 +08:00
} fail:^(int code, NSString * _Nullable desc) {
2025-11-21 16:17:05 +08:00
QXLOG(@"c2c发送失败");
2025-08-08 10:49:36 +08:00
}];
}
@end
@implementation QXRoomMessage
@end