From 40abcb4759d3ae0e8185499e1d6f3dd4121bff35 Mon Sep 17 00:00:00 2001 From: liyuhua <15626451870@163.com> Date: Wed, 27 Sep 2023 14:52:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../YMRoom/View/XPRoomViewController.m | 2993 +++++++++-------- 1 file changed, 1634 insertions(+), 1359 deletions(-) diff --git a/YuMi/Modules/YMRoom/View/XPRoomViewController.m b/YuMi/Modules/YMRoom/View/XPRoomViewController.m index 1a187e6e..fca0eea9 100644 --- a/YuMi/Modules/YMRoom/View/XPRoomViewController.m +++ b/YuMi/Modules/YMRoom/View/XPRoomViewController.m @@ -24,6 +24,7 @@ #import "NSMutableDictionary+Saft.h" #import "XPSkillCardPlayerManager.h" #import "XCCurrentVCStackManager.h" +#import "CountDownHelper.h" ///Model #import "RoomInfoModel.h" #import "UserInfoModel.h" @@ -36,6 +37,7 @@ #import "XPReceiveRedPacketModel.h" #import "XPRedPacketModel.h" #import "FirstChargeRoomWindowModel.h" +#import "XPFreeGiftModel.h" ///View #import "BaseNavigationController.h" #import "XPRoomActivityContainerView.h" @@ -56,24 +58,31 @@ #import "AnchorRoomSrollTipView.h" #import "XPReceiveRedPacketView.h" #import "XPFirstRechargeView.h" +#import "XPWebViewController.h" +#import "SessionViewController.h" +#import "XPFreeGiftsObtainView.h" ///P #import "XPRoomPresenter.h" #import "XPRoomProtocol.h" -#import "XPWebViewController.h" + #import "RoomHostDelegate.h" #import "RoomGuestDelegate.h" #import "XNDJTDDLoadingTool.h" +#import "ClientConfig.h" +#import "LittleGameStageView.h" +#import "LittleGameScrollStageView.h" +#import "XPRoomLittleGameContainerView.h" UIKIT_EXTERN NSString * const kRoomGiftEffectUpdateNotificationKey; UIKIT_EXTERN NSString * const kRoomMiniNotificationKey; UIKIT_EXTERN NSString * kNewUserRechargeKey; UIKIT_EXTERN NSString * kShowFirstRechargeView; - +UIKIT_EXTERN NSString * const kFreeGiftCountdownNotification; NSString * const kHadShowAnchorRoomTipKey = @"kHadShowAnchorRoomTipKey";//是否展示过个播房上划用户引导 NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出过非自己房间 -@interface XPRoomViewController () +@interface XPRoomViewController () ///背景 @property (nonatomic,strong) XPRoomBackContainerView *backContainerView; @@ -95,6 +104,8 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 @property (nonatomic,strong) XPRoomAnimationView *animationView; ///功能view的的容器 @property (nonatomic,strong) XPRoomFunctionContainerView *functionView; +///小游戏的容器 +@property (nonatomic,strong) XPRoomLittleGameContainerView *littleGameView; ///房间的Uid @property (nonatomic,copy) NSString * roomUid; ///小游戏的id @@ -126,24 +137,28 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 @property (nonatomic,assign) NSInteger anchorIndex; @property (nonatomic,strong) XPFirstRechargeView *firstRechargeView; @property (nonatomic,assign) BOOL isShowFirstRecharge; +///免费礼物数量 +@property (nonatomic,strong) XPFreeGiftModel *freeModel; +///免费礼物弹窗 +@property (nonatomic,strong) XPFreeGiftsObtainView *freeView; @end @implementation XPRoomViewController + (BOOL)openRoom:(NSString *)roomUid viewController:(UIViewController *)viewController { - return [self openRoom:roomUid fromNick:nil fromType:0 fromUid:nil viewController:viewController]; + return [self openRoom:roomUid fromNick:nil fromType:0 fromUid:nil viewController:viewController]; } + (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; + 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; } /**最小化进房 @@ -151,13 +166,13 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 * @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 * 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 ,请通过该方法启动房间。 @@ -166,13 +181,13 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 * @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; + 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; } /// h5进房并弹出礼物面板 @@ -180,75 +195,86 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 /// @param giftId 礼物id /// @param viewController 启动方 + (BOOL)openRoom:(NSString *)roomUid giftId:(NSString *)giftId viewController:(UIViewController *)viewController { - 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; + 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; } - (void)dealloc { #warning to dox - 时刻注意这个方法 功能做完的时候删除此方法 - NSLog(@"房间销毁了"); + NSLog(@"房间销毁了"); [XPSkillCardPlayerManager shareInstance].isInRoomVC = NO; - [XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge = NO; - [XPSkillCardPlayerManager shareInstance].isInRoom = NO; - [XPSkillCardPlayerManager shareInstance].roomUid = @""; - if([[XPRoomMiniManager shareManager] getRoomInfo]==nil){ - [XPSkillCardPlayerManager shareInstance].isMineInMic = NO; - } - [[NIMSDK sharedSDK].chatroomManager removeDelegate:self]; - [[NIMSDK sharedSDK].chatManager removeDelegate:self]; - [[NIMSDK sharedSDK].loginManager removeDelegate:self]; - [[NIMSDK sharedSDK].conversationManager removeDelegate:self]; - [[NSNotificationCenter defaultCenter] removeObserver:self]; + [XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge = NO; + [XPSkillCardPlayerManager shareInstance].isInRoom = NO; + [XPSkillCardPlayerManager shareInstance].roomUid = @""; + if([[XPRoomMiniManager shareManager] getRoomInfo]==nil){ + [XPSkillCardPlayerManager shareInstance].isMineInMic = NO; + } + [[CountDownHelper shareHelper] stopCountDown]; + [CountDownHelper shareHelper].delegate = nil; + [[NIMSDK sharedSDK].chatroomManager removeDelegate:self]; + [[NIMSDK sharedSDK].chatManager removeDelegate:self]; + [[NIMSDK sharedSDK].loginManager removeDelegate:self]; + [[NIMSDK sharedSDK].conversationManager removeDelegate:self]; + [[NIMSDK sharedSDK].broadcastManager removeDelegate:self]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (XPRoomPresenter *)createPresenter { - return [[XPRoomPresenter alloc] init]; + return [[XPRoomPresenter alloc] init]; } - (BOOL)isHiddenNavBar { - return YES; + return YES; } - (void)viewDidLoad { - [super viewDidLoad]; - [self exitOldRoom]; - [self initSubViews]; - [self initSubViewConstraints]; - if (self.isMiniEnter) { - [self initEnterRoomSuccess:[XPRoomMiniManager shareManager].getRoomInfo user:[XPRoomMiniManager shareManager].getUserInfo]; - } else { - [XNDJTDDLoadingTool showAnchorLoading:self.navigationController.view]; - [self.presenter initEnterRoom:self.roomUid user:[AccountInfoStorage instance].getUid]; - } - /// 公屏 福袋礼物爆出的礼物 需要依赖 当前房间中的礼物列表 需要提前获取礼物列表 可以拿到礼物 没有想到别的方法去解决这个问题 有需要改的在修改吧 - [self.presenter getNormalGiftList:self.roomUid]; - ///获取房间超管列表 - [self.presenter getRoomSuperAdmin:self.roomUid]; - ///获取首充次数 - [self.presenter getRoomFirstCharegWindow:self.roomUid]; - //监听云信消息x - [[NIMSDK sharedSDK].chatroomManager addDelegate:self]; - [[NIMSDK sharedSDK].chatManager addDelegate:self]; - [[NIMSDK sharedSDK].loginManager addDelegate:self]; - [[NIMSDK sharedSDK].conversationManager addDelegate:self]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myGiftEffectUpdate:) name:kRoomGiftEffectUpdateNotificationKey object:nil]; - [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(showRoomFirstChargeWindowFormNot:) name:kShowFirstRechargeView object:nil]; - [XPSkillCardPlayerManager shareInstance].isInRoom = YES; + [super viewDidLoad]; + [self exitOldRoom]; + [self initSubViews]; + [self initSubViewConstraints]; + if (self.isMiniEnter) { + [self initEnterRoomSuccess:[XPRoomMiniManager shareManager].getRoomInfo user:[XPRoomMiniManager shareManager].getUserInfo]; + } else { + [XNDJTDDLoadingTool showAnchorLoading:self.navigationController.view]; + [self.presenter initEnterRoom:self.roomUid user:[AccountInfoStorage instance].getUid]; + } + /// 公屏 福袋礼物爆出的礼物 需要依赖 当前房间中的礼物列表 需要提前获取礼物列表 可以拿到礼物 没有想到别的方法去解决这个问题 有需要改的在修改吧 + [self.presenter getNormalGiftList:self.roomUid]; + ///获取房间超管列表 + [self.presenter getRoomSuperAdmin:self.roomUid]; + ///获取免费礼物 + [self.presenter getFreeGiftData]; + ///获取首充次数 + [self.presenter getRoomFirstCharegWindow:self.roomUid]; + //监听云信消息x + [[NIMSDK sharedSDK].chatroomManager addDelegate:self]; + [[NIMSDK sharedSDK].chatManager addDelegate:self]; + [[NIMSDK sharedSDK].loginManager addDelegate:self]; + [[NIMSDK sharedSDK].conversationManager addDelegate:self]; + [[NIMSDK sharedSDK].broadcastManager addDelegate:self]; + [CountDownHelper shareHelper].delegate = self; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myGiftEffectUpdate:) name:kRoomGiftEffectUpdateNotificationKey object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(showRoomFirstChargeWindowFormNot:) name:kShowFirstRechargeView object:nil]; + [XPSkillCardPlayerManager shareInstance].isInRoom = YES; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [self.menuContainerView menuResignFirstResponder]; + [self.menuContainerView menuResignFirstResponder]; } - (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; + [super viewWillAppear:animated]; + [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; +} +-(void)viewWillDisappear:(BOOL)animated{ + [super viewWillDisappear:animated]; + self.freeView.hidden = YES; } -(void)viewWillDisappear:(BOOL)animated{ @@ -267,1516 +293,1765 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 [super viewDidAppear:animated]; self.freeView.hidden = NO; self.navigationController.interactivePopGestureRecognizer.enabled = NO; + [XPSkillCardPlayerManager shareInstance].isInRoomVC = NO; +} +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + self.freeView.hidden = NO; [XPSkillCardPlayerManager shareInstance].isInRoomVC = YES; - if([XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge == YES && self.isShowFirstRecharge == NO){ - [XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge = NO; - ///获取首充次数 - [self.presenter getRoomFirstCharegWindow:self.roomUid]; - } + if([XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge == YES && self.isShowFirstRecharge == NO){ + [XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge = NO; + ///获取首充次数 + [self.presenter getRoomFirstCharegWindow:self.roomUid]; + } } #pragma mark - Private Method - (void)initSubViews { - self.view.backgroundColor = [UIColor clearColor]; - [self.view addSubview:self.backContainerView]; - [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]; - [self.view addSubview:self.roomHeaderView]; - [self.view addSubview:self.functionView]; - [self.view addSubview:self.animationView]; + self.view.backgroundColor = [UIColor clearColor]; + [self.view addSubview:self.backContainerView]; + [self.view addSubview:self.littleGameView]; + [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]; + [self.view addSubview:self.roomHeaderView]; + [self.view addSubview:self.functionView]; + [self.view addSubview:self.animationView]; + self.activityContainerView.hidden = YES; + self.littleGameView.hidden = YES; + if ([ClientConfig shareConfig].canOpen) { + self.littleGameView.hidden = NO; + self.activityContainerView.hidden = NO; + } } - (void)initSubViewConstraints { - [self.backContainerView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.view); - }]; + [self.backContainerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; + [self.littleGameView 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.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); + }]; - [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); - }]; + [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]; + if (closeCount.intValue > 3) { + quickMsgHeight = 0; + } else { + quickMsgHeight = 30; + } + [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.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]; - if (closeCount.intValue > 3) { - quickMsgHeight = 0; - } else { - quickMsgHeight = 30; - } - [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.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); - }]; + [self.functionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; } - (void)updateViewConstraintsOnAnchorRoom { - [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); - }]; + [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); + }]; } - (void)exitOldRoom { - NSString * roomUid = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.uid]; - if (roomUid.integerValue > 0 && roomUid.integerValue != self.roomUid.integerValue) { - //有最小化房间 并且要进入的房间和最小化的房间不一样的话 就先退掉 最小化的房间 - NSString * roomId = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.roomId]; - [self.presenter exitNIMRoom:roomId]; - [[RtcManager instance] exitRoom]; - [[XPRoomMiniManager shareManager] resetLocalMessage]; - [self.presenter reportUserOutRoom:roomUid]; - } + NSString * roomUid = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.uid]; + if (roomUid.integerValue > 0 && roomUid.integerValue != self.roomUid.integerValue) { + //有最小化房间 并且要进入的房间和最小化的房间不一样的话 就先退掉 最小化的房间 + NSString * roomId = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.roomId]; + [self.presenter exitNIMRoom:roomId]; + [[RtcManager instance] exitRoom]; + [[XPRoomMiniManager shareManager] resetLocalMessage]; + [self.presenter reportUserOutRoom:roomUid]; + } } - (void)userEnterRoomSuccess { - 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 safeSetObject:self.userInfo.nick forKey:@"nick"]; - [att safeSetObject:self.userInfo.viewUrl forKey:@"viewUrl"]; - [att safeSetObject:@(self.userInfo.otherViewType) forKey:@"otherViewType"]; - } else if (self.userInfo.carEffect.length > 0) { - [att safeSetObject:self.userInfo.carEffect forKey:@"effect"]; - [att safeSetObject:self.userInfo.nick forKey:@"nick"]; - } 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]; + 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 safeSetObject:self.userInfo.nick forKey:@"nick"]; + [att safeSetObject:self.userInfo.viewUrl forKey:@"viewUrl"]; + [att safeSetObject:@(self.userInfo.otherViewType) forKey:@"otherViewType"]; + } else if (self.userInfo.carEffect.length > 0) { + [att safeSetObject:self.userInfo.carEffect forKey:@"effect"]; + [att safeSetObject:self.userInfo.nick forKey:@"nick"]; + } 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]; } - (void)changeStageViewOnRoomUpdate { - if (self.roomInfo.roomModeType == RoomModeType_Open_Blind && ![self.stageView isKindOfClass:[DatingStageView class]]) { - [self.stageView removeFromSuperview]; - self.stageView = nil; - self.stageView = [[DatingStageView alloc] initWithDelegate:self]; - } else if(self.roomInfo.datingState == RoomDatingStateChangeType_Close && ![self.stageView isKindOfClass:[SocialStageView class]]) { - [self.stageView removeFromSuperview]; - self.stageView = nil; - self.stageView = [[SocialStageView alloc] initWithDelegate:self]; - } else if (self.roomInfo.type == RoomType_Anchor) { - 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.hadChangeRoomType && ![self.stageView isKindOfClass:[SocialStageView class]]) { - [self.stageView removeFromSuperview]; - self.stageView = nil; - self.stageView = [[SocialStageView alloc] initWithDelegate:self]; - } else { - return; - } - - - if (!self.stageView.superview) { - [self.view insertSubview:self.stageView belowSubview:self.roomHeaderView]; - } - - - if (self.roomInfo.type == RoomType_MiniGame) { - [self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.view); - make.top.mas_equalTo(self.roomHeaderView.mas_bottom).offset(26 + 4); - make.height.mas_equalTo(self.stageView.hightForStageView); - }]; - CGFloat height = 70; - if (iPhoneXSeries) { - height = 70; - } else { - height = 50; + if (self.roomInfo.roomModeType == RoomModeType_Open_Blind && ![self.stageView isKindOfClass:[DatingStageView class]]) { + [self.stageView removeFromSuperview]; + self.stageView = nil; + self.stageView = [[DatingStageView alloc] initWithDelegate:self]; + } else if(self.roomInfo.datingState == RoomDatingStateChangeType_Close && ![self.stageView isKindOfClass:[SocialStageView class]]) { + [self.stageView removeFromSuperview]; + self.stageView = nil; + self.stageView = [[SocialStageView alloc] initWithDelegate:self]; + } else if (self.roomInfo.type == RoomType_Anchor) { + 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]; } - [self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(height); - make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); - make.left.mas_equalTo(self.view); - make.right.mas_equalTo(self.activityContainerView.mas_left).offset(-10); - }]; - - [self.activityContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(65); - make.right.mas_equalTo(self.view); - make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); - make.width.mas_equalTo(80); - }]; - } else { - [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); - }]; - - [self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.top.mas_equalTo(self.stageView.mas_bottom); - make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); - 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); - make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); - make.width.mas_equalTo(80); - }]; - } + }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]; + } + }else if(self.roomInfo.hadChangeRoomType && ![self.stageView isKindOfClass:[SocialStageView class]]) { + [self.stageView removeFromSuperview]; + self.stageView = nil; + self.stageView = [[SocialStageView alloc] initWithDelegate:self]; + } else { + return; + } + + + if (!self.stageView.superview) { + [self.view insertSubview:self.stageView belowSubview:self.roomHeaderView]; + } + + [self.functionView updateRankViewConstraintsWityType:self.roomInfo.type]; + if (self.roomInfo.type == RoomType_MiniGame) { + [self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.view); + make.top.mas_equalTo(self.roomHeaderView.mas_bottom).offset(26 + 4); + make.height.mas_equalTo(self.stageView.hightForStageView); + }]; + + [self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(70); + make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); + make.left.mas_equalTo(self.view); + make.right.mas_equalTo(self.activityContainerView.mas_left).offset(-10); + }]; + self.quickMessageContainerView.hidden = YES; + [self.quickMessageContainerView mas_updateConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(0); + }]; + [self.activityContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(65); + make.right.mas_equalTo(self.view); + make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); + make.width.mas_equalTo(80); + }]; + + } else { + self.quickMessageContainerView.hidden = NO; + [self.quickMessageContainerView mas_updateConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(30); + }]; + [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); + }]; + + [self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.stageView.mas_bottom); + make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); + 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); + make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); + make.width.mas_equalTo(80); + }]; + } } - (void)changeStageViewOnAnchorRoom { - 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]; - } + 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); - }]; + [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); + }]; - CGFloat quickMsgHeight = 30; - //记录最后关闭时间 - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSNumber *closeCount = [defaults objectForKey:kRoomQuickMessageCloseCount]; - if (closeCount.intValue > 3 || self.roomInfo.speakTemplate.count <=0) { - quickMsgHeight = 0; - } else { - quickMsgHeight = 30; - } - 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); - }]; + CGFloat quickMsgHeight = 30; + //记录最后关闭时间 + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSNumber *closeCount = [defaults objectForKey:kRoomQuickMessageCloseCount]; + if (closeCount.intValue > 3 || self.roomInfo.speakTemplate.count <=0) { + quickMsgHeight = 0; + } else { + quickMsgHeight = 30; + } + 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); + }]; } +#pragma mark - CountDownHelperDelegate +- (void)onCountdownFinish { + [[NSNotificationCenter defaultCenter]postNotificationName:kFreeGiftCountdownNotification object:nil userInfo:@{@"isCountdownFinish":@(YES)}]; + if(self.freeModel.curStage.integerValue < self.freeModel.maxStage.integerValue){ + [self.presenter getFreeGiftData]; + } + if(self.freeModel.curStage.intValue == 0){ + self.freeView.freeModel = self.freeModel; + if(!self.freeView.superview){ + [kWindow addSubview:self.freeView]; + } + } + +} +- (void)onCountdownOpen:(int)time { + NSInteger seconds = time; + int hours = (seconds)%(24*3600)/3600; + int minutes = (seconds)%3600/60; + int second = (seconds)%60; + [[NSNotificationCenter defaultCenter]postNotificationName:kFreeGiftCountdownNotification object:nil userInfo:@{@"text":[NSString stringWithFormat:@"%02d:%02d:%02d",hours,minutes,second],@"isCountdownFinish":@(NO)}]; + + +} -(void)showRoomFirstChargeWindowFormNot:(NSNotification *)not{ - if(not != nil){ - NSDictionary *parameter = not.object; - if(parameter != nil){ - self.firstRechargeView.type = parameter[@"type"]; - self.firstRechargeView.diamonds = parameter[@"diamonds"]; - } - } - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showRoomFirstChargeWindow) object:nil]; - [[UIApplication sharedApplication].keyWindow addSubview:self.firstRechargeView]; - [self.presenter updateRoomFirstCharegWindow:self.roomUid]; + if(not != nil){ + NSDictionary *parameter = not.object; + if(parameter != nil){ + self.firstRechargeView.type = parameter[@"type"]; + self.firstRechargeView.diamonds = parameter[@"diamonds"]; + } + } + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showRoomFirstChargeWindow) object:nil]; + [[UIApplication sharedApplication].keyWindow addSubview:self.firstRechargeView]; + [self.presenter updateRoomFirstCharegWindow:self.roomUid]; } -(void)showRoomFirstChargeWindow{ - if([XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge == YES){ - self.isShowFirstRecharge = NO; - return; - } - UIViewController *viewController = [XCCurrentVCStackManager shareManager].getCurrentVC; - if(![viewController isKindOfClass:[XPRoomViewController class]]){ - [viewController dismissViewControllerAnimated:YES completion:nil]; - } - self.isShowFirstRecharge = NO; - [self.presenter updateRoomFirstCharegWindow:self.roomUid]; - [[UIApplication sharedApplication].keyWindow addSubview:self.firstRechargeView]; + if([XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge == YES){ + self.isShowFirstRecharge = NO; + return; + } + UIViewController *viewController = [XCCurrentVCStackManager shareManager].getCurrentVC; + if(![viewController isKindOfClass:[XPRoomViewController class]]){ + [viewController dismissViewControllerAnimated:YES completion:nil]; + } + self.isShowFirstRecharge = NO; + [self.presenter updateRoomFirstCharegWindow:self.roomUid]; + [[UIApplication sharedApplication].keyWindow addSubview:self.firstRechargeView]; } - (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"]; - }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"]; - } + ///退出排麦 + 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"]; + }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"]; + } } ///超管进入密码房间 - (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]; - 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]; - } + __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]; + [self.messageContainerView onRoomMiniEntered]; + [self.functionView onRoomMiniEntered]; + [self.functionView onRoomEntered]; + } + [[XPRoomMiniManager shareManager] configRoomInfo:nil]; + [[XPRoomMiniManager shareManager] configUserInfo:nil]; + [[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO]; + } } ///超管进个播有密码房间 - (void)handleSuperManagerEnterAnchorRoom:(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; - 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]; + __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]; - } - [self.view bringSubviewToFront:self.animationView]; + [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]; + } + [self.view bringSubviewToFront:self.animationView]; - [self updateViewConstraintsOnAnchorRoom]; - [self changeStageViewOnAnchorRoom]; + [self updateViewConstraintsOnAnchorRoom]; + [self changeStageViewOnAnchorRoom]; - [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; - [self.menuContainerView onRoomEntered]; - [self.backContainerView 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]; - } + [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 { - 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]; - } + 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 { - 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 { - [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomViewController0")]; - [self dismissViewControllerAnimated:YES completion:nil]; - return YES; - } - } else { - return NO; - } + 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 { + [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomViewController0")]; + [self dismissViewControllerAnimated:YES completion:nil]; + return YES; + } + } else { + return NO; + } +} +-(void)requesstShieldingAction{ + [self.presenter requesstShieldingWtihType:@"1" objId:[NSString stringWithFormat:@"%ld",self.roomInfo.uid]]; } - #pragma mark - 本地礼物特效更新 - (void)myGiftEffectUpdate:(NSNotification *)notification { - NSDictionary * dic = notification.object; - self.roomInfo.hasAnimationEffect = ((NSNumber *)dic[@"hasAnimationEffect"]).boolValue; - self.hasAnimationEffect = self.roomInfo.hasAnimationEffect; - [self.roomHeaderView onRoomUpdate]; + NSDictionary * dic = notification.object; + self.roomInfo.hasAnimationEffect = ((NSNumber *)dic[@"hasAnimationEffect"]).boolValue; + self.hasAnimationEffect = self.roomInfo.hasAnimationEffect; + [self.roomHeaderView onRoomUpdate]; } #pragma mark - XPRoomProtocol - (void)initEnterRoomSuccess:(RoomInfoModel *)roomInfo user:(UserInfoModel *)userInfo { - [XNDJTDDLoadingTool hideHUDInView:self.navigationController.view]; - [XPSkillCardPlayerManager shareInstance].roomUid = @(roomInfo.uid).stringValue; - userInfo.fromUid = self.fromUid; - userInfo.fromType = self.fromType; - userInfo.fromNick = self.fromNick; - self.hasAnimationEffect = roomInfo.hasAnimationEffect; - 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) {//进房密码的情况 - if (!self.isRequestSuperAdmin) { - [Api getRoomSuperAdminList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { - NSArray * array = [GuildSuperAdminInfoModel modelsWithArray:data.data]; - self.superMangerList = array; - [self superAdminEnterPwdRoom:roomInfo]; - } roomUid:self.roomUid]; - } else { - [self superAdminEnterPwdRoom:roomInfo]; - } - } 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.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]; - } 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", userInfo.uid]]) { // 当前用户进入自己房间 - if (roomInfo.roomId > 0) { // 存在房间信息,直接使用房间信息开房 - if (roomInfo.type == RoomType_MiniGame && roomInfo.mgId > 0) { - self.mgId = [NSString stringWithFormat:@"%lld", roomInfo.mgId]; - } - [self.presenter openRoom:roomInfo.title type:roomInfo.type roomPwd:roomInfo.roomPwd roomDesc:roomInfo.roomDesc backPic:@"" mgId:self.mgId]; - } else { // 不存在房间信息,全新开房 - NSString* title = [NSString stringWithFormat:YMLocalizedString(@"XPRoomViewController1"), 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:YMLocalizedString(@"XPRoomViewController2")]; - [self enterRoomFail:0]; - } - } + [XNDJTDDLoadingTool hideHUDInView:self.navigationController.view]; + [XPSkillCardPlayerManager shareInstance].roomUid = @(roomInfo.uid).stringValue; + userInfo.fromUid = self.fromUid; + userInfo.fromType = self.fromType; + userInfo.fromNick = self.fromNick; + self.hasAnimationEffect = roomInfo.hasAnimationEffect; + 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) {//进房密码的情况 + if (!self.isRequestSuperAdmin) { + [Api getRoomSuperAdminList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + NSArray * array = [GuildSuperAdminInfoModel modelsWithArray:data.data]; + self.superMangerList = array; + [self superAdminEnterPwdRoom:roomInfo]; + } roomUid:self.roomUid]; + } else { + [self superAdminEnterPwdRoom:roomInfo]; + } + } 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]; + 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]; + } 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", userInfo.uid]]) { // 当前用户进入自己房间 + if (roomInfo.roomId > 0) { // 存在房间信息,直接使用房间信息开房 + if (roomInfo.type == RoomType_MiniGame && roomInfo.mgId > 0) { + self.mgId = [NSString stringWithFormat:@"%lld", roomInfo.mgId]; + } + [self.presenter openRoom:roomInfo.title type:roomInfo.type roomPwd:roomInfo.roomPwd roomDesc:roomInfo.roomDesc backPic:@"" mgId:self.mgId]; + } else { // 不存在房间信息,全新开房 + NSString* title = [NSString stringWithFormat:YMLocalizedString(@"XPRoomViewController1"), 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:YMLocalizedString(@"XPRoomViewController2")]; + [self enterRoomFail:0]; + } + } } - (void)openRoomSuccess:(RoomInfoModel *)roomInfo { - [XNDJTDDLoadingTool hideHUDInView:self.navigationController.view]; - [self hideHUD]; - self.roomInfo = roomInfo; - if (roomInfo.type == RoomType_Anchor) { - [self handleInitAnchorRoom]; - [self showAnchorScrollTipView]; - return; - } - [self changeStageViewOnRoomUpdate]; - [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; - [self.backContainerView onRoomEntered]; - [self.functionView onRoomEntered]; - [self.messageContainerView onRoomEntered]; - self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate; - [self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo]; + [XNDJTDDLoadingTool hideHUDInView:self.navigationController.view]; + [self hideHUD]; + self.roomInfo = roomInfo; + if (roomInfo.type == RoomType_Anchor) { + [self handleInitAnchorRoom]; + [self showAnchorScrollTipView]; + return; + } + [self changeStageViewOnRoomUpdate]; + [self.roomHeaderView onRoomEntered]; + [self.activityContainerView onRoomEntered]; + [self.backContainerView onRoomEntered]; + [self.littleGameView onRoomEntered]; + [self.functionView onRoomEntered]; + [self.messageContainerView onRoomEntered]; + self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate; + [self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo]; } - (void)enterRoomSuccess:(NIMChatroom *)chatRoom { - [XNDJTDDLoadingTool hideHUDInView:self.navigationController.view]; - // room/get中的房间在线人数 是定时更新的 不是及时刷新 - self.roomInfo.onlineNum = chatRoom.onlineUserCount; - [self.stageView onRoomEntered]; - [self.functionView onRoomEntered]; - //上报进房 - 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) { - ///有的时候 拉取麦序的话 可能会有点延迟 导致送礼物的人 没有拉取到 - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:@"kShowGiftView" object:@{@"giftId": self.giftId}]; - }); - } - //获取一下红包信息 - [self.presenter getRedPacket:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]]; + [XNDJTDDLoadingTool hideHUDInView:self.navigationController.view]; + // room/get中的房间在线人数 是定时更新的 不是及时刷新 + self.roomInfo.onlineNum = chatRoom.onlineUserCount; + [self.stageView onRoomEntered]; + [self.functionView onRoomEntered]; + //上报进房 + 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) { + ///有的时候 拉取麦序的话 可能会有点延迟 导致送礼物的人 没有拉取到 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:@"kShowGiftView" object:@{@"giftId": self.giftId}]; + }); + } + //获取一下红包信息 + [self.presenter getRedPacket:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]]; } - (void)enterRoomFail:(NSInteger)code { - [XNDJTDDLoadingTool hideHUDInView:self.navigationController.view]; - [self hideHUD]; - if (code == 13003) { - [self showErrorToast:YMLocalizedString(@"XPRoomViewController3")]; - } - [self dismissViewControllerAnimated:YES completion:nil]; + [XNDJTDDLoadingTool hideHUDInView:self.navigationController.view]; + [self hideHUD]; + if (code == 13003) { + [self showErrorToast:YMLocalizedString(@"XPRoomViewController3")]; + } + [self dismissViewControllerAnimated:YES completion:nil]; } ///请求房间超管成功 ///这个接口本来是想和roominfo 和userinfo 一起请求的 但是 进房的同步操作 只有超管进入密码房间才会有同步的问题 - (void)getRoomSuperAdminScuccess:(NSArray *)list { - self.isRequestSuperAdmin = YES; - self.superMangerList = list; + self.isRequestSuperAdmin = YES; + self.superMangerList = list; } ///获取推荐滚动的个播房列表(只有第一次进房获取) - (void)getNextAnchorRoomSuccess:(RoomInfoModel *)roomInfo { - [self hideHUD]; - if (roomInfo) { //获取下一个房间成功 - if (![self.anchorRoomList containsObject:self.roomUid]) { - [self.anchorRoomList addObject:self.roomUid]; - } - self.anchorIndex = self.anchorRoomList.count -1; - //1、退出房间操作 - self.anchorScrollView.isCanScrollTop = YES; - self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight); - 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]]; - [self.functionView onRoomChange]; - //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 { - if (self.anchorScrollView.isCanScrollTop) { - self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight); - } else { - self.anchorScrollView.contentOffset = CGPointMake(0, 0); - } - [self showErrorToast:YMLocalizedString(@"XPRoomViewController4")]; - } + [self hideHUD]; + if (roomInfo) { //获取下一个房间成功 + if (![self.anchorRoomList containsObject:self.roomUid]) { + [self.anchorRoomList addObject:self.roomUid]; + } + self.anchorIndex = self.anchorRoomList.count -1; + //1、退出房间操作 + self.anchorScrollView.isCanScrollTop = YES; + self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight); + 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]]; + [self.functionView onRoomChange]; + //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 { + if (self.anchorScrollView.isCanScrollTop) { + self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight); + } else { + self.anchorScrollView.contentOffset = CGPointMake(0, 0); + } + [self showErrorToast:YMLocalizedString(@"XPRoomViewController4")]; + } } - (void)getCurrentRoomInfoSuccess:(RoomInfoModel *)roomInfo { - [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]; - [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 { - [self showErrorToast:YMLocalizedString(@"XPRoomViewController5")]; - } + [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]; + [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 { + [self showErrorToast:YMLocalizedString(@"XPRoomViewController5")]; + } } ///个播房初始化一些操作 - (void)handleInitAnchorRoom { - 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 * 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]; + 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 * 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]; - [self.view bringSubviewToFront:self.animationView]; + [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]; + [self.view bringSubviewToFront:self.animationView]; - [self updateViewConstraintsOnAnchorRoom]; - [self changeStageViewOnAnchorRoom]; + [self updateViewConstraintsOnAnchorRoom]; + [self changeStageViewOnAnchorRoom]; - [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; - [self.menuContainerView onRoomEntered]; - [self.backContainerView 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:YMLocalizedString(@"XPRoomViewController6"), 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:YMLocalizedString(@"XPRoomViewController7")]; - [self enterRoomFail:0]; - } - } + [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:YMLocalizedString(@"XPRoomViewController6"), 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:YMLocalizedString(@"XPRoomViewController7")]; + [self enterRoomFail:0]; + } + } } - (void)getRedPacketSuccess:(NSArray *)list { - 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]; - } + 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]; + } +} +-(void)getFreeGiftDataSuccess:(XPFreeGiftModel *)freeModel{ + self.freeModel = freeModel; + self.menuContainerView.freeModel = freeModel; + if(self.freeModel.curStage.integerValue < self.freeModel.maxStage.integerValue){ + [CountDownHelper shareHelper].isCountdownFinish = NO; + [[CountDownHelper shareHelper] openCountdownWithTime:freeModel.curStageSecond.intValue]; + }else{ + if([CountDownHelper shareHelper].isCountdownFinish == NO){ + [CountDownHelper shareHelper].isCountdownFinish = YES; + } + [[NSNotificationCenter defaultCenter]postNotificationName:kFreeGiftCountdownNotification object:nil userInfo:@{@"isHiddenCountdown":@(YES)}]; + [[CountDownHelper shareHelper] stopCountDown]; + } + + if(self.freeModel.curStage.intValue > 0 && [[XPRoomMiniManager shareManager].curState isEqualToString:@"0"]){ + self.freeView.freeModel = self.freeModel; + if(!self.freeView.superview){ + [kWindow addSubview:self.freeView]; + } + [XPRoomMiniManager shareManager].curState = nil; + } + } - - (void)getRoomFirstChargeWindowSuccess:(FirstChargeRoomWindowModel *)model{ - if(model.needToShow == NO || model.showAfterSecond <= 0 || self.isShowFirstRecharge == YES)return; - self.isShowFirstRecharge = YES; - [self performSelector:@selector(showRoomFirstChargeWindow) withObject:nil afterDelay:model.showAfterSecond]; + if(model.needToShow == NO || model.showAfterSecond <= 0 || self.isShowFirstRecharge == YES)return; + self.isShowFirstRecharge = YES; + [self performSelector:@selector(showRoomFirstChargeWindow) withObject:nil afterDelay:model.showAfterSecond]; } #pragma mark - NIMChatroomManagerDelegate - (void)chatroomBeKicked:(NIMChatroomBeKickedResult *)result { - if (result.reason == 2) { - [self showErrorToast:YMLocalizedString(@"XPRoomViewController8")]; - ///保存被踢出时的时间 - 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]; - } else if (result.reason == 5) { - [self showErrorToast:YMLocalizedString(@"XPRoomViewController9")]; - } - [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 dismissViewControllerAnimated:YES completion:nil]; + if (result.reason == 2) { + [self showErrorToast:YMLocalizedString(@"XPRoomViewController8")]; + ///保存被踢出时的时间 + 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]; + } else if (result.reason == 5) { + [self showErrorToast:YMLocalizedString(@"XPRoomViewController9")]; + } + [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]; } #pragma mark - NIMChatManagerDelegate - (void)onRecvMessages:(NSArray *)messages { - 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 = (AttachmentModel *)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; - } - } - } - } - } - - // 非房间内消息不处理 - if (message.session.sessionType != NIMSessionTypeChatroom) { - continue; - } + 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 = (AttachmentModel *)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; + } + } + } + } + } + + // 非房间内消息不处理 + if (message.session.sessionType != NIMSessionTypeChatroom) { + continue; + } - // 非本房间不处理 - if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) { - 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; - NSInteger onLineNumber = self.roomInfo.onlineNum; - 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]; - RoomInfoModel *newRoomInfo = [RoomInfoModel modelWithJSON:lastRoomInfoDic]; - //TODO: 从小游戏房间切换到普通房间的话 mgid不会被清除掉 - if (newRoomInfo.type != RoomType_MiniGame) { - newRoomInfo.mgId = 0; - } - 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; - } else { - newRoomInfo.datingState = RoomDatingStateChangeType_Normal; - } - //房间类型是否变更了(从个播->普通,个播->小游戏等) - newRoomInfo.hadChangeRoomType = self.roomInfo.type != newRoomInfo.type; - BOOL anchorToOther = newRoomInfo.type != RoomType_Anchor && self.roomInfo.type == RoomType_Anchor;//个播变其他房 - self.roomInfo = newRoomInfo; - [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]; + if (message.messageType == NIMMessageTypeNotification) { + NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject; + NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content; + NSInteger onLineNumber = self.roomInfo.onlineNum; + 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]; + RoomInfoModel *newRoomInfo = [RoomInfoModel modelWithJSON:lastRoomInfoDic]; + //TODO: 从小游戏房间切换到普通房间的话 mgid不会被清除掉 + if (newRoomInfo.type != RoomType_MiniGame) { + newRoomInfo.mgId = 0; + } + 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; + } else { + newRoomInfo.datingState = RoomDatingStateChangeType_Normal; + } + //房间类型是否变更了(从个播->普通,个播->小游戏等) + newRoomInfo.hadChangeRoomType = self.roomInfo.type != newRoomInfo.type; + BOOL anchorToOther = newRoomInfo.type != RoomType_Anchor && self.roomInfo.type == RoomType_Anchor;//个播变其他房 + self.roomInfo = newRoomInfo; + [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]; - } 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]; - } - } - break; - } - } - break; - case NIMChatroomEventTypeEnter: - if (content.source.userId.integerValue != [AccountInfoStorage instance].getUid.integerValue && self.userInfo.platformRole != 1) { - onLineNumber += 1; - }else {///如果是自己的话 如果有坐骑的话 - [self userEnterRoomSuccess]; - ///在活动页面 判断是否显示 相亲加入的按钮 所以需要等用户进房成功之后才能获取 房间角色 - [self.activityContainerView onRoomUpdate]; - [self.menuContainerView onRoomUpdate]; - } - 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; - default: - break; - } - self.roomInfo.onlineNum = onLineNumber; - [self.roomHeaderView onRoomUpdate]; - [self.stageView handleNIMNotificationMessage:message]; - [self.animationView handleNIMNotificationMessage:message]; - [self.messageContainerView handleNIMNotificationMessage:message]; - [self.activityContainerView handleNIMNotificationMessage:message]; - [self.menuContainerView handleNIMNotificationMessage:message]; - [self.functionView handleNIMNotificationMessage:message]; - if([self.stageView findMicroViewByUid:@(self.userInfo.uid).stringValue] != nil){ - [XPSkillCardPlayerManager shareInstance].isMineInMic = YES; - }else{ - [XPSkillCardPlayerManager shareInstance].isMineInMic = NO; - }; - } else if (message.messageType == NIMMessageTypeCustom) { - NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; - if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { - AttachmentModel * attachment = (AttachmentModel *)obj.attachment; - [self.stageView handleNIMCustomMessage:message]; - [self.animationView handleNIMCustomMessage:message]; - [self.menuContainerView handleNIMCustomMessage:message]; - [self.activityContainerView handleNIMCustomMessage:message]; - [self.functionView handleNIMCustomMessage:message]; - 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]; - } 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]; - } 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]; - } - } 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 dismissViewControllerAnimated:YES completion:nil]; - } - } 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]; - } - } - [self.messageContainerView handleNIMCustomMessage:message]; - } - } else if(message.messageType == NIMMessageTypeText) { - [self.messageContainerView handleNIMTextMessage:message]; - } else if(message.messageType == NIMMessageTypeTip) { - [self.messageContainerView handleNIMTextMessage:message]; - } - } + [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; + } + } + break; + case NIMChatroomEventTypeEnter: + if (content.source.userId.integerValue != [AccountInfoStorage instance].getUid.integerValue && self.userInfo.platformRole != 1) { + onLineNumber += 1; + }else {///如果是自己的话 如果有坐骑的话 + [self userEnterRoomSuccess]; + ///在活动页面 判断是否显示 相亲加入的按钮 所以需要等用户进房成功之后才能获取 房间角色 + [self.activityContainerView onRoomUpdate]; + [self.menuContainerView onRoomUpdate]; + } + 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; + default: + break; + } + self.roomInfo.onlineNum = onLineNumber; + [self.roomHeaderView onRoomUpdate]; + [self.stageView handleNIMNotificationMessage:message]; + [self.animationView handleNIMNotificationMessage:message]; + [self.messageContainerView handleNIMNotificationMessage:message]; + [self.activityContainerView handleNIMNotificationMessage:message]; + [self.menuContainerView handleNIMNotificationMessage:message]; + [self.functionView handleNIMNotificationMessage:message]; + [self.littleGameView handleNIMNotificationMessage:message]; + if([self.stageView findMicroViewByUid:@(self.userInfo.uid).stringValue] != nil){ + [XPSkillCardPlayerManager shareInstance].isMineInMic = YES; + }else{ + [XPSkillCardPlayerManager shareInstance].isMineInMic = NO; + }; + } else if (message.messageType == NIMMessageTypeCustom) { + NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; + if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { + AttachmentModel * attachment = (AttachmentModel *)obj.attachment; + [self.stageView handleNIMCustomMessage:message]; + [self.animationView handleNIMCustomMessage:message]; + [self.menuContainerView handleNIMCustomMessage:message]; + [self.activityContainerView handleNIMCustomMessage:message]; + [self.functionView handleNIMCustomMessage:message]; + [self.littleGameView handleNIMCustomMessage:message]; + 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]; + } 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]; + } 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]; + } + } 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]; + } + } 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_Free_Gift_Star_Reset_Time){ + if(attachment.second == Custom_Message_Sub_Free_Gift_Star_Reset_Time){ + [self.presenter getFreeGiftData]; + [[NSNotificationCenter defaultCenter]postNotificationName:kFreeGiftCountdownNotification object:nil userInfo:@{@"isReset":@(YES)}]; + }else if(attachment.second == Custom_Message_Sub_Update_Gift_Information){ + [self.presenter getFreeGiftData]; + [[NSNotificationCenter defaultCenter]postNotificationName:kFreeGiftCountdownNotification object:nil userInfo:@{@"updateGiftInfo":attachment.data ?: @""}]; + } + + } + [self.messageContainerView handleNIMCustomMessage:message]; + } + } else if(message.messageType == NIMMessageTypeText) { + [self.messageContainerView handleNIMTextMessage:message]; + [self.littleGameView handleNIMTextMessage:message]; + } else if(message.messageType == NIMMessageTypeTip) { + [self.messageContainerView handleNIMTextMessage:message]; + } + } +} +#pragma mark - NIMBroadcastDelegate +// 广播消息 +- (void)onReceiveBroadcastMessage:(NIMBroadcastMessage *)broadcastMessage{ + if (![ClientConfig shareConfig].canOpen) { + return; + } + if (broadcastMessage.content) { + NSDictionary *msgDictionary = [broadcastMessage.content toJSONObject]; + AttachmentModel *attachment = [AttachmentModel modelWithJSON:msgDictionary[@"body"]]; + BOOL isHave = NO; + if(attachment.first == CustomMessageType_Graffiti_Star_Kitchen && attachment.second == Custom_Message_Sub_Star_Kitchen_FullScreen){ + isHave = YES; + }else if(attachment.first == CustomMessageType_Look_Love && attachment.second == Custom_Message_Sub_Look_Love_InRoom_NeedAllMicSend){ + + }else if (attachment.first == CustomMessageType_Treasure_Fairy && (attachment.second == Custom_Message_Sub_Treasure_Fairy_Draw_Gift_L4 || attachment.second == Custom_Message_Sub_Treasure_Fairy_Draw_Gift_L5 || attachment.second == Custom_Message_Sub_Treasure_Fairy_Convert_L1 || attachment.second == Custom_Message_Sub_Treasure_Fairy_Convert_L2 || attachment.second == Custom_Message_Sub_Treasure_Fairy_Convert_L3)) { //夺宝精灵 + + }else if (attachment.first == CustomMessageType_Tarot && (attachment.second == Custom_Message_Sub_Tarot_Advanced || attachment.second == Custom_Message_Sub_Tarot_Intermediate)){ + isHave = YES; + } + + if(isHave == NO)return; + attachment.isBroadcast = YES; + NIMMessage *message = [NIMMessage new]; + NIMCustomObject *object = [NIMCustomObject new]; + object.attachment = attachment; + message.messageObject = object; + + [self.messageContainerView handleNIMTextMessage:message]; + + } } - //发送消息成功回调 - (void)sendMessage:(NIMMessage *)message didCompleteWithError:(NSError *)error { - // 非本房间不处理 - if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) { - return; - } + // 非本房间不处理 + if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) { + return; + } - if (message.yidunAntiSpamRes) { - NSDictionary * spamRes = message.yidunAntiSpamRes.toJSONObject; - NSDictionary * spamResExt = ((NSString *)spamRes[@"ext"]).toJSONObject; - if ([spamResExt[@"antispam"][@"suggestion"] intValue] == 2) { - [self showErrorToast:YMLocalizedString(@"XPRoomViewController10")]; - return; - } - } + if (message.yidunAntiSpamRes) { + NSDictionary * spamRes = message.yidunAntiSpamRes.toJSONObject; + NSDictionary * spamResExt = ((NSString *)spamRes[@"ext"]).toJSONObject; + if ([spamResExt[@"antispam"][@"suggestion"] intValue] == 2) { + [self showErrorToast:YMLocalizedString(@"XPRoomViewController10")]; + return; + } + } - if (error) return; - if (message.messageType == NIMMessageTypeCustom) { - NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; - if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { - AttachmentModel * attachment = obj.attachment; - [self.stageView handleNIMCustomMessage:message]; - [self.animationView handleNIMCustomMessage:message]; - [self.functionView handleNIMCustomMessage:message]; - if (attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_MessageState) { - RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:attachment.data[@"roomInfo"]]; - self.roomInfo.isCloseScreen = roomInfo.isCloseScreen; - [self.menuContainerView onRoomUpdate]; - } - [self.messageContainerView handleNIMCustomMessage:message]; - } - }else if(message.messageType == NIMMessageTypeText) { - [self.messageContainerView handleNIMTextMessage:message];; - } + if (error) return; + if (message.messageType == NIMMessageTypeCustom) { + NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; + if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { + AttachmentModel * attachment = (AttachmentModel *)obj.attachment; + [self.stageView handleNIMCustomMessage:message]; + [self.animationView handleNIMCustomMessage:message]; + [self.functionView handleNIMCustomMessage:message]; + if (attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_MessageState) { + RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:attachment.data[@"roomInfo"]]; + self.roomInfo.isCloseScreen = roomInfo.isCloseScreen; + [self.menuContainerView onRoomUpdate]; + } + [self.messageContainerView handleNIMCustomMessage:message]; + } + }else if(message.messageType == NIMMessageTypeText) { + [self.messageContainerView handleNIMTextMessage:message];; + } } #pragma mark - NIMLoginManagerDelegate - (void)onKickout:(NIMLoginKickoutResult *)result { - [self exitRoom]; - [self dismissViewControllerAnimated:YES completion:nil]; + [self exitRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - NIMConversationManagerDelegate - (void)didAddRecentSession:(NIMRecentSession *)recentSession - totalUnreadCount:(NSInteger)totalUnreadCount { - [self.menuContainerView addNIMRecentSession:recentSession]; + totalUnreadCount:(NSInteger)totalUnreadCount { + [self.menuContainerView addNIMRecentSession:recentSession]; } - (void)didUpdateRecentSession:(NIMRecentSession *)recentSession - totalUnreadCount:(NSInteger)totalUnreadCount { - [self.menuContainerView addNIMRecentSession:recentSession]; + totalUnreadCount:(NSInteger)totalUnreadCount { + [self.menuContainerView addNIMRecentSession:recentSession]; } - (void)didRemoveRecentSession:(NIMRecentSession *)recentSession - totalUnreadCount:(NSInteger)totalUnreadCount { - [self.menuContainerView removeNIMRecentSession:recentSession]; + totalUnreadCount:(NSInteger)totalUnreadCount { + [self.menuContainerView removeNIMRecentSession:recentSession]; } #pragma mark - RoomDelegate - (RoomInfoModel *)getRoomInfo { - return self.roomInfo; + return self.roomInfo; } - (UserInfoModel *)getUserInfo { - return self.userInfo; + return self.userInfo; } - (void)exitRoom { - [self.menuContainerView menuResignFirstResponder]; - 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) { - [TTPopup alertWithMessage:YMLocalizedString(@"XPRoomViewController11") confirmHandler:^{ - __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]; - [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; - [[XPRoomMiniManager shareManager] resetLocalMessage]; - [[RtcManager instance] exitRoom]; - [self.presenter reportUserOutRoom:roomUid]; - [self handleFirstOutRoom]; - [self dismissViewControllerAnimated:YES completion:nil]; - } cancelHandler:^{ - - }]; - return; - } - } - [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; - [[XPRoomMiniManager shareManager] resetLocalMessage]; - [[RtcManager instance] exitRoom]; - [self.presenter reportUserOutRoom:roomUid]; - [self handleFirstOutRoom]; - [self dismissViewControllerAnimated:YES completion:nil]; - } roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"]; - } 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:YMLocalizedString(@"XPRoomViewController11") confirmHandler:^{ - __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]; - [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; - [[XPRoomMiniManager shareManager] resetLocalMessage]; - [[RtcManager instance] exitRoom]; - [self handleFirstOutRoom]; - [self dismissViewControllerAnimated:YES completion:nil]; - } cancelHandler:^{ - - }]; - return; - } - } - [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; - [[XPRoomMiniManager shareManager] resetLocalMessage]; - [[RtcManager instance] exitRoom]; - [self handleFirstOutRoom]; - [self dismissViewControllerAnimated:YES completion:nil]; - } roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"]; - } else { - [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; - [[XPRoomMiniManager shareManager] resetLocalMessage]; - [[RtcManager instance] exitRoom]; - [self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]]; - [self handleFirstOutRoom]; - [self dismissViewControllerAnimated:YES completion:nil]; - } + [self.menuContainerView menuResignFirstResponder]; + [self.animationView resumeTimer]; + 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) { + [TTPopup alertWithMessage:YMLocalizedString(@"XPRoomViewController11") confirmHandler:^{ + __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]; + [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; + [[XPRoomMiniManager shareManager] resetLocalMessage]; + [[RtcManager instance] exitRoom]; + [self.presenter reportUserOutRoom:roomUid]; + [self handleFirstOutRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; + } cancelHandler:^{ + + }]; + return; + } + } + [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; + [[XPRoomMiniManager shareManager] resetLocalMessage]; + [[RtcManager instance] exitRoom]; + [self.presenter reportUserOutRoom:roomUid]; + [self handleFirstOutRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; + } roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"]; + } 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:YMLocalizedString(@"XPRoomViewController11") confirmHandler:^{ + __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]; + [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; + [[XPRoomMiniManager shareManager] resetLocalMessage]; + [[RtcManager instance] exitRoom]; + [self handleFirstOutRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; + } cancelHandler:^{ + + }]; + return; + } + } + [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; + [[XPRoomMiniManager shareManager] resetLocalMessage]; + [[RtcManager instance] exitRoom]; + [self handleFirstOutRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; + } roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"]; + }else if(self.roomInfo.type == RoomType_MiniGame) { + if ([self.littleGameView isInSudGame]) { + TTAlertConfig *config = [[TTAlertConfig alloc] init]; + config.cancelButtonConfig.title = YMLocalizedString(@"XPRoomSettingInputView4"); + config.confirmButtonConfig.title = YMLocalizedString(@"XPRoomSettingInputView5"); + config.message = YMLocalizedString(@"XPRoomViewController14"); + [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]; + [self.littleGameView handleSelfInExitEvent]; + [self.littleGameView destroyMG]; + [self handleFirstOutRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; + }); + } cancelHandler:^{ + }]; + } else { + [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; + [[RtcManager instance] exitRoom]; + [self.littleGameView handleSelfInExitEvent]; + [self.littleGameView destroyMG]; + [self handleFirstOutRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; + } + } + else { + [self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]; + [[XPRoomMiniManager shareManager] resetLocalMessage]; + [[RtcManager instance] exitRoom]; + [self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]]; + [self handleFirstOutRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; + } } - (void)miniRoom { - [self.menuContainerView menuResignFirstResponder]; - [[XPRoomMiniManager shareManager] configRoomInfo:self.roomInfo]; - [[XPRoomMiniManager shareManager] configUserInfo:self.userInfo]; - [[XPRoomMiniManager shareManager] configCurrentMusic:self.functionView.getCurrentMusic isPlaying:self.functionView.isPlaying]; - NSMutableDictionary * dic = [NSMutableDictionary dictionary]; - [dic safeSetObject:self.roomInfo.model2dictionary forKey:@"roomInfo"]; - [dic safeSetObject:self.userInfo.model2dictionary forKey:@"userInfo"]; - [dic safeSetObject:self.getMicroQueue forKey:@"microQueue"]; - [[NSNotificationCenter defaultCenter] postNotificationName:kRoomMiniNotificationKey object:nil userInfo:dic]; - [self.view endEditing:YES]; - [self handleFirstOutRoom]; - [self dismissViewControllerAnimated:YES completion:nil]; + if(self.freeModel != nil){ + [XPRoomMiniManager shareManager].curState = self.freeModel.curStage; + } + [self.menuContainerView menuResignFirstResponder]; + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showRoomFirstChargeWindow) object:nil]; + NSDictionary *roomInfoDic = self.roomInfo.model2dictionary != nil ? self.roomInfo.model2dictionary : @{}; + NSDictionary *userInfoDic = self.userInfo.model2dictionary != nil ? self.userInfo.model2dictionary : @{}; + NSMutableDictionary *queueDic = self.getMicroQueue != nil ? self.getMicroQueue : [@{} mutableCopy]; + if(self.roomInfo.type == RoomType_MiniGame) { + if ([self.littleGameView isInSudGame]) { + TTAlertConfig *config = [[TTAlertConfig alloc] init]; + config.cancelButtonConfig.title = YMLocalizedString(@"XPRoomViewController15"); + config.confirmButtonConfig.title = YMLocalizedString(@"XPRoomViewController16"); + config.message = YMLocalizedString(@"XPRoomViewController17"); + [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":roomInfoDic, @"userInfo":userInfoDic, @"microQueue":queueDic}; + [[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":roomInfoDic, @"userInfo":userInfoDic, @"microQueue":queueDic}; + [[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]; + } + }else { + [[XPRoomMiniManager shareManager] configRoomInfo:self.roomInfo]; + [[XPRoomMiniManager shareManager] configUserInfo:self.userInfo]; + [[XPRoomMiniManager shareManager] configCurrentMusic:self.functionView.getCurrentMusic isPlaying:self.functionView.isPlaying]; + NSDictionary * dic = @{@"roomInfo":roomInfoDic, @"userInfo":userInfoDic, @"microQueue":queueDic}; + [[NSNotificationCenter defaultCenter] postNotificationName:kRoomMiniNotificationKey object:nil userInfo:dic]; + [self.view endEditing:YES]; + [self handleFirstOutRoom]; + [self dismissViewControllerAnimated:YES completion:nil]; + } } - (UINavigationController *)getCurrentNav { - return self.navigationController; + return self.navigationController; } - (NSMutableDictionary *)getMicroQueue { - return [self.stageView getMicroQueue]; + return [self.stageView getMicroQueue]; } - (NSArray *)getRoomSuperAdminList { - return self.superMangerList; + return self.superMangerList; } - (NSArray *)getRoomPKGroupTeamList { - return [self.functionView getRoomPKGroupTeamList]; + return [self.functionView getRoomPKGroupTeamList]; } - (BOOL)isRoomPKPlaying { - return [self.functionView isRoomPKPlaying]; + return [self.functionView isRoomPKPlaying]; } - (void)onMicroQueueUpdate:(NSMutableDictionary *)queue { - [self.menuContainerView onMicroQueueUpdate:queue]; - [self.functionView onRoomUpdate]; - [self.functionView onMicroQueueUpdate:queue]; + [self.menuContainerView onMicroQueueUpdate:queue]; + [self.functionView onRoomUpdate]; + [self.functionView onMicroQueueUpdate:queue]; - BOOL isOnMic = false; - for (MicroQueueModel * info in queue.allValues) { - if (info.userInfo.uid > 0 && [AccountInfoStorage instance].getUid.integerValue == info.userInfo.uid) { - isOnMic = YES; - break; - } - } + BOOL isOnMic = false; + for (MicroQueueModel * info in queue.allValues) { + if (info.userInfo.uid > 0 && [AccountInfoStorage instance].getUid.integerValue == info.userInfo.uid) { + isOnMic = YES; + break; + } + } - if (isOnMic) { - self.anchorScrollView.scrollEnabled = NO; - } else { - self.anchorScrollView.scrollEnabled = YES; - } + if (isOnMic) { + self.anchorScrollView.scrollEnabled = NO; + } else { + self.anchorScrollView.scrollEnabled = YES; + } } - (CGPoint)animationPointAtStageViewByUid:(NSString *)uid { - return [self.stageView animationPointAtStageViewByUid:uid]; + return [self.stageView animationPointAtStageViewByUid:uid]; } #pragma mark - 首次退出非自己的房间,处理是否需要弹新用户充值优惠 - (void)handleFirstOutRoom { - 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]; - } + 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]; + } } +#pragma mark - XPRoomLittleGameContainerViewDelegate +- (void)hiddenSudGamePostionView { + [self.functionView hiddenSudGamePostionView]; +} + #pragma mark - AnchorRoomScrollViewDelegate - (void)anchorScrollViewScrollToNext:(AnchorRoomScrollView *)anchorScrollView { - if (!self) { - return; - } - [self.view endEditing:YES]; - [self showAnchorLoading]; - [self.presenter getCycleAnchorRoomList:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]]; + if (!self) { + return; + } + [self.view endEditing:YES]; + [self showAnchorLoading]; + [self.presenter getCycleAnchorRoomList:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]]; } - (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 safeObjectAtIndex1:self.anchorIndex]; - [self.presenter getCurrentRoomInfo:roomUid]; - self.anchorIndex --; - }else { - [self showErrorToast:YMLocalizedString(@"XPRoomViewController13")]; - self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight); - } + if (!self || self.anchorRoomList.count <= 0) { + return; + } + [self.view endEditing:YES]; + [self showAnchorLoading]; + if (self.anchorIndex < self.anchorRoomList.count) { + NSString * roomUid = [self.anchorRoomList safeObjectAtIndex1:self.anchorIndex]; + [self.presenter getCurrentRoomInfo:roomUid]; + self.anchorIndex --; + }else { + [self showErrorToast:YMLocalizedString(@"XPRoomViewController13")]; + 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; - 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]; + NSString *pwdDes = [DESEncrypt encryptUseDES:text key:KeyWithType(KeyType_PasswordEncode)]; + if ([pwdDes isEqualToString:self.roomInfo.roomPwd]) { + [TTPopup dismiss]; + view.isPwdError = NO; + 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]; - } - [self.view bringSubviewToFront:self.animationView]; + [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]; + } + [self.view bringSubviewToFront:self.animationView]; - [self updateViewConstraintsOnAnchorRoom]; - [self changeStageViewOnAnchorRoom]; + [self updateViewConstraintsOnAnchorRoom]; + [self changeStageViewOnAnchorRoom]; - [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; - [self.menuContainerView onRoomEntered]; - [self.backContainerView 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]; - [[XPRoomMiniManager shareManager] configRoomInfo:nil]; - [[XPRoomMiniManager shareManager] configUserInfo:nil]; - [[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO]; - } - } else { - view.isPwdError = YES; - } + [self.roomHeaderView onRoomEntered]; + [self.activityContainerView onRoomEntered]; + [self.menuContainerView onRoomEntered]; + [self.backContainerView onRoomEntered]; + [self.littleGameView 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.littleGameView 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]; - } + if (type == RoomSettingInputType_Input_Pwd) { + [self enterRoomFail:0]; + } } + + #pragma mark - XPFirstRechargeViewDelegate -(void)rechargeHandle{ - XPWebViewController * webVC =[[XPWebViewController alloc] initWithCustomizeNav:YES]; - webVC.url = [NSString stringWithFormat:URLWithType(kThirdPartyPay),@"6",[YYUtility deviceID]]; - webVC.isPush = YES; - webVC.modalPresentationStyle = UIModalPresentationFullScreen; - [self presentViewController:webVC animated:YES completion:nil]; + + XPWebViewController * vc =[[XPWebViewController alloc] initWithCustomizeNav:YES]; + NSString *url = [NSString stringWithFormat:URLWithType(kThirdPartyPay),@"6",[YYUtility deviceID]]; + vc.url = url; + vc.isPush = YES; + vc.modalPresentationStyle = UIModalPresentationFullScreen; + [self presentViewController:vc animated:YES completion:nil]; + + +} +-(void)contactCustomerService{ + TTAlertConfig *config = [[TTAlertConfig alloc]init]; + config.title = YMLocalizedString(@"XPIAPRechargeViewController7"); + config.message = YMLocalizedString(@"XPIAPRechargeViewController8"); + TTAlertButtonConfig *confirmButtonConfig = [[TTAlertButtonConfig alloc]init]; + confirmButtonConfig.title = YMLocalizedString(@"XPIAPRechargeViewController9"); + UIImage *image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0x13E2F5),UIColorFromRGB(0x9DB4FF),UIColorFromRGB(0xCC67FF)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(200, 200)]; + confirmButtonConfig.backgroundColor = [UIColor colorWithPatternImage:image]; + confirmButtonConfig.cornerRadius = 38/2; + config.confirmButtonConfig = confirmButtonConfig; + [TTPopup alertWithConfig:config confirmHandler:^{ + [self requestContactCustomerService]; + } cancelHandler:^{ + }]; + +} +-(void)requestContactCustomerService{ + [XNDJTDDLoadingTool showLoading]; + [Api requestContactCustomerServiceCompletion:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + [XNDJTDDLoadingTool hideHUD]; + if(code == 200){ + NSString *uid = [NSString stringWithFormat:@"%@",data.data]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + NIMSession * session = [NIMSession session:uid type:NIMSessionTypeP2P]; + SessionViewController * sessionVC = [[SessionViewController alloc] initWithSession:session]; + [self.getCurrentNav pushViewController:sessionVC animated:YES]; + }); + } + }]; } - (XPRoomBackContainerView *)backContainerView { - if (!_backContainerView) { - _backContainerView = [[XPRoomBackContainerView alloc] initWithdelegate:self]; - } - return _backContainerView; + if (!_backContainerView) { + _backContainerView = [[XPRoomBackContainerView alloc] initWithdelegate:self]; + } + return _backContainerView; } - (RoomHeaderView *)roomHeaderView { - if (!_roomHeaderView) { - _roomHeaderView = [[RoomHeaderView alloc] initWithDelegate:self]; - } - return _roomHeaderView; + if (!_roomHeaderView) { + _roomHeaderView = [[RoomHeaderView alloc] initWithDelegate:self]; + } + return _roomHeaderView; } - (XPRoomMessageContainerView *)messageContainerView { - if (!_messageContainerView) { - _messageContainerView = [[XPRoomMessageContainerView alloc] initWithDelegate:self]; - } - return _messageContainerView; + if (!_messageContainerView) { + _messageContainerView = [[XPRoomMessageContainerView alloc] initWithDelegate:self]; + } + return _messageContainerView; } - (XPRoomQuickMessageContainView *)quickMessageContainerView { - if(!_quickMessageContainerView) { - _quickMessageContainerView = [[XPRoomQuickMessageContainView alloc] initWithDelegate:self]; - } - return _quickMessageContainerView; + if(!_quickMessageContainerView) { + _quickMessageContainerView = [[XPRoomQuickMessageContainView alloc] initWithDelegate:self]; + } + return _quickMessageContainerView; } - (XPRoomMenuContainerView *)menuContainerView { - if (!_menuContainerView) { - _menuContainerView = [[XPRoomMenuContainerView alloc] initWithDelegate:self]; - } - return _menuContainerView; + if (!_menuContainerView) { + _menuContainerView = [[XPRoomMenuContainerView alloc] initWithDelegate:self]; + } + return _menuContainerView; } - (XPRoomActivityContainerView *)activityContainerView { - if (!_activityContainerView) { - _activityContainerView = [[XPRoomActivityContainerView alloc] initWithdelegate:self]; - } - return _activityContainerView; + if (!_activityContainerView) { + _activityContainerView = [[XPRoomActivityContainerView alloc] initWithdelegate:self]; + } + return _activityContainerView; } - (XPRoomAnimationView *)animationView { - if (!_animationView) { - _animationView = [[XPRoomAnimationView alloc] initWithDelegate:self]; - } - return _animationView; + if (!_animationView) { + _animationView = [[XPRoomAnimationView alloc] initWithDelegate:self]; + } + return _animationView; } - (XPRoomFunctionContainerView *)functionView { - if (!_functionView) { - _functionView = [[XPRoomFunctionContainerView alloc] initWithdelegate:self]; - } - return _functionView; + if (!_functionView) { + _functionView = [[XPRoomFunctionContainerView alloc] initWithdelegate:self]; + } + return _functionView; } - (StageView *)stageView { - if (!_stageView) { - _stageView = [[SocialStageView alloc] initWithDelegate:self]; - } - return _stageView; + if (!_stageView) { + _stageView = [[SocialStageView alloc] initWithDelegate:self]; + } + return _stageView; +} +- (XPRoomLittleGameContainerView *)littleGameView { + if (!_littleGameView) { + _littleGameView = [[XPRoomLittleGameContainerView alloc] initWithDelegate:self]; + _littleGameView.delegate = self; + } + return _littleGameView; } - - (AnchorRoomScrollView *)anchorScrollView { - if (!_anchorScrollView) { - _anchorScrollView = [[AnchorRoomScrollView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; - _anchorScrollView.anchorScrollDelegate = self; - _anchorScrollView.hostDelegate = self; - if (@available(iOS 11.0, *)) { - _anchorScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - } - return _anchorScrollView; + if (!_anchorScrollView) { + _anchorScrollView = [[AnchorRoomScrollView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + _anchorScrollView.anchorScrollDelegate = self; + _anchorScrollView.hostDelegate = self; + if (@available(iOS 11.0, *)) { + _anchorScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + } + return _anchorScrollView; } - (AnchorRoomSrollTipView *)anchorScrollTipView { - if (!_anchorScrollTipView) { - _anchorScrollTipView = [[AnchorRoomSrollTipView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; - } - return _anchorScrollTipView; + if (!_anchorScrollTipView) { + _anchorScrollTipView = [[AnchorRoomSrollTipView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + } + return _anchorScrollTipView; } - (NSMutableArray *)anchorRoomList { - if (!_anchorRoomList) { - _anchorRoomList = [NSMutableArray array]; - } - return _anchorRoomList; + if (!_anchorRoomList) { + _anchorRoomList = [NSMutableArray array]; + } + return _anchorRoomList; } - (XPFirstRechargeView *)firstRechargeView{ - if (!_firstRechargeView){ - XPFirstRechargeView *firstRechargeView = [[XPFirstRechargeView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; - firstRechargeView.delegate = self; + if (!_firstRechargeView){ + XPFirstRechargeView *firstRechargeView = [[XPFirstRechargeView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + firstRechargeView.delegate = self; - _firstRechargeView = firstRechargeView; - } - return _firstRechargeView; + _firstRechargeView = firstRechargeView; + } + return _firstRechargeView; +} +-(XPFreeGiftsObtainView *)freeView{ + if (!_freeView){ + _freeView = [[XPFreeGiftsObtainView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + } + return _freeView; } - @end