Files
yinmeng-ios/xplan-ios/Main/Room/View/XPRoomViewController.m

1785 lines
76 KiB
Mathematica
Raw Normal View History

//
// XPRoomViewController.m
// xplan-ios
//
// Created by on 2021/10/11.
//
#import "XPRoomViewController.h"
///Third
#import <Masonry/Masonry.h>
2021-12-02 00:09:04 +08:00
#import <NIMSDK/NIMSDK.h>
///Tool
#import "XPMacro.h"
#import "XPConstant.h"
2021-10-19 18:30:03 +08:00
#import "AccountInfoStorage.h"
2021-10-22 17:40:52 +08:00
#import "RtcManager.h"
#import "XPRoomMiniManager.h"
2021-12-20 21:17:12 +08:00
#import "TTPopup.h"
#import "Api+ArrangeMic.h"
2022-04-18 22:36:16 +08:00
#import "Api+Room.h"
#import "DESEncrypt.h"
2022-10-10 18:01:11 +08:00
#import "StatisticsServiceHelper.h"
///Model
#import "RoomInfoModel.h"
2021-10-19 18:30:03 +08:00
#import "UserInfoModel.h"
2021-12-02 00:09:04 +08:00
#import "AttachmentModel.h"
2021-12-21 12:05:31 +08:00
#import "ArrangeMicModel.h"
2022-01-13 18:11:14 +08:00
#import "XPReleaseRadioModel.h"
2022-03-16 11:48:00 +08:00
#import "XPNobleTrumpetModel.h"
2022-04-18 22:36:16 +08:00
#import "GuildSuperAdminInfoModel.h"
2022-04-26 21:45:40 +08:00
#import "XPKickUserModel.h"
#import "ContentLevelUpgradeModel.h"
#import "XPReceiveRedPacketModel.h"
#import "XPRedPacketModel.h"
///View
2021-10-29 18:17:27 +08:00
#import "BaseNavigationController.h"
#import "XPRoomActivityContainerView.h"
#import "XPRoomBackContainerView.h"
#import "XPRoomMenuContainerView.h"
2022-09-29 14:18:59 +08:00
#import "XPRoomQuickMessageContainView.h"
#import "XPRoomMessageContainerView.h"
#import "RoomHeaderView.h"
2021-10-26 19:14:01 +08:00
#import "SocialStageView.h"
2022-01-04 21:41:06 +08:00
#import "DatingStageView.h"
2022-02-14 20:23:26 +08:00
#import "AnchorStageView.h"
2022-02-14 14:22:03 +08:00
#import "LittleGameStageView.h"
2022-04-11 19:11:34 +08:00
#import "AnchorPkStageView.h"
2022-05-05 19:03:22 +08:00
#import "LittleGameScrollStageView.h"
#import "XPRoomAnimationView.h"
2021-12-15 18:12:55 +08:00
#import "XPRoomFunctionContainerView.h"
2021-12-20 21:17:12 +08:00
#import "XPArrangeMicViewController.h"
#import "XPRoomSettingInputView.h"
2022-02-14 19:29:29 +08:00
#import "XPRoomLittleGameContainerView.h"
2022-07-11 19:05:09 +08:00
#import "AnchorRoomScrollView.h"
#import "AnchorRoomSrollTipView.h"
2022-09-02 18:59:36 +08:00
#import "XPReceiveRedPacketView.h"
2021-10-19 18:30:03 +08:00
///P
#import "XPRoomPresenter.h"
#import "XPRoomProtocol.h"
#import "RoomHostDelegate.h"
#import "RoomGuestDelegate.h"
2022-08-30 16:26:44 +08:00
#import "XCHUDTool.h"
2021-12-29 18:17:54 +08:00
UIKIT_EXTERN NSString * const kRoomGiftEffectUpdateNotificationKey;
UIKIT_EXTERN NSString * const kRoomMiniNotificationKey;
2022-07-28 11:56:59 +08:00
UIKIT_EXTERN NSString * kNewUserRechargeKey;
2021-12-29 18:17:54 +08:00
NSString * const kHadShowAnchorRoomTipKey = @"kHadShowAnchorRoomTipKey";//
2022-07-28 11:56:59 +08:00
NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//退
2021-12-29 18:17:54 +08:00
@interface XPRoomViewController ()<XPRoomProtocol, RoomHostDelegate, NIMChatroomManagerDelegate, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMLoginManagerDelegate, XPRoomSettingInputViewDelegate,XPRoomLittleGameContainerViewDelegate, AnchorRoomScrollViewDelegate>
///
@property (nonatomic,strong) XPRoomBackContainerView *backContainerView;
2022-07-11 19:05:09 +08:00
///view
@property (nonatomic, strong) AnchorRoomScrollView *anchorScrollView;
///
@property (nonatomic,strong) RoomHeaderView *roomHeaderView;
///
2022-01-04 21:41:06 +08:00
@property (nonatomic,strong) StageView *stageView;
///
@property (nonatomic,strong) XPRoomMessageContainerView *messageContainerView;
2022-09-29 14:18:59 +08:00
///
@property (nonatomic, strong) XPRoomQuickMessageContainView *quickMessageContainerView;
///
@property (nonatomic,strong) XPRoomMenuContainerView *menuContainerView;
///
@property (nonatomic,strong) XPRoomActivityContainerView *activityContainerView;
///view
@property (nonatomic,strong) XPRoomAnimationView *animationView;
2021-12-15 18:12:55 +08:00
///view
@property (nonatomic,strong) XPRoomFunctionContainerView *functionView;
2022-02-14 19:29:29 +08:00
///
@property (nonatomic,strong) XPRoomLittleGameContainerView *littleGameView;
///Uid
2021-10-29 18:17:27 +08:00
@property (nonatomic,copy) NSString * roomUid;
///id
@property (nonatomic,copy) NSString *mgId;
2022-08-04 18:22:31 +08:00
///id
@property (nonatomic, copy) NSString *giftId;
2021-10-19 18:30:03 +08:00
///
2021-10-26 19:14:01 +08:00
@property (nonatomic,strong) UserInfoModel *userInfo;
2021-10-19 18:30:03 +08:00
///
@property (nonatomic,strong) RoomInfoModel *roomInfo;
///
@property (nonatomic,assign) BOOL hasAnimationEffect;
///
@property (nonatomic,copy) NSString *fromNick;
@property (nonatomic,assign) UserEnterRoomFromType fromType;
@property (nonatomic,copy) NSString *fromUid;
2022-04-18 22:36:16 +08:00
///
@property (nonatomic,strong) NSArray<GuildSuperAdminInfoModel *> *superMangerList;
///
@property (nonatomic,assign) BOOL isRequestSuperAdmin;
///
@property (nonatomic,assign) BOOL isMiniEnter;
///
@property (nonatomic, strong) AnchorRoomSrollTipView *anchorScrollTipView;
2022-07-11 19:05:09 +08:00
2022-08-10 21:39:39 +08:00
///
@property (nonatomic,strong) NSMutableArray<NSString *> *anchorRoomList;
///
2022-08-11 11:33:38 +08:00
@property (nonatomic,assign) NSInteger anchorIndex;
2022-08-10 21:39:39 +08:00
@end
@implementation XPRoomViewController
2021-10-29 18:17:27 +08:00
+ (BOOL)openRoom:(NSString *)roomUid viewController:(UIViewController *)viewController {
return [self openRoom:roomUid fromNick:nil fromType:0 fromUid:nil viewController:viewController];
}
2022-06-07 16:16:27 +08:00
+ (BOOL) openRoom:(NSString*)roomUid fromNick:(NSString * __nullable)fromNick fromType:(UserEnterRoomFromType)fromType fromUid:(NSString * __nullable)fromUid viewController:(UIViewController*)viewController {
XPRoomViewController * roomVC = [[self alloc] init];
roomVC.roomUid = roomUid;
roomVC.fromUid = fromUid;
roomVC.fromType = fromType;
roomVC.fromNick = fromNick;
BaseNavigationController * baseNav = [[BaseNavigationController alloc] initWithRootViewController:roomVC];
baseNav.modalPresentationStyle = UIModalPresentationFullScreen;
[viewController presentViewController:baseNav animated:YES completion:nil];
return YES;
2021-10-29 18:17:27 +08:00
}
2021-10-19 18:30:03 +08:00
/**
* @params roomUid uid
* @params viewController
*/
+ (BOOL)openMiniRoom:(NSString*)roomUid viewController:(UIViewController*)viewController {
XPRoomViewController * roomVC = [[self alloc] init];
roomVC.roomUid = roomUid;
roomVC.isMiniEnter = YES;
BaseNavigationController * baseNav = [[BaseNavigationController alloc] initWithRootViewController:roomVC];
baseNav.modalPresentationStyle = UIModalPresentationFullScreen;
[viewController presentViewController:baseNav animated:YES completion:nil];
return roomVC;
}
/** XPRoomViewController init
* @params roomUid uid
* @params viewController
* @params mgId id
*/
+ (BOOL)openRoom:(NSString*)roomUid mgId:(NSString *)mgId viewController:(UIViewController*)viewController {
XPRoomViewController * roomVC = [[self alloc] init];
roomVC.roomUid = roomUid;
roomVC.mgId = mgId;
BaseNavigationController * baseNav = [[BaseNavigationController alloc] initWithRootViewController:roomVC];
baseNav.modalPresentationStyle = UIModalPresentationFullScreen;
[viewController presentViewController:baseNav animated:YES completion:nil];
return YES;
}
2022-08-04 18:22:31 +08:00
/// h5
/// @param roomUid Uid
/// @param giftId id
/// @param viewController
+ (BOOL)openRoom:(NSString *)roomUid giftId:(NSString *)giftId viewController:(UIViewController *)viewController {
2022-11-01 15:04:09 +08:00
XPRoomViewController * roomVC = [[self alloc] init];
roomVC.roomUid = roomUid;
roomVC.giftId = giftId;
BaseNavigationController * baseNav = [[BaseNavigationController alloc] initWithRootViewController:roomVC];
baseNav.modalPresentationStyle = UIModalPresentationFullScreen;
[viewController presentViewController:baseNav animated:YES completion:nil];
return YES;
2022-08-04 18:22:31 +08:00
}
2021-10-19 18:30:03 +08:00
- (void)dealloc {
#warning to dox -
NSLog(@"房间销毁了");
[[NIMSDK sharedSDK].chatroomManager removeDelegate:self];
[[NIMSDK sharedSDK].chatManager removeDelegate:self];
[[NIMSDK sharedSDK].loginManager removeDelegate:self];
2022-06-14 14:51:47 +08:00
[[NIMSDK sharedSDK].conversationManager removeDelegate:self];
[[NSNotificationCenter defaultCenter] removeObserver:self];
2021-10-19 18:30:03 +08:00
}
- (XPRoomPresenter *)createPresenter {
2022-11-01 15:04:09 +08:00
return [[XPRoomPresenter alloc] init];
2021-10-19 18:30:03 +08:00
}
- (BOOL)isHiddenNavBar {
2022-11-01 15:04:09 +08:00
return YES;
}
- (void)viewDidLoad {
2022-08-10 21:39:39 +08:00
[super viewDidLoad];
2021-12-03 19:10:35 +08:00
[self exitOldRoom];
2022-11-01 15:04:09 +08:00
[self initSubViews];
[self initSubViewConstraints];
if (self.isMiniEnter) {
[self initEnterRoomSuccess:[XPRoomMiniManager shareManager].getRoomInfo user:[XPRoomMiniManager shareManager].getUserInfo];
} else {
2022-08-30 16:26:44 +08:00
[XCHUDTool showAnchorLoading:self.navigationController.view];
[self.presenter initEnterRoom:self.roomUid user:[AccountInfoStorage instance].getUid];
}
2021-11-17 19:29:14 +08:00
///
[self.presenter getNormalGiftList:self.roomUid];
2022-04-18 22:36:16 +08:00
///
[self.presenter getRoomSuperAdmin:self.roomUid];
2022-06-14 14:51:47 +08:00
//x
2021-12-02 00:09:04 +08:00
[[NIMSDK sharedSDK].chatroomManager addDelegate:self];
2022-11-01 15:04:09 +08:00
[[NIMSDK sharedSDK].chatManager addDelegate:self];
[[NIMSDK sharedSDK].loginManager addDelegate:self];
2022-06-14 14:51:47 +08:00
[[NIMSDK sharedSDK].conversationManager addDelegate:self];
2021-12-25 18:34:54 +08:00
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myGiftEffectUpdate:) name:kRoomGiftEffectUpdateNotificationKey object:nil];
2021-10-21 17:55:51 +08:00
}
2021-10-29 15:53:44 +08:00
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self.menuContainerView menuResignFirstResponder];
2021-10-29 15:53:44 +08:00
}
2021-11-04 17:48:32 +08:00
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
2022-11-01 15:04:09 +08:00
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
2021-11-18 18:43:20 +08:00
#pragma mark - Private Method
- (void)initSubViews {
2022-11-01 15:04:09 +08:00
[self.view addSubview:self.backContainerView];
[self.view addSubview:self.littleGameView];
2022-11-01 15:04:09 +08:00
[self.view addSubview:self.stageView];
[self.view addSubview:self.messageContainerView];
[self.view addSubview:self.quickMessageContainerView];
[self.view addSubview:self.menuContainerView];
[self.view addSubview:self.activityContainerView];
2022-01-24 11:39:01 +08:00
[self.view addSubview:self.roomHeaderView];
[self.view addSubview:self.functionView];
[self.view addSubview:self.animationView];
}
- (void)initSubViewConstraints {
2022-11-01 15:04:09 +08:00
[self.backContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
[self.roomHeaderView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.mas_equalTo(self.view);
make.height.mas_equalTo(kNavigationHeight);
}];
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
make.height.mas_equalTo(self.stageView.hightForStageView);
2022-11-01 15:04:09 +08:00
}];
[self.messageContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.stageView.mas_bottom);
make.bottom.equalTo(self.quickMessageContainerView.mas_top).offset(-5);
make.left.equalTo(self.view);
make.right.equalTo(self.activityContainerView.mas_left).offset(-10);
}];
CGFloat quickMsgHeight = 30;
//
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber *closeCount = [defaults objectForKey:kRoomQuickMessageCloseCount];
2022-10-31 17:31:59 +08:00
if (closeCount.intValue > 3) {
quickMsgHeight = 0;
} else {
quickMsgHeight = 30;
}
2022-11-01 15:04:09 +08:00
[self.quickMessageContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.menuContainerView.mas_top);
make.height.mas_equalTo(quickMsgHeight);
make.left.right.mas_equalTo(self.view);
}];
[self.menuContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.bottom.mas_equalTo(-kSafeAreaBottomHeight- 8);
make.height.mas_equalTo(40);
}];
[self.activityContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.messageContainerView);
make.right.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
make.width.mas_equalTo(80);
}];
[self.animationView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
[self.functionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
2022-02-14 19:29:29 +08:00
[self.littleGameView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
}
2021-10-26 19:14:01 +08:00
- (void)updateViewConstraintsOnAnchorRoom {
2022-11-01 15:04:09 +08:00
[self.anchorScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
[self.backContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.anchorScrollView.middleImageView);
}];
[self.roomHeaderView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.mas_equalTo(self.anchorScrollView.middleImageView);
make.height.mas_equalTo(kNavigationHeight);
}];
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.anchorScrollView.middleImageView);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
[self.messageContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.stageView.mas_bottom);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5);
make.left.equalTo(self.anchorScrollView.middleImageView);
make.right.equalTo(self.activityContainerView.mas_left).offset(-10);
}];
[self.quickMessageContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(30);
make.bottom.mas_equalTo(self.backContainerView).mas_offset(-5-40-8-kSafeAreaBottomHeight);
make.left.equalTo(self.anchorScrollView.middleImageView);
make.right.equalTo(self.activityContainerView.mas_left).offset(-10);
}];
[self.menuContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.anchorScrollView.middleImageView);
make.bottom.mas_equalTo(self.anchorScrollView.middleImageView).offset(-kSafeAreaBottomHeight- 8);
make.height.mas_equalTo(40);
}];
[self.activityContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.messageContainerView);
make.right.mas_equalTo(self.anchorScrollView.middleImageView);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5);
make.width.mas_equalTo(80);
}];
[self.functionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.anchorScrollView.middleImageView);
}];
2022-07-11 19:05:09 +08:00
}
2021-12-03 19:10:35 +08:00
- (void)exitOldRoom {
NSString * roomUid = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.uid];
2021-12-03 19:10:35 +08:00
if (roomUid.integerValue > 0 && roomUid.integerValue != self.roomUid.integerValue) {
// 退
NSString * roomId = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.roomId];
[self.presenter exitNIMRoom:roomId];
2021-12-03 19:10:35 +08:00
[[RtcManager instance] exitRoom];
[[XPRoomMiniManager shareManager] resetLocalMessage];
2022-11-01 15:04:09 +08:00
[self.presenter reportUserOutRoom:roomUid];
2021-12-03 19:10:35 +08:00
}
}
2021-12-16 20:22:01 +08:00
- (void)userEnterRoomSuccess {
2022-11-01 15:04:09 +08:00
AttachmentModel *attachment = [[AttachmentModel alloc]init];
attachment.first = CustomMessageType_Car_Notify;
attachment.second = Custom_Message_Sub_Car_EnterRoom;
NSMutableDictionary *att = [NSMutableDictionary dictionary];
if (self.userInfo.userVipInfoVO.enterHide) {///,
return;
}
if (self.userInfo.viewUrl.length > 0) {
[att setValue:self.userInfo.nick forKey:@"nick"];
[att setValue:self.userInfo.viewUrl forKey:@"viewUrl"];
[att setValue:@(self.userInfo.otherViewType) forKey:@"otherViewType"];
} else if (self.userInfo.carEffect.length > 0) {
2021-12-16 20:22:01 +08:00
[att setValue:self.userInfo.carEffect forKey:@"effect"];
[att setValue:self.userInfo.nick forKey:@"nick"];
2022-11-01 15:04:09 +08:00
} else {
return;
}
attachment.data = att;
NSString *sessionID = [NSString stringWithFormat:@"%ld",self.roomInfo.roomId];
NIMMessage *message = [[NIMMessage alloc]init];
NIMCustomObject *object = [[NIMCustomObject alloc] init];
object.attachment = attachment;
message.messageObject = object;
//
NIMSession *session = [NIMSession session:sessionID type:NIMSessionTypeChatroom];
[[NIMSDK sharedSDK].chatManager sendMessage:message toSession:session error:nil];
2021-12-16 20:22:01 +08:00
}
2022-01-04 21:41:06 +08:00
- (void)changeStageViewOnRoomUpdate {
if (self.roomInfo.roomModeType == RoomModeType_Open_Blind && ![self.stageView isKindOfClass:[DatingStageView class]]) {
2022-01-04 21:41:06 +08:00
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[DatingStageView alloc] initWithDelegate:self];
} else if(self.roomInfo.datingState == RoomDatingStateChangeType_Close && ![self.stageView isKindOfClass:[SocialStageView class]]) {
2022-01-04 21:41:06 +08:00
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[SocialStageView alloc] initWithDelegate:self];
} else if (self.roomInfo.type == RoomType_Anchor) {
2022-11-01 15:04:09 +08:00
if (self.roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode && ![self.stageView isKindOfClass:[AnchorPKStageView class]]) {
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[AnchorPKStageView alloc] initWithDelegate:self];
} else if(self.roomInfo.roomModeType == RoomModeType_Normal_Mode && ![self.stageView isKindOfClass:[AnchorStageView class]]) {
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[AnchorStageView alloc] initWithDelegate:self];
}
} else if(self.roomInfo.type == RoomType_MiniGame) {
if (self.roomInfo.mgMicNum > 6 && ![self.stageView isKindOfClass:[LittleGameScrollStageView class]]) {
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[LittleGameScrollStageView alloc] initWithDelegate:self];
} else if (self.roomInfo.mgMicNum <= 6 && ![self.stageView isKindOfClass:[LittleGameStageView class]]) {
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[LittleGameStageView alloc] initWithDelegate:self];
}
2022-02-14 14:22:03 +08:00
}else if(self.roomInfo.hadChangeRoomType && ![self.stageView isKindOfClass:[SocialStageView class]]) {
2022-11-01 15:04:09 +08:00
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[SocialStageView alloc] initWithDelegate:self];
} else {
return;
}
2022-02-15 17:59:05 +08:00
2022-02-14 14:22:03 +08:00
2022-01-04 21:41:06 +08:00
if (!self.stageView.superview) {
2022-02-14 19:29:29 +08:00
[self.view insertSubview:self.stageView belowSubview:self.roomHeaderView];
2022-01-04 21:41:06 +08:00
}
2022-11-01 15:04:09 +08:00
2022-01-04 21:41:06 +08:00
2022-02-14 14:22:03 +08:00
if (self.roomInfo.type == RoomType_MiniGame) {
2022-02-15 14:38:09 +08:00
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom).offset(26 + 4);
2022-02-15 14:38:09 +08:00
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
2022-02-14 14:22:03 +08:00
[self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
2022-02-15 15:38:57 +08:00
make.height.mas_equalTo(70);
2022-09-29 14:18:59 +08:00
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
2022-02-14 14:22:03 +08:00
make.left.mas_equalTo(self.view);
make.right.mas_equalTo(self.activityContainerView.mas_left).offset(-10);
}];
[self.activityContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
2022-02-15 15:38:57 +08:00
make.height.mas_equalTo(65);
2022-02-14 14:22:03 +08:00
make.right.mas_equalTo(self.view);
2022-09-29 14:18:59 +08:00
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
2022-02-14 14:22:03 +08:00
make.width.mas_equalTo(80);
}];
} else {
2022-02-15 14:38:09 +08:00
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
2022-02-14 14:22:03 +08:00
[self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.stageView.mas_bottom);
2022-09-29 14:18:59 +08:00
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
2022-02-14 14:22:03 +08:00
make.left.mas_equalTo(self.view);
make.right.mas_equalTo(self.activityContainerView.mas_left).offset(-10);
}];
[self.activityContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.messageContainerView);
make.right.mas_equalTo(self.view);
2022-09-29 14:18:59 +08:00
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
2022-02-14 14:22:03 +08:00
make.width.mas_equalTo(80);
}];
}
2022-01-04 21:41:06 +08:00
}
2022-07-11 19:05:09 +08:00
- (void)changeStageViewOnAnchorRoom {
2022-11-01 15:04:09 +08:00
if (self.roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode && ![self.stageView isKindOfClass:[AnchorPKStageView class]]) {
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[AnchorPKStageView alloc] initWithDelegate:self];
} else if(self.roomInfo.roomModeType == RoomModeType_Normal_Mode && ![self.stageView isKindOfClass:[AnchorStageView class]]) {
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[AnchorStageView alloc] initWithDelegate:self];
}
if (!self.stageView.superview) {
[self.anchorScrollView insertSubview:self.stageView belowSubview:self.roomHeaderView];
}
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.anchorScrollView.middleImageView);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
[self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.stageView.mas_bottom);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5);
make.left.mas_equalTo(self.anchorScrollView.middleImageView);
make.right.mas_equalTo(self.activityContainerView.mas_left).offset(-10);
}];
2022-10-31 17:31:59 +08:00
CGFloat quickMsgHeight = 30;
//
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber *closeCount = [defaults objectForKey:kRoomQuickMessageCloseCount];
2022-11-01 15:04:09 +08:00
if (closeCount.intValue > 3 || self.roomInfo.speakTemplate.count <=0) {
2022-10-31 17:31:59 +08:00
quickMsgHeight = 0;
} else {
quickMsgHeight = 30;
}
2022-11-01 15:04:09 +08:00
self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate;
[self.quickMessageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(quickMsgHeight);
make.bottom.mas_equalTo(self.backContainerView).mas_offset(-5-40-8-kSafeAreaBottomHeight);
make.left.right.mas_equalTo(self.anchorScrollView.middleImageView);
}];
[self.activityContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.messageContainerView);
make.right.mas_equalTo(self.anchorScrollView.middleImageView);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5);
make.width.mas_equalTo(80);
}];
}
- (void)cancelRoomArrangeMic {
///退
if (self.roomInfo.roomModeType == RoomModeType_Open_Micro_Mode || self.roomInfo.roomModeType == RoomModeType_Open_Blind) {
NSString * roomUid = [NSString stringWithFormat:@"%ld", self.roomInfo.uid];
NSString * uid = [AccountInfoStorage instance].getUid;
[Api getRoomArrangeMicList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
ArrangeMicModel * arrangeMicModel= [ArrangeMicModel modelWithJSON:data.data];
if (arrangeMicModel.myPos.intValue > 0) {
__block NSString * grouptype = @"0";
if (self.roomInfo.roomModeType == RoomModeType_Open_Blind) {
[arrangeMicModel.queue enumerateObjectsUsingBlock:^(ArrangeMicUserModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.uid.integerValue == [AccountInfoStorage instance].getUid.integerValue) {
grouptype = [NSString stringWithFormat:@"%ld", obj.groupType];
*stop = YES;
}
}];
}
[Api cancelArrangeMic:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {} roomUid:roomUid operUid:uid groupType:grouptype];
}
}
} roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"];
2022-04-01 14:24:58 +08:00
}else if(self.roomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
NSString * roomUid = [NSString stringWithFormat:@"%ld", self.roomInfo.uid];
NSString * uid = [AccountInfoStorage instance].getUid;
[Api getRoomPKUserList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
ArrangeMicModel * arrangeMicModel= [ArrangeMicModel modelWithJSON:data.data];
if (arrangeMicModel.myPos.intValue > 0) {
__block NSString * grouptype = @"0";
[arrangeMicModel.queue enumerateObjectsUsingBlock:^(ArrangeMicUserModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.uid.integerValue == [AccountInfoStorage instance].getUid.integerValue) {
grouptype = [NSString stringWithFormat:@"%ld", obj.groupType];
*stop = YES;
}
}];
[Api cancelRoomPKArrangeMic:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
} roomUid:roomUid operUid:uid groupType:grouptype];
}
}
} roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"];
}
}
2022-04-18 22:36:16 +08:00
///
- (void)superAdminEnterPwdRoom:(RoomInfoModel *)roomInfo {
__block BOOL isSuperAdmin = NO;
[self.superMangerList enumerateObjectsUsingBlock:^(GuildSuperAdminInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj.uid isEqualToString:[AccountInfoStorage instance].getUid]) {
isSuperAdmin = YES;
*stop = YES;
}
}];
if (!isSuperAdmin) {
XPRoomSettingInputView * titleView = [[XPRoomSettingInputView alloc] init];
titleView.maxCount = 15;
titleView.delegate = self;
titleView.type = RoomSettingInputType_Input_Pwd;
TTPopupConfig * config = [[TTPopupConfig alloc] init];
config.contentView = titleView;
config.maskBackgroundAlpha = 1;
config.shouldDismissOnBackgroundTouch = NO;
[TTPopup popupWithConfig:config];
} else {
self.roomInfo.datingState = roomInfo.roomModeType == RoomModeType_Open_Blind ? RoomDatingStateChangeType_Open : RoomDatingStateChangeType_Normal;
[self changeStageViewOnRoomUpdate];
[self.roomHeaderView onRoomEntered];
[self.activityContainerView onRoomEntered];
[self.menuContainerView onRoomEntered];
[self.backContainerView onRoomEntered];
[self.littleGameView onRoomEntered];
if ([XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {// 退
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
[self.functionView onRoomEntered];
[self.messageContainerView onRoomEntered];
} else {
//退
[self.stageView onRoomMiniEntered];
2022-04-18 22:36:16 +08:00
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
2022-04-18 22:36:16 +08:00
[self.functionView onRoomEntered];
}
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
2022-04-18 22:36:16 +08:00
}
}
///
- (void)handleSuperManagerEnterAnchorRoom:(RoomInfoModel *)roomInfo {
2022-11-01 15:04:09 +08:00
__block BOOL isSuperAdmin = NO;
[self.superMangerList enumerateObjectsUsingBlock:^(GuildSuperAdminInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj.uid isEqualToString:[AccountInfoStorage instance].getUid]) {
isSuperAdmin = YES;
*stop = YES;
}
}];
if (!isSuperAdmin) {
XPRoomSettingInputView * titleView = [[XPRoomSettingInputView alloc] init];
titleView.maxCount = 15;
titleView.delegate = self;
titleView.type = RoomSettingInputType_Input_Pwd;
TTPopupConfig * config = [[TTPopupConfig alloc] init];
config.contentView = titleView;
config.maskBackgroundAlpha = 1;
config.shouldDismissOnBackgroundTouch = NO;
[TTPopup popupWithConfig:config];
} else {
self.roomInfo.datingState = roomInfo.roomModeType == RoomModeType_Open_Blind ? RoomDatingStateChangeType_Open : RoomDatingStateChangeType_Normal;
if (!self.anchorScrollView.superview) {
[self.view insertSubview:self.anchorScrollView belowSubview:self.menuContainerView];
}
[self.backContainerView removeFromSuperview];
[self.stageView removeFromSuperview];
[self.messageContainerView removeFromSuperview];
[self.quickMessageContainerView removeFromSuperview];
[self.activityContainerView removeFromSuperview];
[self.roomHeaderView removeFromSuperview];
[self.functionView removeFromSuperview];
[self.anchorScrollView addSubview:self.backContainerView];
[self.anchorScrollView addSubview:self.stageView];
[self.anchorScrollView addSubview:self.messageContainerView];
[self.anchorScrollView addSubview:self.quickMessageContainerView];
[self.anchorScrollView addSubview:self.activityContainerView];
[self.anchorScrollView addSubview:self.roomHeaderView];
[self.anchorScrollView addSubview:self.functionView];
if (!self.menuContainerView.superview) {
[self.view addSubview:self.menuContainerView];
}
2022-08-23 18:01:34 +08:00
[self.view bringSubviewToFront:self.animationView];
2022-11-01 15:04:09 +08:00
[self updateViewConstraintsOnAnchorRoom];
[self changeStageViewOnAnchorRoom];
[self.roomHeaderView onRoomEntered];
[self.activityContainerView onRoomEntered];
[self.menuContainerView onRoomEntered];
[self.backContainerView onRoomEntered];
[self.littleGameView onRoomEntered];
if ([XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {// 退
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
[self.functionView onRoomEntered];
[self.messageContainerView onRoomEntered];
} else {
//退
[self.stageView onRoomMiniEntered];
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
[self.functionView onRoomEntered];
}
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
}
}
///
- (void)showAnchorScrollTipView {
2022-11-01 15:04:09 +08:00
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *anchoScrollTip = [defaults objectForKey:kHadShowAnchorRoomTipKey];
if (!anchoScrollTip) {
UIWindow *window = [UIApplication sharedApplication].delegate.window;
[window addSubview:self.anchorScrollTipView];
[window bringSubviewToFront:self.anchorScrollTipView];
}
}
///
- (BOOL)isKictOutLatest:(RoomInfoModel *)roomInfo {
2022-11-01 15:04:09 +08:00
NSString *currentUid = [AccountInfoStorage instance].getUid;
NSString *key = [NSString stringWithFormat:@"%@_%ld", currentUid, roomInfo.uid];
NSString *kictOutTime = [[NSUserDefaults standardUserDefaults] objectForKey:key];
if (kictOutTime) {
NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];
NSTimeInterval time = [date timeIntervalSince1970];
NSString *currentTime = [NSString stringWithFormat:@"%.0f", time];
//5
if ([currentTime intValue] - [kictOutTime intValue] > 5 * 60) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
return NO;
} else {
[XCHUDTool showErrorWithMessage:@"抱歉,您暂时无法进入该房间"];
[self dismissViewControllerAnimated:YES completion:nil];
return YES;
}
} else {
return NO;
}
}
2021-12-25 18:34:54 +08:00
#pragma mark -
- (void)myGiftEffectUpdate:(NSNotification *)notification {
NSDictionary * dic = notification.object;
self.roomInfo.hasAnimationEffect = ((NSNumber *)dic[@"hasAnimationEffect"]).boolValue;
self.hasAnimationEffect = self.roomInfo.hasAnimationEffect;
2021-12-25 18:34:54 +08:00
[self.roomHeaderView onRoomUpdate];
}
2021-10-19 18:30:03 +08:00
#pragma mark - XPRoomProtocol
2021-11-04 17:48:32 +08:00
- (void)initEnterRoomSuccess:(RoomInfoModel *)roomInfo user:(UserInfoModel *)userInfo {
2022-08-30 16:26:44 +08:00
[self hideHUD];
userInfo.fromUid = self.fromUid;
userInfo.fromType = self.fromType;
userInfo.fromNick = self.fromNick;
self.hasAnimationEffect = roomInfo.hasAnimationEffect;
2022-11-01 15:04:09 +08:00
self.roomInfo = roomInfo;
self.userInfo = userInfo;
//5
if ([self isKictOutLatest:roomInfo]) {
return;
}
if (roomInfo.type == RoomType_Anchor) {//
[self handleInitAnchorRoom];
[self showAnchorScrollTipView];
return;
}
if (roomInfo.valid) { //
if (roomInfo.roomPwd.length > 0 && roomInfo.uid != [AccountInfoStorage instance].getUid.integerValue && [XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {//
2022-04-18 22:36:16 +08:00
if (!self.isRequestSuperAdmin) {
[Api getRoomSuperAdminList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
NSArray<GuildSuperAdminInfoModel *> * array = [GuildSuperAdminInfoModel modelsWithArray:data.data];
self.superMangerList = array;
[self superAdminEnterPwdRoom:roomInfo];
} roomUid:self.roomUid];
} else {
[self superAdminEnterPwdRoom:roomInfo];
}
2021-12-01 18:27:08 +08:00
} else {
self.roomInfo.datingState = roomInfo.roomModeType == RoomModeType_Open_Blind ? RoomDatingStateChangeType_Open : RoomDatingStateChangeType_Normal;
2022-11-01 15:04:09 +08:00
[self changeStageViewOnRoomUpdate];
[self.roomHeaderView onRoomEntered];
[self.activityContainerView onRoomEntered];
[self.menuContainerView onRoomEntered];
[self.backContainerView onRoomEntered];
2022-02-14 19:29:29 +08:00
[self.littleGameView onRoomEntered];
2022-11-01 15:04:09 +08:00
self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate;
if ([XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {// 退
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
[self.functionView onRoomEntered];
[self.messageContainerView onRoomEntered];
2022-11-01 15:04:09 +08:00
} else {
//退
[self.stageView onRoomMiniEntered];
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
2022-03-14 19:46:10 +08:00
[self.functionView onRoomEntered];
2021-12-03 19:10:35 +08:00
}
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
2021-12-01 18:27:08 +08:00
}
2022-11-01 15:04:09 +08:00
} else { //
if ([self.roomUid isEqualToString:[NSString stringWithFormat:@"%ld", userInfo.uid]]) { //
if (roomInfo.roomId > 0) { // 使
if (roomInfo.type == RoomType_MiniGame && roomInfo.mgId > 0) {
self.mgId = [NSString stringWithFormat:@"%lld", roomInfo.mgId];
}
2022-11-01 15:04:09 +08:00
[self.presenter openRoom:roomInfo.title type:roomInfo.type roomPwd:roomInfo.roomPwd roomDesc:roomInfo.roomDesc backPic:@"" mgId:self.mgId];
} else { //
NSString* title = [NSString stringWithFormat:@"%@的房间", userInfo.nick];
RoomType type = RoomType_Game;
if (self.mgId.length > 0) {
type = RoomType_MiniGame;
}
2022-11-01 15:04:09 +08:00
[self.presenter openRoom:title type:type roomPwd:@"" roomDesc:@"" backPic:@"" mgId:self.mgId];
}
} else { //
// TODO: 线
[self showSuccessToast:@"房主已下线"];
[self enterRoomFail:0];
2022-11-01 15:04:09 +08:00
}
}
2021-10-19 18:30:03 +08:00
}
- (void)openRoomSuccess:(RoomInfoModel *)roomInfo {
2022-08-30 16:26:44 +08:00
[XCHUDTool hideHUDInView:self.navigationController.view];
[self hideHUD];
2022-11-01 15:04:09 +08:00
self.roomInfo = roomInfo;
if (roomInfo.type == RoomType_Anchor) {
[self handleInitAnchorRoom];
[self showAnchorScrollTipView];
return;
}
[self changeStageViewOnRoomUpdate];
2022-11-01 15:04:09 +08:00
[self.roomHeaderView onRoomEntered];
[self.activityContainerView onRoomEntered];
2022-11-01 15:04:09 +08:00
[self.backContainerView onRoomEntered];
2022-02-14 19:29:29 +08:00
[self.littleGameView onRoomEntered];
[self.functionView onRoomEntered];
[self.messageContainerView onRoomEntered];
2022-11-01 15:04:09 +08:00
self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate;
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
}
2021-12-09 15:36:59 +08:00
- (void)enterRoomSuccess:(NIMChatroom *)chatRoom {
2022-08-30 16:26:44 +08:00
[XCHUDTool hideHUDInView:self.navigationController.view];
2021-12-09 15:36:59 +08:00
// room/get线
self.roomInfo.onlineNum = chatRoom.onlineUserCount;
2022-11-01 15:04:09 +08:00
[self.stageView onRoomEntered];
[self.functionView onRoomEntered];
2022-11-01 15:04:09 +08:00
//
if (self.roomInfo != nil) {
[self.presenter reportUserInterRoom:[NSString stringWithFormat:@"%zd", self.roomInfo.uid]];
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventuser_visit_room eventAttributes:@{@"roomUid" : @(self.roomInfo.uid)}];
}
if (self.giftId.length) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"kShowGiftView" object:@{@"giftId": self.giftId}];
}
//
[self.presenter getRedPacket:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
2021-10-19 18:30:03 +08:00
}
- (void)enterRoomFail:(NSInteger)code {
2022-08-30 16:26:44 +08:00
[XCHUDTool hideHUDInView:self.navigationController.view];
2022-11-01 15:04:09 +08:00
[self hideHUD];
if (code == 13003) {
2022-11-01 15:04:09 +08:00
[self showErrorToast:@"您已被管理员拉黑"];
}
2022-11-01 15:04:09 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
}
2022-04-18 22:36:16 +08:00
///
///roominfo userinfo
- (void)getRoomSuperAdminScuccess:(NSArray *)list {
self.isRequestSuperAdmin = YES;
self.superMangerList = list;
}
2022-07-11 19:05:09 +08:00
///)
- (void)getNextAnchorRoomSuccess:(RoomInfoModel *)roomInfo {
2022-11-01 15:04:09 +08:00
[self hideHUD];
if (roomInfo) { //
2022-08-11 11:33:38 +08:00
if (![self.anchorRoomList containsObject:self.roomUid]) {
[self.anchorRoomList addObject:self.roomUid];
2022-08-10 21:39:39 +08:00
}
self.anchorIndex = self.anchorRoomList.count -1;
2022-11-01 15:04:09 +08:00
//1退
2022-08-11 11:33:38 +08:00
self.anchorScrollView.isCanScrollTop = YES;
self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight);
2022-11-01 15:04:09 +08:00
self.isRequestSuperAdmin = NO;
[self exitOldRoom];
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
[[RtcManager instance] exitRoom];
[self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
2022-08-11 11:33:38 +08:00
[self.functionView onRoomChange];
2022-11-01 15:04:09 +08:00
//2
[self.stageView removeFromSuperview];
[self.messageContainerView removeFromSuperview];
[self.quickMessageContainerView removeFromSuperview];
[self.activityContainerView removeFromSuperview];
[self.roomHeaderView removeFromSuperview];
[self.functionView removeFromSuperview];
self.functionView = nil;
self.messageContainerView = nil;
self.stageView = nil;
[self.menuContainerView removeFromSuperview];
self.menuContainerView = nil;
//3
self.roomUid = [NSString stringWithFormat:@"%zd", roomInfo.uid];
[self.presenter initEnterRoom:self.roomUid user:[AccountInfoStorage instance].getUid];
///
[self.presenter getNormalGiftList:self.roomUid];
///
[self.presenter getRoomSuperAdmin:self.roomUid];
} else {
2022-08-11 11:33:38 +08:00
if (self.anchorScrollView.isCanScrollTop) {
self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight);
} else {
self.anchorScrollView.contentOffset = CGPointMake(0, 0);
}
2022-11-01 15:04:09 +08:00
[self showErrorToast:@"已经到底啦~自动为您返回当前房间"];
}
2022-08-10 21:39:39 +08:00
}
2022-08-11 11:33:38 +08:00
- (void)getCurrentRoomInfoSuccess:(RoomInfoModel *)roomInfo {
2022-08-10 21:39:39 +08:00
[self hideHUD];
self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight);
if (roomInfo && roomInfo.valid) {
//1退
self.isRequestSuperAdmin = NO;
[self exitOldRoom];
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
[[RtcManager instance] exitRoom];
[self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
//2
[self.backContainerView removeFromSuperview];
[self.stageView removeFromSuperview];
[self.messageContainerView removeFromSuperview];
2022-11-01 15:04:09 +08:00
[self.quickMessageContainerView removeFromSuperview];
2022-08-10 21:39:39 +08:00
[self.activityContainerView removeFromSuperview];
[self.roomHeaderView removeFromSuperview];
[self.functionView removeFromSuperview];
self.functionView = nil;
self.messageContainerView = nil;
self.stageView = nil;
[self.menuContainerView removeFromSuperview];
self.menuContainerView = nil;
//3
self.roomUid = [NSString stringWithFormat:@"%zd", roomInfo.uid];
[self.presenter initEnterRoom:self.roomUid user:[AccountInfoStorage instance].getUid];
///
[self.presenter getNormalGiftList:self.roomUid];
///
[self.presenter getRoomSuperAdmin:self.roomUid];
} else {
[self showErrorToast:@"已经到顶啦~自动为您返回当前房间"];
}
}
///
- (void)handleInitAnchorRoom {
2022-11-01 15:04:09 +08:00
if (self.roomInfo.valid) { //
if (self.roomInfo.roomPwd.length > 0 && self.roomInfo.uid != [AccountInfoStorage instance].getUid.integerValue && [XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {//
if (!self.isRequestSuperAdmin) {
[Api getRoomSuperAdminList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
NSArray<GuildSuperAdminInfoModel *> * array = [GuildSuperAdminInfoModel modelsWithArray:data.data];
self.superMangerList = array;
[self handleSuperManagerEnterAnchorRoom:self.roomInfo];
} roomUid:self.roomUid];
} else {
[self handleSuperManagerEnterAnchorRoom:self.roomInfo];
}
} else {
self.roomInfo.datingState = self.roomInfo.roomModeType == RoomModeType_Open_Blind ? RoomDatingStateChangeType_Open : RoomDatingStateChangeType_Normal;
if (!self.anchorScrollView.superview) {
[self.view addSubview:self.anchorScrollView];
}
[self.backContainerView removeFromSuperview];
[self.stageView removeFromSuperview];
[self.messageContainerView removeFromSuperview];
[self.quickMessageContainerView removeFromSuperview];
[self.activityContainerView removeFromSuperview];
[self.roomHeaderView removeFromSuperview];
[self.functionView removeFromSuperview];
[self.menuContainerView removeFromSuperview];
[self.anchorScrollView addSubview:self.backContainerView];
[self.anchorScrollView addSubview:self.stageView];
[self.anchorScrollView addSubview:self.messageContainerView];
[self.anchorScrollView addSubview:self.quickMessageContainerView];
[self.anchorScrollView addSubview:self.activityContainerView];
[self.anchorScrollView addSubview:self.roomHeaderView];
[self.anchorScrollView addSubview:self.functionView];
[self.anchorScrollView addSubview:self.menuContainerView];
2022-08-23 18:01:34 +08:00
[self.view bringSubviewToFront:self.animationView];
2022-08-10 21:39:39 +08:00
2022-11-01 15:04:09 +08:00
[self updateViewConstraintsOnAnchorRoom];
[self changeStageViewOnAnchorRoom];
[self.roomHeaderView onRoomEntered];
[self.activityContainerView onRoomEntered];
[self.menuContainerView onRoomEntered];
[self.backContainerView onRoomEntered];
[self.littleGameView onRoomEntered];
if ([XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {// 退
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
[self.functionView onRoomEntered];
[self.messageContainerView onRoomEntered];
} else {
//退
[self.stageView onRoomMiniEntered];
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
[self.functionView onRoomEntered];
}
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
}
} else { //
if ([self.roomUid isEqualToString:[NSString stringWithFormat:@"%ld", self.userInfo.uid]]) { //
if (self.roomInfo.roomId > 0) { // 使
if (self.roomInfo.type == RoomType_MiniGame && self.roomInfo.mgId > 0) {
self.mgId = [NSString stringWithFormat:@"%lld", self.roomInfo.mgId];
}
[self.presenter openRoom:self.roomInfo.title type:self.roomInfo.type roomPwd:self.roomInfo.roomPwd roomDesc:self.roomInfo.roomDesc backPic:@"" mgId:self.mgId];
} else { //
NSString* title = [NSString stringWithFormat:@"%@的房间", self.userInfo.nick];
RoomType type = RoomType_Game;
if (self.mgId.length > 0) {
type = RoomType_MiniGame;
}
[self.presenter openRoom:title type:type roomPwd:@"" roomDesc:@"" backPic:@"" mgId:self.mgId];
}
} else { //
// TODO: 线
[self showSuccessToast:@"房主已下线"];
[self enterRoomFail:0];
}
}
}
- (void)getRedPacketSuccess:(NSArray *)list {
2022-11-01 15:04:09 +08:00
if (list.count == 0) {
return;
}
for (XPRedPacketModel *data in list) {
XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
view.receiveModel = data;
for (UIView *subView in self.view.subviews) {
if([subView isKindOfClass:[XPReceiveRedPacketView class]]) {
view.alphaView.backgroundColor = [UIColor clearColor];
break;
}
}
[self.view addSubview:view];
[self.view bringSubviewToFront:view];
}
}
#pragma mark - NIMChatroomManagerDelegate
2021-12-02 00:09:04 +08:00
- (void)chatroomBeKicked:(NIMChatroomBeKickedResult *)result {
if (result.reason == 2) {
2022-11-01 15:04:09 +08:00
[self showErrorToast:@"您被管理员踢出直播间"];
///
NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];//0
NSTimeInterval time=[date timeIntervalSince1970];
NSString *currentTime = [NSString stringWithFormat:@"%.0f", time];
NSString *key = [NSString stringWithFormat:@"%@_%ld", [AccountInfoStorage instance].getUid, self.roomInfo.uid];
[[NSUserDefaults standardUserDefaults] setObject:currentTime forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
2021-12-02 00:09:04 +08:00
} else if (result.reason == 5) {
2022-11-01 15:04:09 +08:00
[self showErrorToast:@"您已被管理员拉黑"];
2021-12-02 00:09:04 +08:00
}
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
[self cancelRoomArrangeMic];
[[RtcManager instance] exitRoom];
2022-11-01 15:04:09 +08:00
[self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
[self.littleGameView handleSelfInExitEvent];
[self.littleGameView destroyMG];
[self dismissViewControllerAnimated:YES completion:nil];
2021-12-02 00:09:04 +08:00
}
#pragma mark - NIMChatManagerDelegate
- (void)onRecvMessages:(NSArray<NIMMessage *> *)messages {
2022-11-01 15:04:09 +08:00
for (NIMMessage * message in messages) {
///p2p
if (message.session.sessionType == NIMSessionTypeP2P) {
if(message.messageType == NIMMessageTypeCustom) {
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
AttachmentModel * attachment = obj.attachment;
if (attachment.first == CustomMessageType_User_UpGrade) {
ContentLevelUpgradeModel * levelInfo = [ContentLevelUpgradeModel modelWithDictionary:attachment.data];
if (attachment.second == Custom_Message_Sub_User_UpGrade_Exper) {
self.userInfo.userLevelVo.experLevelSeq = levelInfo.levelSeq;
} else if(attachment.second == Custom_Message_Sub_User_UpGrade_Charm) {
self.userInfo.userLevelVo.charmLevelSeq = levelInfo.levelSeq;
}
}
}
}
}
2022-11-01 15:04:09 +08:00
//
if (message.session.sessionType != NIMSessionTypeChatroom) {
continue;
}
//
if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) {
continue;
}
if (message.messageType == NIMMessageTypeNotification) {
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
2021-12-09 15:36:59 +08:00
NSInteger onLineNumber = self.roomInfo.onlineNum;
2022-11-01 15:04:09 +08:00
switch (content.eventType) {
case NIMChatroomEventTypeInfoUpdated: //
{
NSDictionary *data = [content.notifyExt toJSONObject];
int type = [data[@"type"] intValue];
switch (type) {
case 1:
case 3:
{
NSMutableDictionary *lastRoomInfoDic = [NSMutableDictionary dictionaryWithDictionary:[self.roomInfo model2dictionary]];
[lastRoomInfoDic addEntriesFromDictionary: ((NSString *)data[@"roomInfo"]).toJSONObject];
2022-01-05 21:48:21 +08:00
RoomInfoModel *newRoomInfo = [RoomInfoModel modelWithJSON:lastRoomInfoDic];
//TODO: mgid
if (newRoomInfo.type != RoomType_MiniGame) {
newRoomInfo.mgId = 0;
}
2022-01-05 21:48:21 +08:00
newRoomInfo.hasAnimationEffect = self.hasAnimationEffect;
if (newRoomInfo.roomModeType == RoomModeType_Open_Blind && self.roomInfo.roomModeType != RoomModeType_Open_Blind) {
///
newRoomInfo.datingState = RoomDatingStateChangeType_Open;
} else if(newRoomInfo.roomModeType != RoomModeType_Open_Blind && self.roomInfo.roomModeType == RoomModeType_Open_Blind) {
///
newRoomInfo.datingState = RoomDatingStateChangeType_Close;
2022-01-05 21:48:21 +08:00
} else {
newRoomInfo.datingState = RoomDatingStateChangeType_Normal;
2022-01-05 21:48:21 +08:00
}
2022-11-01 15:04:09 +08:00
//->->)
newRoomInfo.hadChangeRoomType = self.roomInfo.type != newRoomInfo.type;
BOOL anchorToOther = newRoomInfo.type != RoomType_Anchor && self.roomInfo.type == RoomType_Anchor;//
2022-01-05 21:48:21 +08:00
self.roomInfo = newRoomInfo;
2022-11-01 15:04:09 +08:00
[self.backContainerView onRoomUpdate];
self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate;
if (self.roomInfo.type == RoomType_Anchor && self.roomInfo.hadChangeRoomType) {///
[self handleInitAnchorRoom];
[self showAnchorScrollTipView];
} else if (anchorToOther) {
[self.anchorScrollView removeFromSuperview];
[self.backContainerView removeFromSuperview];
[self.stageView removeFromSuperview];
[self.messageContainerView removeFromSuperview];
[self.quickMessageContainerView removeFromSuperview];
[self.activityContainerView removeFromSuperview];
[self.roomHeaderView removeFromSuperview];
[self.functionView removeFromSuperview];
[self.view addSubview:self.backContainerView];
[self.view addSubview:self.stageView];
[self.view addSubview:self.messageContainerView];
[self.view addSubview:self.quickMessageContainerView];
[self.view addSubview:self.activityContainerView];
[self.view addSubview:self.roomHeaderView];
[self.view addSubview:self.functionView];
[self.view bringSubviewToFront:self.menuContainerView];
[self.view bringSubviewToFront:self.animationView];
[self initSubViewConstraints];
[self changeStageViewOnRoomUpdate];
[self.stageView onRoomUpdate];
[self.menuContainerView onRoomUpdate];
[self.functionView onRoomUpdate];
[self.activityContainerView onRoomUpdate];
[self.messageContainerView onRoomUpdate];
[self.littleGameView onRoomUpdate];
} else {
if (self.roomInfo.type == RoomType_Anchor) {
[self changeStageViewOnAnchorRoom];
} else {
[self changeStageViewOnRoomUpdate];
}
[self.stageView onRoomUpdate];
[self.menuContainerView onRoomUpdate];
[self.functionView onRoomUpdate];
[self.activityContainerView onRoomUpdate];
[self.messageContainerView onRoomUpdate];
[self.littleGameView onRoomUpdate];
}
}
break;
}
}
2021-12-09 15:36:59 +08:00
break;
case NIMChatroomEventTypeEnter:
if (content.source.userId.integerValue != [AccountInfoStorage instance].getUid.integerValue && self.userInfo.platformRole != 1) {
2021-12-09 15:36:59 +08:00
onLineNumber += 1;
2021-12-16 20:22:01 +08:00
}else {///
[self userEnterRoomSuccess];
2022-01-06 18:16:05 +08:00
///
[self.activityContainerView onRoomUpdate];
[self.menuContainerView onRoomUpdate];
2021-12-09 15:36:59 +08:00
}
break;
case NIMChatroomEventTypeAddBlack:
case NIMChatroomEventTypeKicked:
case NIMChatroomEventTypeExit:
onLineNumber -= 1;
break;
case NIMChatroomEventTypeQueueChange: //
{
NSDictionary* data = (NSDictionary *)content.ext;
UserInfoModel* userInfo = [UserInfoModel modelWithJSON:[data objectForKey:NIMChatroomEventInfoQueueChangeItemValueKey]];
NSInteger changeType = [data[NIMChatroomEventInfoQueueChangeTypeKey] integerValue];
if (changeType == 1 && userInfo.uid == [AccountInfoStorage instance].getUid.integerValue) {
[self cancelRoomArrangeMic];
}
}
break;
2022-11-01 15:04:09 +08:00
default:
break;
}
2021-12-09 15:36:59 +08:00
self.roomInfo.onlineNum = onLineNumber;
[self.roomHeaderView onRoomUpdate];
2022-11-01 15:04:09 +08:00
[self.stageView handleNIMNotificationMessage:message];
2021-12-17 15:18:34 +08:00
[self.animationView handleNIMNotificationMessage:message];
2021-12-25 16:57:50 +08:00
[self.messageContainerView handleNIMNotificationMessage:message];
2022-01-06 18:16:05 +08:00
[self.activityContainerView handleNIMNotificationMessage:message];
[self.menuContainerView handleNIMNotificationMessage:message];
[self.functionView handleNIMNotificationMessage:message];
2022-02-14 19:29:29 +08:00
[self.littleGameView handleNIMNotificationMessage:message];
2022-11-01 15:04:09 +08:00
} else if (message.messageType == NIMMessageTypeCustom) {
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
2021-12-24 18:01:30 +08:00
AttachmentModel * attachment = obj.attachment;
2022-11-01 15:04:09 +08:00
[self.stageView handleNIMCustomMessage:message];
2021-12-25 16:57:50 +08:00
[self.animationView handleNIMCustomMessage:message];
[self.menuContainerView handleNIMCustomMessage:message];
[self.activityContainerView handleNIMCustomMessage:message];
2022-02-14 19:29:29 +08:00
[self.functionView handleNIMCustomMessage:message];
[self.littleGameView handleNIMCustomMessage:message];
2021-12-24 18:01:30 +08:00
if (attachment.first == CustomMessageType_First_Recharge_Reward && attachment.second == Custom_Message_Sub_Room_First_Recharge_Reward) {
self.userInfo.isFirstCharge = NO;
[self.menuContainerView onRoomUpdate];
[self.activityContainerView onRoomUpdate];
2021-12-25 16:57:50 +08:00
} else if (attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_MessageState) {
///iOS
NSDictionary * dic= attachment.data[@"roomInfo"];
if (dic.allKeys.count <=0) {
dic = attachment.data;
}
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:dic];
self.roomInfo.isCloseScreen = roomInfo.isCloseScreen;
[self.menuContainerView onRoomUpdate];
2022-04-26 21:45:40 +08:00
} else if(attachment.first == CustomMessageType_Queue && attachment.second == Custom_Message_Sub_Queue_Invite) {
NSDictionary *dic = attachment.data;
NSString *uid = dic[@"uid"];
if (uid.integerValue == [AccountInfoStorage instance].getUid.integerValue) {
[self cancelRoomArrangeMic];
}
2022-04-26 21:45:40 +08:00
} else if(attachment.first == CustomMessageType_Hall_Super_Admin && attachment.second == Custom_Message_Sub_Hall_Super_Admin_Kick_Manager_Out_Room) {
XPKickUserModel * userInfo = [XPKickUserModel modelWithJSON:attachment.data];
if (userInfo.targetUid == [AccountInfoStorage instance].getUid.integerValue) {
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
[self cancelRoomArrangeMic];
[[RtcManager instance] exitRoom];
[self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
[self.littleGameView handleSelfInExitEvent];
[self.littleGameView destroyMG];
[self dismissViewControllerAnimated:YES completion:nil];
}
2022-11-01 15:04:09 +08:00
} else if (attachment.first == CustomMessageType_RedPacket) {
if (attachment.second == Custom_Message_Sub_RoomDiamandRedPacket) {
XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
XPReceiveRedPacketModel *data = [XPReceiveRedPacketModel modelWithJSON:attachment.data];
view.redPacketModel = data;
for (UIView *subView in self.view.subviews) {
if([subView isKindOfClass:[XPReceiveRedPacketView class]]) {
view.alphaView.backgroundColor = [UIColor clearColor];
break;
}
}
[self.view addSubview:view];
[self.view bringSubviewToFront:view];
}
} else if(attachment.first == CustomMessageType_Wish_Gift) {
if (attachment.second == Custom_Message_Sub_Wish_Gift_Open) {
self.roomInfo.hasOpenWishGift = YES;
}
}
2021-12-25 16:57:50 +08:00
[self.messageContainerView handleNIMCustomMessage:message];
2022-11-01 15:04:09 +08:00
}
2021-12-25 16:57:50 +08:00
} else if(message.messageType == NIMMessageTypeText) {
[self.messageContainerView handleNIMTextMessage:message];
2022-01-05 21:48:21 +08:00
} else if(message.messageType == NIMMessageTypeTip) {
[self.messageContainerView handleNIMTextMessage:message];
2021-12-25 16:57:50 +08:00
}
2022-11-01 15:04:09 +08:00
}
}
2021-12-13 18:45:24 +08:00
//
- (void)sendMessage:(NIMMessage *)message didCompleteWithError:(NSError *)error {
//
if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) {
return;
}
2022-08-15 18:53:17 +08:00
if (message.yidunAntiSpamRes) {
NSDictionary * spamRes = message.yidunAntiSpamRes.toJSONObject;
NSDictionary * spamResExt = ((NSString *)spamRes[@"ext"]).toJSONObject;
if ([spamResExt[@"antispam"][@"suggestion"] intValue] == 2) {
[self showErrorToast:@"消息中可能含有违规信息,请停止发送类似信息!"];
return;
}
}
2021-12-13 18:45:24 +08:00
if (error) return;
if (message.messageType == NIMMessageTypeCustom) {
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
2021-12-25 16:57:50 +08:00
AttachmentModel * attachment = obj.attachment;
[self.stageView handleNIMCustomMessage:message];
[self.animationView handleNIMCustomMessage:message];
2022-11-01 15:04:09 +08:00
[self.functionView handleNIMCustomMessage:message];
if (attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_MessageState) {
2021-12-25 16:57:50 +08:00
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:attachment.data[@"roomInfo"]];
self.roomInfo.isCloseScreen = roomInfo.isCloseScreen;
[self.menuContainerView onRoomUpdate];
}
[self.messageContainerView handleNIMCustomMessage:message];
2021-12-13 18:45:24 +08:00
}
2021-12-25 16:57:50 +08:00
}else if(message.messageType == NIMMessageTypeText) {
[self.messageContainerView handleNIMTextMessage:message];
2022-02-16 15:20:48 +08:00
[self.littleGameView handleNIMTextMessage:message];
2021-12-13 18:45:24 +08:00
}
}
#pragma mark - NIMLoginManagerDelegate
- (void)onKickout:(NIMLoginKickoutResult *)result {
[self exitRoom];
[self dismissViewControllerAnimated:YES completion:nil];
}
2022-06-14 14:51:47 +08:00
#pragma mark - NIMConversationManagerDelegate
- (void)didAddRecentSession:(NIMRecentSession *)recentSession
totalUnreadCount:(NSInteger)totalUnreadCount {
[self.menuContainerView addNIMRecentSession:recentSession];
}
- (void)didUpdateRecentSession:(NIMRecentSession *)recentSession
totalUnreadCount:(NSInteger)totalUnreadCount {
[self.menuContainerView addNIMRecentSession:recentSession];
}
- (void)didRemoveRecentSession:(NIMRecentSession *)recentSession
totalUnreadCount:(NSInteger)totalUnreadCount {
[self.menuContainerView removeNIMRecentSession:recentSession];
}
2021-10-26 19:14:01 +08:00
#pragma mark - RoomDelegate
- (RoomInfoModel *)getRoomInfo {
2022-11-01 15:04:09 +08:00
return self.roomInfo;
2021-10-26 19:14:01 +08:00
}
- (UserInfoModel *)getUserInfo {
2022-11-01 15:04:09 +08:00
return self.userInfo;
2021-10-26 19:14:01 +08:00
}
- (void)exitRoom {
[self.menuContainerView menuResignFirstResponder];
2022-01-06 18:16:05 +08:00
if (self.roomInfo.roomModeType == RoomModeType_Open_Micro_Mode || self.roomInfo.roomModeType == RoomModeType_Open_Blind) {
2021-12-21 12:05:31 +08:00
NSString * roomUid = [NSString stringWithFormat:@"%ld", self.roomInfo.uid];
NSString * uid = [AccountInfoStorage instance].getUid;
[Api getRoomArrangeMicList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
ArrangeMicModel * arrangeMicModel= [ArrangeMicModel modelWithJSON:data.data];
if (arrangeMicModel.myPos.intValue > 0) {
[TTPopup alertWithMessage:@"退出房间后将退出目前排麦,再次进入需要重新排麦,确认退出房间吗?" confirmHandler:^{
2022-01-06 18:16:05 +08:00
__block NSString * grouptype = @"0";
if (self.roomInfo.roomModeType == RoomModeType_Open_Blind) {
[arrangeMicModel.queue enumerateObjectsUsingBlock:^(ArrangeMicUserModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.uid.integerValue == [AccountInfoStorage instance].getUid.integerValue) {
grouptype = [NSString stringWithFormat:@"%ld", obj.groupType];
*stop = YES;
}
}];
}
2021-12-21 12:05:31 +08:00
[Api cancelArrangeMic:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
2022-01-06 18:16:05 +08:00
} roomUid:roomUid operUid:uid groupType:grouptype];
2021-12-21 12:05:31 +08:00
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
2021-12-21 12:05:31 +08:00
[[RtcManager instance] exitRoom];
2022-11-01 15:04:09 +08:00
[self.presenter reportUserOutRoom:roomUid];
[self handleFirstOutRoom];
2021-12-21 12:05:31 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
} cancelHandler:^{
}];
2021-12-21 18:14:10 +08:00
return;
2021-12-21 12:05:31 +08:00
}
}
2021-12-21 18:14:10 +08:00
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
2021-12-21 18:14:10 +08:00
[[RtcManager instance] exitRoom];
2022-11-01 15:04:09 +08:00
[self.presenter reportUserOutRoom:roomUid];
[self handleFirstOutRoom];
2021-12-21 18:14:10 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
2021-12-21 12:05:31 +08:00
} roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"];
2022-04-01 14:24:58 +08:00
} else if(self.roomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
NSString * roomUid = [NSString stringWithFormat:@"%ld", self.roomInfo.uid];
NSString * uid = [AccountInfoStorage instance].getUid;
[Api getRoomPKUserList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
ArrangeMicModel * arrangeMicModel= [ArrangeMicModel modelWithJSON:data.data];
if (arrangeMicModel.myPos.intValue > 0) {
[TTPopup alertWithMessage:@"退出房间后将退出目前排麦,再次进入需要重新排麦,确认退出房间吗?" confirmHandler:^{
__block NSString * grouptype = @"0";
2022-11-01 15:04:09 +08:00
[arrangeMicModel.queue enumerateObjectsUsingBlock:^(ArrangeMicUserModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.uid.integerValue == [AccountInfoStorage instance].getUid.integerValue) {
grouptype = [NSString stringWithFormat:@"%ld", obj.groupType];
*stop = YES;
}
}];
2022-04-01 14:24:58 +08:00
[Api cancelRoomPKArrangeMic:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
} roomUid:roomUid operUid:uid groupType:grouptype];
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
[[RtcManager instance] exitRoom];
2022-11-01 15:04:09 +08:00
[self handleFirstOutRoom];
2022-04-01 14:24:58 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
} cancelHandler:^{
}];
return;
}
}
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
[[RtcManager instance] exitRoom];
2022-11-01 15:04:09 +08:00
[self handleFirstOutRoom];
2022-04-01 14:24:58 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
} roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"];
}else if(self.roomInfo.type == RoomType_MiniGame) {
2022-02-15 14:38:09 +08:00
if ([self.littleGameView isInSudGame]) {
TTAlertConfig *config = [[TTAlertConfig alloc] init];
config.cancelButtonConfig.title = @"取消";
config.confirmButtonConfig.title = @"确认";
config.message = @"退出房间则默认认输逃跑,是否退房?";
[TTPopup alertWithConfig:config confirmHandler:^{ //
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[RtcManager instance] exitRoom];
2022-02-15 17:59:05 +08:00
[self.littleGameView handleSelfInExitEvent];
2022-02-15 14:38:09 +08:00
[self.littleGameView destroyMG];
2022-11-01 15:04:09 +08:00
[self handleFirstOutRoom];
2022-02-15 14:38:09 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
});
} cancelHandler:^{
}];
} else {
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[RtcManager instance] exitRoom];
2022-02-15 17:59:05 +08:00
[self.littleGameView handleSelfInExitEvent];
2022-02-15 14:38:09 +08:00
[self.littleGameView destroyMG];
2022-11-01 15:04:09 +08:00
[self handleFirstOutRoom];
2022-02-15 14:38:09 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
}
2021-12-20 21:17:12 +08:00
} else {
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
2021-12-20 21:17:12 +08:00
[[RtcManager instance] exitRoom];
2022-11-01 15:04:09 +08:00
[self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
[self handleFirstOutRoom];
2021-12-20 21:17:12 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
}
}
- (void)miniRoom {
[self.menuContainerView menuResignFirstResponder];
2022-02-15 14:38:09 +08:00
if(self.roomInfo.type == RoomType_MiniGame) {
2022-11-01 15:04:09 +08:00
if ([self.littleGameView isInSudGame]) {
TTAlertConfig *config = [[TTAlertConfig alloc] init];
config.cancelButtonConfig.title = @"取消";
config.confirmButtonConfig.title = @"确认";
config.message = @"退出房间则默认认输逃跑,是否退房?";
[TTPopup alertWithConfig:config confirmHandler:^{ //
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[XPRoomMiniManager shareManager] configRoomInfo:self.roomInfo];
[[XPRoomMiniManager shareManager] configUserInfo:self.userInfo];
[[XPRoomMiniManager shareManager] configCurrentMusic:self.functionView.getCurrentMusic isPlaying:self.functionView.isPlaying];
NSDictionary * dic = @{@"roomInfo":self.roomInfo.model2dictionary, @"userInfo":self.userInfo.model2dictionary, @"microQueue":self.getMicroQueue};
[[NSNotificationCenter defaultCenter] postNotificationName:kRoomMiniNotificationKey object:nil userInfo:dic];
[self.view endEditing:YES];
[self.littleGameView handleSelfInExitEvent];
[self.littleGameView destroyMG];
[self handleFirstOutRoom];
[self dismissViewControllerAnimated:YES completion:nil];
});
} cancelHandler:^{
}];
} else {
[[XPRoomMiniManager shareManager] configRoomInfo:self.roomInfo];
[[XPRoomMiniManager shareManager] configUserInfo:self.userInfo];
[[XPRoomMiniManager shareManager] configCurrentMusic:self.functionView.getCurrentMusic isPlaying:self.functionView.isPlaying];
NSDictionary * dic = @{@"roomInfo":self.roomInfo.model2dictionary, @"userInfo":self.userInfo.model2dictionary, @"microQueue":self.getMicroQueue};
[[NSNotificationCenter defaultCenter] postNotificationName:kRoomMiniNotificationKey object:nil userInfo:dic];
[self.view endEditing:YES];
[self.littleGameView handleSelfInExitEvent];
[self.littleGameView destroyMG];
[self handleFirstOutRoom];
[self dismissViewControllerAnimated:YES completion:nil];
}
2022-02-15 14:38:09 +08:00
}else {
[[XPRoomMiniManager shareManager] configRoomInfo:self.roomInfo];
[[XPRoomMiniManager shareManager] configUserInfo:self.userInfo];
[[XPRoomMiniManager shareManager] configCurrentMusic:self.functionView.getCurrentMusic isPlaying:self.functionView.isPlaying];
2022-02-15 14:38:09 +08:00
NSDictionary * dic = @{@"roomInfo":self.roomInfo.model2dictionary, @"userInfo":self.userInfo.model2dictionary, @"microQueue":self.getMicroQueue};
[[NSNotificationCenter defaultCenter] postNotificationName:kRoomMiniNotificationKey object:nil userInfo:dic];
[self.view endEditing:YES];
2022-11-01 15:04:09 +08:00
[self handleFirstOutRoom];
2022-02-15 14:38:09 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
}
}
2021-11-15 18:59:44 +08:00
- (UINavigationController *)getCurrentNav {
return self.navigationController;
}
2021-11-04 19:01:19 +08:00
- (NSMutableDictionary<NSString *,MicroQueueModel *> *)getMicroQueue {
2022-11-01 15:04:09 +08:00
return [self.stageView getMicroQueue];
2021-11-04 19:01:19 +08:00
}
2022-04-18 22:36:16 +08:00
- (NSArray *)getRoomSuperAdminList {
return self.superMangerList;
}
2022-05-27 18:24:13 +08:00
- (NSArray *)getRoomPKGroupTeamList {
return [self.functionView getRoomPKGroupTeamList];
}
- (BOOL)isRoomPKPlaying {
return [self.functionView isRoomPKPlaying];
}
2021-11-04 19:01:19 +08:00
- (void)onMicroQueueUpdate:(NSMutableDictionary<NSString *,MicroQueueModel *> *)queue {
[self.menuContainerView onMicroQueueUpdate:queue];
2022-01-06 11:12:32 +08:00
[self.functionView onRoomUpdate];
[self.functionView onMicroQueueUpdate:queue];
2022-10-31 20:10:35 +08:00
BOOL isOnMic = false;
2022-10-31 17:31:59 +08:00
for (MicroQueueModel * info in queue.allValues) {
if (info.userInfo.uid > 0 && [AccountInfoStorage instance].getUid.integerValue == info.userInfo.uid) {
2022-10-31 20:10:35 +08:00
isOnMic = YES;
break;
2022-10-31 17:31:59 +08:00
}
}
2022-10-31 20:10:35 +08:00
if (isOnMic) {
self.anchorScrollView.scrollEnabled = NO;
} else {
self.anchorScrollView.scrollEnabled = YES;
}
2021-11-04 19:01:19 +08:00
}
2022-01-13 18:45:17 +08:00
- (CGPoint)animationPointAtStageViewByUid:(NSString *)uid {
2022-11-01 15:04:09 +08:00
return [self.stageView animationPointAtStageViewByUid:uid];
2021-12-03 17:07:21 +08:00
}
2022-07-28 11:56:59 +08:00
#pragma mark - 退
- (void)handleFirstOutRoom {
2022-11-01 15:04:09 +08:00
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults boolForKey:kHadQuitOtherRoomKey] && self.userInfo.uid != self.roomInfo.uid && self.userInfo.showLimitCharge) {
[defaults setBool:YES forKey:kHadQuitOtherRoomKey];
[defaults synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:kNewUserRechargeKey object:nil];
}
2022-07-28 11:56:59 +08:00
}
2022-02-15 14:38:09 +08:00
#pragma mark - XPRoomLittleGameContainerViewDelegate
- (void)hiddenSudGamePostionView {
[self.functionView hiddenSudGamePostionView];
}
2021-12-03 17:07:21 +08:00
2022-07-11 19:05:09 +08:00
#pragma mark - AnchorRoomScrollViewDelegate
- (void)anchorScrollViewScrollToNext:(AnchorRoomScrollView *)anchorScrollView {
2022-11-01 15:04:09 +08:00
if (!self) {
return;
}
[self.view endEditing:YES];
[self showAnchorLoading];
[self.presenter getCycleAnchorRoomList:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
}
2022-08-10 21:39:39 +08:00
- (void)anchorScrollViewScrollToPrevious:(AnchorRoomScrollView *)anchorScrollView {
if (!self || self.anchorRoomList.count <= 0) {
return;
}
[self.view endEditing:YES];
[self showAnchorLoading];
if (self.anchorIndex < self.anchorRoomList.count) {
NSString * roomUid = [self.anchorRoomList objectAtIndex:self.anchorIndex];
[self.presenter getCurrentRoomInfo:roomUid];
self.anchorIndex --;
}else {
[self showErrorToast:@"已经到顶啦~自动为您返回当前房间"];
self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight);
}
}
#pragma mark - XPRoomSettingInputViewDelegate
///
- (void)xPRoomSettingInputView:(XPRoomSettingInputView *)view didClickConfirm:(NSString *)text type:(RoomSettingInputType)type {
NSString *pwdDes = [DESEncrypt encryptUseDES:text key:KeyWithType(KeyType_PasswordEncode)];
if ([pwdDes isEqualToString:self.roomInfo.roomPwd]) {
[TTPopup dismiss];
view.isPwdError = NO;
2022-11-01 15:04:09 +08:00
if (self.roomInfo.type == RoomType_Anchor) {
if (!self.anchorScrollView.superview) {
[self.view insertSubview:self.anchorScrollView belowSubview:self.menuContainerView];
}
[self.backContainerView removeFromSuperview];
[self.stageView removeFromSuperview];
[self.messageContainerView removeFromSuperview];
[self.quickMessageContainerView removeFromSuperview];
[self.activityContainerView removeFromSuperview];
[self.roomHeaderView removeFromSuperview];
[self.functionView removeFromSuperview];
[self.anchorScrollView addSubview:self.backContainerView];
[self.anchorScrollView addSubview:self.stageView];
[self.anchorScrollView addSubview:self.messageContainerView];
[self.anchorScrollView addSubview:self.quickMessageContainerView];
[self.anchorScrollView addSubview:self.activityContainerView];
[self.anchorScrollView addSubview:self.roomHeaderView];
[self.anchorScrollView addSubview:self.functionView];
if (!self.menuContainerView.superview) {
[self.view addSubview:self.menuContainerView];
}
2022-08-23 18:01:34 +08:00
[self.view bringSubviewToFront:self.animationView];
2022-11-01 15:04:09 +08:00
[self updateViewConstraintsOnAnchorRoom];
[self changeStageViewOnAnchorRoom];
[self.roomHeaderView onRoomEntered];
[self.activityContainerView onRoomEntered];
[self.menuContainerView onRoomEntered];
[self.backContainerView onRoomEntered];
[self.littleGameView onRoomEntered];
if ([XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {// 退
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
[self.functionView onRoomEntered];
[self.messageContainerView onRoomEntered];
} else {
//退
[self.stageView onRoomMiniEntered];
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
[self.functionView onRoomEntered];
}
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
} else {
[self.roomHeaderView onRoomEntered];
[self.activityContainerView onRoomEntered];
[self.menuContainerView onRoomEntered];
[self changeStageViewOnRoomUpdate];
[self.backContainerView onRoomEntered];
[self.functionView onRoomEntered];
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
[self.messageContainerView onRoomEntered];
[self.littleGameView onRoomEntered];
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
}
} else {
view.isPwdError = YES;
}
}
- (void)didClickCancel:(RoomSettingInputType)type {
if (type == RoomSettingInputType_Input_Pwd) {
[self enterRoomFail:0];
}
}
- (XPRoomBackContainerView *)backContainerView {
2022-11-01 15:04:09 +08:00
if (!_backContainerView) {
_backContainerView = [[XPRoomBackContainerView alloc] initWithdelegate:self];
}
return _backContainerView;
}
- (RoomHeaderView *)roomHeaderView {
2022-11-01 15:04:09 +08:00
if (!_roomHeaderView) {
_roomHeaderView = [[RoomHeaderView alloc] initWithDelegate:self];
}
return _roomHeaderView;
}
- (XPRoomMessageContainerView *)messageContainerView {
2022-11-01 15:04:09 +08:00
if (!_messageContainerView) {
_messageContainerView = [[XPRoomMessageContainerView alloc] initWithDelegate:self];
}
return _messageContainerView;
}
2022-09-29 14:18:59 +08:00
- (XPRoomQuickMessageContainView *)quickMessageContainerView {
2022-11-01 15:04:09 +08:00
if(!_quickMessageContainerView) {
_quickMessageContainerView = [[XPRoomQuickMessageContainView alloc] initWithDelegate:self];
}
return _quickMessageContainerView;
2022-09-29 14:18:59 +08:00
}
- (XPRoomMenuContainerView *)menuContainerView {
2022-11-01 15:04:09 +08:00
if (!_menuContainerView) {
_menuContainerView = [[XPRoomMenuContainerView alloc] initWithDelegate:self];
}
return _menuContainerView;
}
- (XPRoomActivityContainerView *)activityContainerView {
2022-11-01 15:04:09 +08:00
if (!_activityContainerView) {
_activityContainerView = [[XPRoomActivityContainerView alloc] initWithdelegate:self];
}
return _activityContainerView;
}
- (XPRoomAnimationView *)animationView {
if (!_animationView) {
2022-01-13 18:45:17 +08:00
_animationView = [[XPRoomAnimationView alloc] initWithDelegate:self];
}
return _animationView;
}
2021-12-15 18:12:55 +08:00
- (XPRoomFunctionContainerView *)functionView {
if (!_functionView) {
_functionView = [[XPRoomFunctionContainerView alloc] initWithdelegate:self];
}
return _functionView;
}
- (StageView *)stageView {
if (!_stageView) {
_stageView = [[SocialStageView alloc] initWithDelegate:self];
}
return _stageView;
}
2022-02-14 19:29:29 +08:00
- (XPRoomLittleGameContainerView *)littleGameView {
if (!_littleGameView) {
_littleGameView = [[XPRoomLittleGameContainerView alloc] initWithDelegate:self];
2022-02-15 14:38:09 +08:00
_littleGameView.delegate = self;
2022-02-14 19:29:29 +08:00
}
return _littleGameView;
}
2022-07-11 19:05:09 +08:00
- (AnchorRoomScrollView *)anchorScrollView {
2022-11-01 15:04:09 +08:00
if (!_anchorScrollView) {
_anchorScrollView = [[AnchorRoomScrollView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
_anchorScrollView.anchorScrollDelegate = self;
2022-10-31 20:10:35 +08:00
_anchorScrollView.hostDelegate = self;
2022-08-10 21:39:39 +08:00
if (@available(iOS 11.0, *)) {
_anchorScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
2022-11-01 15:04:09 +08:00
}
return _anchorScrollView;
2022-07-11 19:05:09 +08:00
}
- (AnchorRoomSrollTipView *)anchorScrollTipView {
2022-11-01 15:04:09 +08:00
if (!_anchorScrollTipView) {
_anchorScrollTipView = [[AnchorRoomSrollTipView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
}
return _anchorScrollTipView;
}
2022-08-10 21:39:39 +08:00
- (NSMutableArray<NSString *> *)anchorRoomList {
if (!_anchorRoomList) {
_anchorRoomList = [NSMutableArray array];
}
return _anchorRoomList;
}
@end