Files
peko-ios/YuMi/Modules/YMRoom/View/XPRoomViewController.m

2959 lines
129 KiB
Mathematica
Raw Normal View History

2023-07-14 18:50:55 +08:00
//
// YMRoomViewController.m
// YUMI
//
// Created by YUMI on 2021/10/11.
//
#import "XPRoomViewController.h"
///Third
#import <Masonry/Masonry.h>
#import <NIMSDK/NIMSDK.h>
///Tool
#import "YUMIMacroUitls.h"
#import "YUMIConstant.h"
#import "AccountInfoStorage.h"
#import "RtcManager.h"
#import "XPRoomMiniManager.h"
#import "TTPopup.h"
#import "Api+ArrangeMic.h"
#import "Api+Room.h"
#import "DESEncrypt.h"
#import "NSArray+Safe.h"
#import "NSMutableDictionary+Saft.h"
2024-10-12 19:30:41 +08:00
#import "XPSkillCardPlayerManager.h"
2023-07-14 18:50:55 +08:00
#import "XCCurrentVCStackManager.h"
2023-09-22 15:26:19 +08:00
#import "CountDownHelper.h"
2023-07-14 18:50:55 +08:00
///Model
#import "RoomInfoModel.h"
#import "UserInfoModel.h"
#import "AttachmentModel.h"
#import "ArrangeMicModel.h"
#import "XPReleaseRadioModel.h"
#import "GuildSuperAdminInfoModel.h"
#import "XPKickUserModel.h"
#import "ContentLevelUpgradeModel.h"
#import "XPReceiveRedPacketModel.h"
#import "XPRedPacketModel.h"
2023-09-22 15:26:19 +08:00
#import "XPFreeGiftModel.h"
2023-10-26 15:20:20 +08:00
#import "XPUserCardInfoModel.h"
2023-07-14 18:50:55 +08:00
///View
#import "BaseNavigationController.h"
#import "XPRoomBackContainerView.h"
#import "XPRoomMenuContainerView.h"
#import "XPRoomQuickMessageContainView.h"
2024-05-11 10:21:48 +08:00
#import "MsRoomMessageMainView.h"
2023-07-14 18:50:55 +08:00
#import "RoomHeaderView.h"
#import "SocialStageView.h"
#import "TenMicStageView.h"
#import "FifteenMicStageView.h"
2024-12-16 19:41:23 +08:00
#import "NineteenMicStageView.h"
#import "TwentyMicStageView.h"
2023-07-14 18:50:55 +08:00
#import "DatingStageView.h"
#import "AnchorStageView.h"
#import "AnchorPkStageView.h"
2025-01-15 19:02:58 +08:00
//#import "XPRoomAnimationView.h"
#import "RoomAnimationView.h"
2023-07-14 18:50:55 +08:00
#import "XPRoomFunctionContainerView.h"
#import "XPArrangeMicViewController.h"
#import "XPRoomSettingInputView.h"
#import "AnchorRoomScrollView.h"
#import "AnchorRoomSrollTipView.h"
#import "XPReceiveRedPacketView.h"
2023-09-12 17:48:18 +08:00
#import "XPWebViewController.h"
2023-09-21 17:44:59 +08:00
#import "SessionViewController.h"
2023-09-22 15:26:19 +08:00
#import "XPFreeGiftsObtainView.h"
2024-05-21 14:17:30 +08:00
2023-07-14 18:50:55 +08:00
///P
#import "XPRoomPresenter.h"
#import "XPRoomProtocol.h"
2024-05-21 14:17:30 +08:00
#import "XPWeakTimer.h"
2023-07-14 18:50:55 +08:00
#import "RoomHostDelegate.h"
#import "RoomGuestDelegate.h"
2024-05-21 14:17:30 +08:00
#import "Api+RoomSetting.h"
2023-07-14 18:50:55 +08:00
#import "XNDJTDDLoadingTool.h"
2023-08-25 16:32:51 +08:00
#import "ClientConfig.h"
2023-08-31 16:51:40 +08:00
#import "LittleGameStageView.h"
#import "LittleGameScrollStageView.h"
#import "XPRoomLittleGameContainerView.h"
2023-10-30 14:38:33 +08:00
#import "PIRoomEnterRedPacketView.h"
2024-05-11 10:21:48 +08:00
#import "XPIAPRechargeViewController.h"
#import "XPCandyTreeInsufficientBalanceView.h"
#import "GiftComboManager.h"
2024-09-14 18:29:36 +08:00
#import "LuckyGiftWinningFlagView.h"
2024-10-10 20:16:23 +08:00
#import "RoomBoomResultView.h"
#import "RoomBoomManager.h"
#import "RoomBoomExplosionView.h"
#import "RoomBoomResultView.h"
2024-10-12 19:30:41 +08:00
#import "XPSendGiftView.h"
2024-12-20 19:05:43 +08:00
#import "RoomSideMenu.h"
#import "RoomResourceManager.h"
2025-02-28 19:04:09 +08:00
#import "LuckyPackageLogicManager.h"
2025-01-22 21:22:58 +08:00
//#import "XPMineHallAnchorIncomeStatisViewController.h"
2023-07-14 18:50:55 +08:00
UIKIT_EXTERN NSString * const kRoomGiftEffectUpdateNotificationKey;
UIKIT_EXTERN NSString * const kRoomMiniNotificationKey;
UIKIT_EXTERN NSString * kNewUserRechargeKey;
2023-09-22 15:26:19 +08:00
UIKIT_EXTERN NSString * const kFreeGiftCountdownNotification;
2023-07-14 18:50:55 +08:00
NSString * const kHadShowAnchorRoomTipKey = @"kHadShowAnchorRoomTipKey";//
NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//退
2024-10-10 20:16:23 +08:00
@interface XPRoomViewController ()<
XPRoomProtocol,
RoomHostDelegate,
NIMChatroomManagerDelegate,
NIMChatManagerDelegate,
NIMConversationManagerDelegate,
NIMLoginManagerDelegate,
XPRoomSettingInputViewDelegate,
AnchorRoomScrollViewDelegate,
NIMBroadcastManagerDelegate,
XPRoomLittleGameContainerViewDelegate,
CountDownHelperDelegate,
PIRoomEnterRedPacketViewDelegate,
XPReceiveRedPacketViewDelegate,
XPCandyTreeInsufficientBalanceViewDelegate>
2025-01-22 21:22:58 +08:00
2023-07-14 18:50:55 +08:00
///
@property (nonatomic,strong) XPRoomBackContainerView *backContainerView;
///view
@property (nonatomic, strong) AnchorRoomScrollView *anchorScrollView;
///
@property (nonatomic,strong) RoomHeaderView *roomHeaderView;
///
@property (nonatomic,strong) StageView *stageView;
@property (nonatomic,strong) TenMicStageView *tenMicStageView;
@property (nonatomic,strong) FifteenMicStageView *fifteenMicStageView;
2024-12-16 19:41:23 +08:00
@property (nonatomic,strong) TwentyMicStageView *twentyMicStageView;
@property(nonatomic, strong) NineteenMicStageView *nineteenMicStageView;
2023-07-14 18:50:55 +08:00
///
2024-05-11 10:21:48 +08:00
@property (nonatomic,strong) MsRoomMessageMainView *messageContainerView;
2023-07-14 18:50:55 +08:00
///
@property (nonatomic, strong) XPRoomQuickMessageContainView *quickMessageContainerView;
///
@property (nonatomic,strong) XPRoomMenuContainerView *menuContainerView;
///
2024-12-20 19:05:43 +08:00
@property(nonatomic, strong) RoomSideMenu *sideMenu;
//@property (nonatomic,strong) XPRoomActivityContainerView *activityContainerView;
2023-07-14 18:50:55 +08:00
///view
2025-01-15 19:02:58 +08:00
@property (nonatomic,strong) RoomAnimationView *animationView;
2023-07-14 18:50:55 +08:00
///view
@property (nonatomic,strong) XPRoomFunctionContainerView *functionView;
2023-08-31 16:51:40 +08:00
///
@property (nonatomic,strong) XPRoomLittleGameContainerView *littleGameView;
2023-10-20 19:30:20 +08:00
2023-07-14 18:50:55 +08:00
///Uid
@property (nonatomic,copy) NSString * roomUid;
///id
@property (nonatomic,copy) NSString *mgId;
///id
@property (nonatomic, copy) NSString *giftId;
///
@property (nonatomic,strong) UserInfoModel *userInfo;
///
@property (nonatomic,strong) RoomInfoModel *roomInfo;
///
@property (nonatomic,assign) BOOL hasAnimationEffect;
///
@property (nonatomic,copy) NSString *fromNick;
@property (nonatomic,assign) UserEnterRoomFromType fromType;
@property (nonatomic,copy) NSString *fromUid;
///
@property (nonatomic,strong) NSArray<GuildSuperAdminInfoModel *> *superMangerList;
///
@property (nonatomic,assign) BOOL isRequestSuperAdmin;
///
@property (nonatomic,assign) BOOL isMiniEnter;
///
@property (nonatomic, strong) AnchorRoomSrollTipView *anchorScrollTipView;
///
@property (nonatomic,strong) NSMutableArray<NSString *> *anchorRoomList;
///
@property (nonatomic,assign) NSInteger anchorIndex;
2023-09-22 15:26:19 +08:00
///
@property (nonatomic,strong) XPFreeGiftModel *freeModel;
///
@property (nonatomic,strong) XPFreeGiftsObtainView *freeView;
2023-10-27 17:21:23 +08:00
///id
@property(nonatomic,copy) NSString *redEnvelopeId;
2023-10-30 14:38:33 +08:00
///
@property(nonatomic,strong) PIRoomEnterRedPacketView *redPacketView;
2023-10-31 11:09:04 +08:00
///
@property(nonatomic,assign) BOOL isShowRedPacket;
2024-05-11 10:21:48 +08:00
@property(nonatomic,copy) NSString *releaseCoins;
@property(nonatomic,copy) NSString *myCoins;
@property(nonatomic,strong) UIButton *exitGameButton;
2023-07-14 18:50:55 +08:00
@end
@implementation XPRoomViewController
+ (BOOL)openRoom:(NSString *)roomUid viewController:(UIViewController *)viewController {
2023-10-30 14:38:33 +08:00
return [self openRoom:roomUid fromNick:nil fromType:0 fromUid:nil viewController:viewController];
2023-07-14 18:50:55 +08:00
}
2023-10-27 17:21:23 +08:00
+ (BOOL)openRoom:(NSString *)roomUid viewController:(UIViewController *)viewController redEnvelopeId:(NSString *)redEnvelopeId{
XPRoomViewController * roomVC = [[self alloc] init];
roomVC.roomUid = roomUid;
roomVC.fromUid = nil;
roomVC.fromType = 0;
roomVC.fromNick = nil;
roomVC.redEnvelopeId = redEnvelopeId;
BaseNavigationController * baseNav = [[BaseNavigationController alloc] initWithRootViewController:roomVC];
baseNav.modalPresentationStyle = UIModalPresentationFullScreen;
[viewController presentViewController:baseNav animated:YES completion:nil];
return YES;
}
2024-10-10 20:16:23 +08:00
+ (BOOL)openRoom:(NSString*)roomUid fromNick:(NSString * __nullable)fromNick fromType:(UserEnterRoomFromType)fromType fromUid:(NSString * __nullable)fromUid viewController:(UIViewController*)viewController {
2023-10-30 14:38:33 +08:00
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;
2023-07-14 18:50:55 +08:00
}
/**
* @params roomUid uid
* @params viewController
*/
+ (BOOL)openMiniRoom:(NSString*)roomUid viewController:(UIViewController*)viewController {
2023-10-30 14:38:33 +08:00
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;
2023-07-14 18:50:55 +08:00
}
2023-10-27 17:21:23 +08:00
/**
* @params roomUid uid
* @params viewController
* @params redEnvelopeId id
*/
+ (BOOL)openMiniRoom:(NSString*)roomUid viewController:(UIViewController*)viewController redEnvelopeId:(NSString *)redEnvelopeId{
XPRoomViewController * roomVC = [[self alloc] init];
roomVC.roomUid = roomUid;
roomVC.isMiniEnter = YES;
roomVC.redEnvelopeId = redEnvelopeId;
BaseNavigationController * baseNav = [[BaseNavigationController alloc] initWithRootViewController:roomVC];
baseNav.modalPresentationStyle = UIModalPresentationFullScreen;
[viewController presentViewController:baseNav animated:YES completion:nil];
return roomVC;
}
2023-07-14 18:50:55 +08:00
/** XPRoomViewController init
* @params roomUid uid
* @params viewController
* @params mgId id
*/
+ (BOOL)openRoom:(NSString*)roomUid mgId:(NSString *)mgId viewController:(UIViewController*)viewController {
2023-10-30 14:38:33 +08:00
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;
2023-07-14 18:50:55 +08:00
}
/// h5
/// @param roomUid Uid
/// @param giftId id
/// @param viewController
+ (BOOL)openRoom:(NSString *)roomUid giftId:(NSString *)giftId viewController:(UIViewController *)viewController {
2023-10-30 14:38:33 +08:00
XPRoomViewController * roomVC = [[self alloc] init];
roomVC.roomUid = roomUid;
roomVC.giftId = giftId;
BaseNavigationController * baseNav = [[BaseNavigationController alloc] initWithRootViewController:roomVC];
baseNav.modalPresentationStyle = UIModalPresentationFullScreen;
[viewController presentViewController:baseNav animated:YES completion:nil];
return YES;
2023-07-14 18:50:55 +08:00
}
- (void)dealloc {
2025-04-02 11:04:07 +08:00
// NSLog(@"房间销毁了");
2024-10-10 20:16:23 +08:00
[[RoomBoomManager sharedManager] leaveRoom];
2024-10-12 19:30:41 +08:00
[XPSkillCardPlayerManager shareInstance].photoIdList = nil;
[XPSkillCardPlayerManager shareInstance].isInRoomVC = NO;
[XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge = NO;
[XPSkillCardPlayerManager shareInstance].isInRoom = NO;
[XPSkillCardPlayerManager shareInstance].roomUid = @"";
2024-10-17 16:05:02 +08:00
2024-10-12 19:30:41 +08:00
if([[XPRoomMiniManager shareManager] getRoomInfo]==nil){
[XPSkillCardPlayerManager shareInstance].isMineInMic = NO;
}
2023-09-22 15:26:19 +08:00
[[CountDownHelper shareHelper] stopCountDown];
[CountDownHelper shareHelper].delegate = nil;
2024-10-17 16:05:02 +08:00
2023-10-30 14:38:33 +08:00
[[NIMSDK sharedSDK].chatroomManager removeDelegate:self];
[[NIMSDK sharedSDK].chatManager removeDelegate:self];
[[NIMSDK sharedSDK].loginManager removeDelegate:self];
[[NIMSDK sharedSDK].conversationManager removeDelegate:self];
2023-08-25 16:32:51 +08:00
[[NIMSDK sharedSDK].broadcastManager removeDelegate:self];
2024-10-10 20:16:23 +08:00
[[RoomBoomManager sharedManager] removeEventListenerForTarget:self];
2024-09-18 17:04:07 +08:00
[[NSNotificationCenter defaultCenter] removeObserver:self];
2023-07-14 18:50:55 +08:00
}
- (XPRoomPresenter *)createPresenter {
2023-10-30 14:38:33 +08:00
return [[XPRoomPresenter alloc] init];
2023-07-14 18:50:55 +08:00
}
- (BOOL)isHiddenNavBar {
2023-10-30 14:38:33 +08:00
return YES;
2023-07-14 18:50:55 +08:00
}
- (void)viewDidLoad {
2023-10-30 14:38:33 +08:00
[super viewDidLoad];
2023-10-30 14:38:33 +08:00
[self exitOldRoom];
2024-10-10 20:16:23 +08:00
[self preLoadGifts];
2023-10-30 14:38:33 +08:00
[self initSubViews];
[self initSubViewConstraints];
[self setupNimSDK];
[self loadRoomDataAndUsers];
[self setupNotifications];
[self handleActivityContainerViewEvents];
2023-10-30 14:38:33 +08:00
///
[self.presenter getRoomSuperAdmin:self.roomUid];
2024-10-12 19:30:41 +08:00
[XPSkillCardPlayerManager shareInstance].isInRoom = YES;
2023-09-22 15:26:19 +08:00
[CountDownHelper shareHelper].delegate = self;
2024-10-10 20:16:23 +08:00
2024-10-12 19:30:41 +08:00
[self setupForBoom];
2024-10-10 20:16:23 +08:00
2024-12-03 17:40:29 +08:00
[self handleGiftComboCallBack];
2024-12-18 17:12:03 +08:00
//#if DEBUG
// UIButton *b = [UIButton buttonWithType:UIButtonTypeInfoLight];
// b.frame = CGRectMake(100, 100, 100, 100);
// [self.view addSubview:b];
// [b addTarget:self action:@selector(test) forControlEvents:UIControlEventTouchUpInside];
2024-12-18 17:12:03 +08:00
//#endif
}
2025-01-22 21:22:58 +08:00
//- (void)test {
// XPMineHallAnchorIncomeStatisViewController *vc = [[XPMineHallAnchorIncomeStatisViewController alloc] init];
// [self.navigationController pushViewController:vc animated:YES];
//}
2024-12-03 17:40:29 +08:00
- (void)handleGiftComboCallBack {
@kWeakify(self);
[[GiftComboManager sharedManager] setHandleRoomUIChanged:^(BOOL comboViewDisplay) {
@kStrongify(self);
2024-12-06 14:38:45 +08:00
dispatch_async(dispatch_get_main_queue(), ^{
2024-12-20 19:05:43 +08:00
self.sideMenu.hidden = comboViewDisplay;
2024-12-06 14:38:45 +08:00
self.menuContainerView.hidden = comboViewDisplay;
// UI
if (comboViewDisplay && ![[GiftComboManager sharedManager] isGiftCombing]) {
NSLog(@"⚠️ 检测到UI隐藏请求但连击未进行执行强制重置");
[self forceBoomStateReset];
}
2024-12-06 14:38:45 +08:00
});
2024-12-03 17:40:29 +08:00
}];
}
2024-10-12 19:30:41 +08:00
- (void)setupForBoom {
2024-10-10 20:16:23 +08:00
@kWeakify(self);
[[RoomBoomManager sharedManager] registerBoomExplosion:^(id _Nonnull sth) {
@kStrongify(self);
2025-03-25 15:22:01 +08:00
[self.presenter getBoomDetail:self.roomUid];
if (![sth isKindOfClass:[NSArray class]]) {
return;
}
2024-10-10 20:16:23 +08:00
dispatch_async(dispatch_get_main_queue(), ^{
2025-03-25 15:22:01 +08:00
[RoomBoomExplosionView display:self.view with:sth complete:^{ }];
2024-10-10 20:16:23 +08:00
});
} target:self];
[[RoomBoomManager sharedManager] registerBoomGiftDisplay:^(id _Nonnull sth) {
@kStrongify(self);
dispatch_async(dispatch_get_main_queue(), ^{
2024-10-11 12:31:37 +08:00
[RoomBoomResultView display:self.view attachment:sth];
2024-10-10 20:16:23 +08:00
});
} target:self];
[[RoomBoomManager sharedManager] registerBoomEnterRoomExplosion:^(id _Nonnull sth) {
@kStrongify(self);
2025-03-25 15:22:01 +08:00
if (![sth isKindOfClass:[NSArray class]]) {
return;
}
2024-10-10 20:16:23 +08:00
dispatch_async(dispatch_get_main_queue(), ^{
[RoomBoomExplosionView display:self.view with:sth complete:^{
}];
});
} target:self];
}
- (void)requestBoomData {
[self.presenter getBoomRocketAnimationInfo:self.roomUid];
[self.presenter getBoomDetail:self.roomUid];
}
- (void)loadRoomDataAndUsers {
[XNDJTDDLoadingTool showAnchorLoading:self.navigationController.view];
[self.presenter initEnterRoom:self.roomUid user:[AccountInfoStorage instance].getUid];
}
- (void)setupNotifications {
2023-10-30 14:38:33 +08:00
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myGiftEffectUpdate:) name:kRoomGiftEffectUpdateNotificationKey object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(openRedPacketNotification:) name:@"kOpenRedPacketNotification" object:nil];
//
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification
object:nil];
@kWeakify(self);
[[NSNotificationCenter defaultCenter] addObserverForName:@"kExchangeRoomAnimationViewAndGameViewIndex"
object:nil
queue:NSOperationQueue.mainQueue
usingBlock:^(NSNotification * _Nonnull notification) {
@kStrongify(self);
if (self.view.subviews.count > 0) {
UIView *topView = self.view.subviews.lastObject;
UIView *secondView = [self.view.subviews xpSafeObjectAtIndex:self.view.subviews.count-2];
if (secondView && secondView.tag == 913) {
NSInteger index1 = [self.view.subviews indexOfObject:topView];
NSInteger index2 = [self.view.subviews indexOfObject:secondView];
[self.view exchangeSubviewAtIndex:index1 withSubviewAtIndex:index2];
}
}
}];
}
- (void)setupNimSDK {
//
[[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];
}
/// -2: roomUid
- (void)preLoadGifts {
[self.presenter getNormalGiftList:self.roomUid];
///
[self.presenter getFreeGiftData];
2025-03-06 15:26:44 +08:00
if(![NSString isEmpty:self.redEnvelopeId]){
[self.presenter getRedPacketInft:self.redEnvelopeId];
}
2024-05-11 10:21:48 +08:00
}
#pragma mark - MSSessionReleaseHeadlinesViewDelegate
2024-05-11 10:21:48 +08:00
-(void)releaseHeadlinesWithText:(NSString *)text{
XPCandyTreeInsufficientBalanceView *balanceView = [[XPCandyTreeInsufficientBalanceView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
balanceView.delegate = self;
[self.view addSubview:balanceView];
}
#pragma mark - XPCandyTreeInsufficientBalanceViewDelegate
2024-05-11 10:21:48 +08:00
- (void)payBalanceAction{
XPIAPRechargeViewController * webVC =[[XPIAPRechargeViewController alloc] init];
webVC.type = @"4";
[self.navigationController pushViewController:webVC animated:YES];
2023-10-26 15:20:20 +08:00
}
///
-(void)openRedPacketNotification:(NSNotification *)not{
NSDictionary *redPacketDic = not.userInfo;
NSInteger type = [redPacketDic[@"type"] integerValue];
NSInteger userId = [redPacketDic[@"uid"] integerValue];
2023-10-30 14:38:33 +08:00
// NSString *roomUid = redPacketDic[@"roomUId"];
2023-10-26 15:20:20 +08:00
if(type == 2){
[self.messageContainerView showUserCard:userId];
}else if (type == 3){
// [self.roomHeaderView showSharePanel];
2023-10-26 15:20:20 +08:00
}else if (type == 4){
NSString *scrolling = redPacketDic[@"scrolling"];
[self.menuContainerView showInputView:scrolling];
}
2023-07-14 18:50:55 +08:00
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
2023-10-30 14:38:33 +08:00
[self.menuContainerView menuResignFirstResponder];
2023-07-14 18:50:55 +08:00
}
- (void)viewWillAppear:(BOOL)animated {
2023-10-30 14:38:33 +08:00
[super viewWillAppear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
2024-10-15 20:56:25 +08:00
[self.menuContainerView recheckMicState];
2023-07-14 18:50:55 +08:00
}
2023-09-22 15:26:19 +08:00
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self.freeView.hidden = YES;
//
if ([[GiftComboManager sharedManager] isGiftCombing]) {
NSLog(@"📱 房间即将退出,检查连击状态");
[self forceBoomStateReset];
}
2023-09-22 15:26:19 +08:00
}
2023-09-27 20:17:09 +08:00
2023-07-21 18:53:10 +08:00
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
2023-09-27 20:17:09 +08:00
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
2024-10-12 19:30:41 +08:00
[XPSkillCardPlayerManager shareInstance].isInRoomVC = NO;
2023-07-21 18:53:10 +08:00
}
2023-07-14 18:50:55 +08:00
- (void)viewDidAppear:(BOOL)animated {
2023-10-30 14:38:33 +08:00
[super viewDidAppear:animated];
2023-09-22 15:26:19 +08:00
self.freeView.hidden = NO;
2023-09-27 20:17:09 +08:00
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
2024-10-12 19:30:41 +08:00
[XPSkillCardPlayerManager shareInstance].isInRoomVC = YES;
2023-07-14 18:50:55 +08:00
}
#pragma mark -
// UI
- (void)forceBoomStateReset {
NSLog(@"🔧 XPRoomViewController 强制重置连击状态");
// 1.
[[GiftComboManager sharedManager] forceBoomStateReset];
// 2. UI
dispatch_async(dispatch_get_main_queue(), ^{
self.sideMenu.hidden = NO;
self.menuContainerView.hidden = NO;
NSLog(@"🔄 强制恢复底部操作栏和侧栏显示");
});
}
//
- (void)applicationDidEnterBackground:(NSNotification *)notification {
if ([[GiftComboManager sharedManager] isGiftCombing]) {
NSLog(@"📱 应用进入后台,检查连击状态");
[self forceBoomStateReset];
}
}
//
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
if ([[GiftComboManager sharedManager] isGiftCombing]) {
NSLog(@"⚠️ 收到内存警告,检查连击状态");
[self forceBoomStateReset];
}
}
2023-07-14 18:50:55 +08:00
#pragma mark - Private Method
- (void)initSubViews {
self.view.backgroundColor = [UIColor darkGrayColor];
2023-10-30 14:38:33 +08:00
[self.view addSubview:self.backContainerView];
2023-08-31 16:51:40 +08:00
[self.view addSubview:self.littleGameView];
2023-10-30 14:38:33 +08:00
[self.view addSubview:self.stageView];
[self.view addSubview:self.messageContainerView];
2024-05-16 14:30:21 +08:00
2023-10-30 14:38:33 +08:00
[self.view addSubview:self.quickMessageContainerView];
[self.view addSubview:self.menuContainerView];
2024-12-20 19:05:43 +08:00
[self.view addSubview:self.sideMenu];
2023-10-30 14:38:33 +08:00
[self.view addSubview:self.redPacketView];
[self.view addSubview:self.roomHeaderView];
[self.view addSubview:self.functionView];
[self.view addSubview:self.animationView];
2023-07-14 18:50:55 +08:00
}
2024-12-16 19:41:23 +08:00
- (void)__layoutTwentyMicStage {
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
}
- (void)__layoutNineteenMicStage {
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
}
- (void)__layoutFifteenMicStage {
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
}
- (void)__layoutTenMicStage {
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
}
2023-07-14 18:50:55 +08:00
- (void)initSubViewConstraints {
2023-10-30 14:38:33 +08:00
[self.backContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
2023-08-31 16:51:40 +08:00
[self.littleGameView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
2023-10-30 14:38:33 +08:00
[self.roomHeaderView mas_makeConstraints:^(MASConstraintMaker *make) {
2024-04-11 17:05:27 +08:00
make.leading.trailing.top.mas_equalTo(self.view);
2023-10-30 14:38:33 +08:00
make.height.mas_equalTo(kNavigationHeight);
}];
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
2024-04-11 17:05:27 +08:00
make.leading.trailing.mas_equalTo(self.view);
2023-10-30 14:38:33 +08:00
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);
2024-04-11 17:05:27 +08:00
make.leading.equalTo(self.view);
2024-12-20 19:05:43 +08:00
make.trailing.equalTo(self.sideMenu.mas_leading).offset(-10);
2023-10-30 14:38:33 +08:00
}];
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) {
2024-10-12 19:30:41 +08:00
make.bottom.mas_equalTo(self.view).offset(- 52 - kSafeAreaBottomHeight);
2024-06-04 14:54:51 +08:00
make.height.mas_equalTo(0);
2024-04-11 17:05:27 +08:00
make.leading.trailing.mas_equalTo(self.view);
2023-10-30 14:38:33 +08:00
}];
[self.menuContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
2024-10-15 20:56:25 +08:00
make.leading.trailing.mas_equalTo(self.view);
if (iPhoneXSeries) {
make.bottom.mas_equalTo(self.view);
} else {
make.bottom.mas_equalTo(-10);
}
2023-09-28 18:29:41 +08:00
make.height.mas_equalTo(52 + kSafeAreaBottomHeight);
2023-10-30 14:38:33 +08:00
}];
2024-12-20 19:05:43 +08:00
[self.sideMenu mas_makeConstraints:^(MASConstraintMaker *make) {
2023-10-30 14:38:33 +08:00
make.top.mas_equalTo(self.messageContainerView);
2024-04-11 17:05:27 +08:00
make.trailing.mas_equalTo(self.view);
2023-10-30 14:38:33 +08:00
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
2024-02-21 10:18:59 +08:00
make.width.mas_equalTo(87);
2023-10-30 14:38:33 +08:00
}];
[self.redPacketView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(kGetScaleWidth(58));
make.trailing.mas_equalTo(-kGetScaleWidth(6));
make.bottom.mas_equalTo(-160);
}];
[self.animationView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
[self.functionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
2023-07-14 18:50:55 +08:00
}
- (void)updateViewConstraintsOnAnchorRoom {
2023-10-30 14:38:33 +08:00
[self.anchorScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
[self.backContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.anchorScrollView.middleImageView);
}];
[self.roomHeaderView mas_makeConstraints:^(MASConstraintMaker *make) {
2024-04-11 17:05:27 +08:00
make.leading.trailing.top.mas_equalTo(self.anchorScrollView.middleImageView);
2023-10-30 14:38:33 +08:00
make.height.mas_equalTo(kNavigationHeight);
}];
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
2024-04-11 17:05:27 +08:00
make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
2023-10-30 14:38:33 +08:00
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);
2024-04-11 17:05:27 +08:00
make.leading.equalTo(self.anchorScrollView.middleImageView);
2024-12-20 19:05:43 +08:00
make.trailing.equalTo(self.sideMenu.mas_leading).offset(-10);
2023-10-30 14:38:33 +08:00
}];
[self.quickMessageContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
2024-06-04 14:54:51 +08:00
make.height.mas_equalTo(0);
2023-10-30 14:38:33 +08:00
make.bottom.mas_equalTo(self.backContainerView).mas_offset(-5-40-8-kSafeAreaBottomHeight);
2024-04-11 17:05:27 +08:00
make.leading.equalTo(self.anchorScrollView.middleImageView);
2024-12-20 19:05:43 +08:00
make.trailing.equalTo(self.sideMenu.mas_leading).offset(-10);
2023-10-30 14:38:33 +08:00
}];
[self.menuContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
if (iPhoneXSeries) {
make.bottom.mas_equalTo(self.view);
} else {
make.bottom.mas_equalTo(self.view).offset(-10);
}
2023-09-28 18:29:41 +08:00
make.height.mas_equalTo(52 + kSafeAreaBottomHeight);
2023-10-30 14:38:33 +08:00
}];
2024-12-20 19:05:43 +08:00
[self.sideMenu mas_makeConstraints:^(MASConstraintMaker *make) {
2023-10-30 14:38:33 +08:00
make.top.mas_equalTo(self.messageContainerView);
2024-04-11 17:05:27 +08:00
make.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
2023-10-30 14:38:33 +08:00
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5);
2024-02-21 10:18:59 +08:00
make.width.mas_equalTo(87);
2023-10-30 14:38:33 +08:00
}];
2023-10-20 19:30:20 +08:00
2023-10-30 14:38:33 +08:00
[self.functionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.anchorScrollView.middleImageView);
}];
2023-07-14 18:50:55 +08:00
}
- (void)handleActivityContainerViewEvents {
@kWeakify(self);
2024-12-20 19:05:43 +08:00
self.sideMenu.openRedPacketHandle = ^(XPRedPacketModel * _Nullable redModel,RoomType type,BOOL isChangeRoom) {
@kStrongify(self);
if(isChangeRoom == YES){
self.redPacketView.type = type;
2024-12-20 19:05:43 +08:00
self.redPacketView.redPacketList = self.sideMenu.redPacketList;
return;
}
XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
view.delegate = self;
self.isShowRedPacket = YES;
view.receiveModel = redModel;
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];
};
2024-10-12 19:30:41 +08:00
2024-12-20 19:05:43 +08:00
self.sideMenu.showSendGiftView = ^{
2024-10-12 19:30:41 +08:00
@kStrongify(self);
NSString * roomUid = [NSString stringWithFormat:@"%ld", [self getRoomInfo].uid];
XPSendGiftView * giftView = [[XPSendGiftView alloc] initWithType:SendGiftType_Room uid:roomUid];
giftView.delegate = self;
NSArray * giftUses = [self configGiftUsers:[self getMicroQueue]];
[giftView configGiftUsers:giftUses];
[self.getCurrentNav presentViewController:giftView animated:YES completion:nil];
};
}
- (NSArray<XPGiftUserInfoModel *> *)configGiftUsers:(NSMutableDictionary<NSString *,MicroQueueModel *> *)queue {
NSMutableArray * array = [NSMutableArray array];
for (MicroQueueModel * microModel in queue.allValues) {
if (microModel.userInfo && microModel.userInfo.uid >0) {
UserInfoModel * userInfo = microModel.userInfo;
XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init];
userModel.avatar = userInfo.avatar;
userModel.vipMic = userInfo.vipMic;
userModel.position = [NSString stringWithFormat:@"%d", microModel.microState.position];
userModel.uid = userInfo.uid;
if (self.getRoomInfo.type == RoomType_Anchor && microModel.microState.position == -1) {///
continue;
}
[array addObject:userModel];
}
}
if (self.getRoomInfo.leaveMode) {
RoomInfoModel * roomInfo= self.getRoomInfo;
XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init];
userModel.avatar = roomInfo.avatar;
userModel.position = @"-1";
userModel.uid = roomInfo.uid;
[array addObject:userModel];
} else if (self.getRoomInfo.type == RoomType_Anchor) {
RoomInfoModel * roomInfo= self.getRoomInfo;
BOOL hadContainerOwner = NO;
for (UserInfoModel *userModel in array) {
if (userModel.uid == roomInfo.uid) {
hadContainerOwner = YES;
break;
}
}
if (!hadContainerOwner) {
XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init];
userModel.avatar = roomInfo.avatar;
userModel.position = @"-1";
userModel.uid = roomInfo.uid;
[array addObject:userModel];
}
}
return array;
}
2023-07-14 18:50:55 +08:00
- (void)exitOldRoom {
2023-10-30 14:38:33 +08:00
NSString * roomUid = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.uid];
2024-10-17 16:05:02 +08:00
if (roomUid.integerValue > 0) {
if ([roomUid isEqualToString:self.roomUid]) {
self.isMiniEnter = YES;
} else {
// 退
NSString * roomId = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.roomId];
[self.presenter exitNIMRoom:roomId];
[[RtcManager instance] exitRoom];
[[XPRoomMiniManager shareManager] resetLocalMessage];
[self.presenter reportUserOutRoom:roomUid];
[XPSkillCardPlayerManager shareInstance].micState = MICState_None;
}
2023-10-30 14:38:33 +08:00
}
2023-07-14 18:50:55 +08:00
}
2024-04-01 10:32:18 +08:00
-(BOOL)getIsMiniEnter{
return self.isMiniEnter;
}
2023-07-14 18:50:55 +08:00
- (void)userEnterRoomSuccess {
2023-10-30 14:38:33 +08:00
AttachmentModel *attachment = [[AttachmentModel alloc]init];
attachment.first = CustomMessageType_Car_Notify;
attachment.second = Custom_Message_Sub_Car_EnterRoom;
NSMutableDictionary *att = [NSMutableDictionary dictionary];
2024-04-11 15:47:44 +08:00
if (self.userInfo.userVipInfoVO.enterHide) {///VIP,
2023-10-30 14:38:33 +08:00
return;
}
2025-01-22 21:22:58 +08:00
if (self.userInfo.platformRole == 1) {
return;
}
2023-10-30 14:38:33 +08:00
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];
2023-07-14 18:50:55 +08:00
}
- (BOOL)updateStageView {
Class stageViewClass = [self stageViewClassForRoomInfo:self.roomInfo];
if (stageViewClass) { //&& ![self.stageView isKindOfClass:stageViewClass]) {
2023-10-30 14:38:33 +08:00
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[stageViewClass alloc] initWithDelegate:self];
self.stageView.alpha = 0;
return YES;
}
return NO;
}
- (Class)stageViewClassForRoomInfo:(RoomInfoModel *)roomInfo {
if (roomInfo.roomModeType == RoomModeType_Open_Blind) {
return [DatingStageView class];
}
if (roomInfo.datingState == RoomDatingStateChangeType_Close &&
![self.stageView isKindOfClass:[SocialStageView class]]) {
return [SocialStageView class];
}
if (roomInfo.type == RoomType_Anchor) {
if (roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode &&
![self.stageView isKindOfClass:[AnchorPKStageView class]]) {
return [AnchorPKStageView class];
} else if (roomInfo.roomModeType == RoomModeType_Normal_Mode &&
![self.stageView isKindOfClass:[AnchorStageView class]]) {
return [AnchorStageView class];
2023-10-30 14:38:33 +08:00
}
} else if (roomInfo.type == RoomType_MiniGame) {
return [LittleGameScrollStageView class];
} else if (roomInfo.type == RoomType_19Mic) {
return [NineteenMicStageView class];
} else if (roomInfo.type == RoomType_20Mic) {
return [TwentyMicStageView class];
} else if (roomInfo.type == RoomType_15Mic) {
return [FifteenMicStageView class];
} else if (roomInfo.type == RoomType_10Mic) {
return [TenMicStageView class];
} else if (roomInfo.hadChangeRoomType && ![self.stageView isKindOfClass:[SocialStageView class]]) {
return [SocialStageView class];
}
return [SocialStageView class];
}
- (void)changeStageViewOnRoomUpdate {
if (![self updateStageView]) {
2023-10-30 14:38:33 +08:00
return;
}
2023-10-30 14:38:33 +08:00
if (!self.stageView.superview) {
[self.view insertSubview:self.stageView
belowSubview:self.roomHeaderView];
//
NSInteger index_sideMenu = -1;
NSInteger index_stageView = -1;
for (UIView *view in self.view.subviews) {
if (index_sideMenu == -1 || index_stageView == -1) {
if (view == self.sideMenu) {
index_sideMenu = [self.view.subviews indexOfObject:view];
}
if (view == self.stageView) {
index_stageView = [self.view.subviews indexOfObject:view];
}
} else {
[self.view exchangeSubviewAtIndex:index_sideMenu withSubviewAtIndex:index_stageView];
break;
}
}
}
self.stageView.alpha = 1;
[self addExitGameButton];
self.quickMessageContainerView.hidden = YES;
[self.quickMessageContainerView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(0);
}];
switch (self.roomInfo.type) {
case RoomType_MiniGame: {
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomHeaderView.mas_bottom).offset(26 + 4);
make.height.mas_equalTo(self.stageView.hightForStageView);
}];
CGFloat height = 80;
if (iPhoneXSeries) {
height = 100;
}
[self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(height);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
make.leading.mas_equalTo(self.view);
2024-12-20 19:05:43 +08:00
make.trailing.mas_equalTo(self.sideMenu.mas_leading).offset(-10);
}];
[self.sideMenu displayForMiniGame];
2024-12-20 19:05:43 +08:00
[self.sideMenu mas_remakeConstraints:^(MASConstraintMaker *make) {
make.trailing.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
make.width.mas_equalTo(87);
}];
2023-09-27 16:06:18 +08:00
}
break;
default: {
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.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.leading.mas_equalTo(self.view);
2024-12-20 19:05:43 +08:00
make.trailing.mas_equalTo(self.sideMenu.mas_leading).offset(-10);
}];
if (self.roomInfo.type == RoomType_19Mic || self.roomInfo.type == RoomType_20Mic) {
[self.sideMenu mas_remakeConstraints:^(MASConstraintMaker *make) {
make.trailing.mas_equalTo(self.view);
make.height.mas_equalTo(160);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
make.width.mas_equalTo(87);
}];
} else {
[self.sideMenu mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.messageContainerView);
make.trailing.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5);
make.width.mas_equalTo(87);
}];
2025-01-09 14:22:59 +08:00
}
}
break;
2023-10-30 14:38:33 +08:00
}
2023-07-14 18:50:55 +08:00
}
- (void)changeStageViewOnAnchorRoom {
2023-10-30 14:38:33 +08:00
if (self.roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode && ![self.stageView isKindOfClass:[AnchorPKStageView class]]) {
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[AnchorPKStageView alloc] initWithDelegate:self];
} else if(self.roomInfo.roomModeType == RoomModeType_Normal_Mode && ![self.stageView isKindOfClass:[AnchorStageView class]]) {
[self.stageView removeFromSuperview];
self.stageView = nil;
self.stageView = [[AnchorStageView alloc] initWithDelegate:self];
}
if (!self.stageView.superview) {
[self.anchorScrollView insertSubview:self.stageView belowSubview:self.roomHeaderView];
}
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
2024-04-11 17:05:27 +08:00
make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
2023-10-30 14:38:33 +08:00
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);
2024-04-11 17:05:27 +08:00
make.leading.mas_equalTo(self.anchorScrollView.middleImageView);
2024-12-20 19:05:43 +08:00
make.trailing.mas_equalTo(self.sideMenu.mas_leading).offset(-10);
2023-10-30 14:38:33 +08:00
}];
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) {
2024-06-04 14:54:51 +08:00
make.height.mas_equalTo(0);
2023-10-30 14:38:33 +08:00
make.bottom.mas_equalTo(self.backContainerView).mas_offset(-5-40-8-kSafeAreaBottomHeight);
2024-04-11 17:05:27 +08:00
make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
2023-10-30 14:38:33 +08:00
}];
2024-12-20 19:05:43 +08:00
[self.sideMenu mas_remakeConstraints:^(MASConstraintMaker *make) {
2023-10-30 14:38:33 +08:00
make.top.mas_equalTo(self.messageContainerView);
2024-04-11 17:05:27 +08:00
make.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
2023-10-30 14:38:33 +08:00
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5);
2024-02-21 10:18:59 +08:00
make.width.mas_equalTo(87);
2023-10-30 14:38:33 +08:00
}];
}
- (void)setRoomInfo:(RoomInfoModel *)roomInfo {
if (_roomInfo == roomInfo) {
return;
}
_roomInfo = roomInfo;
2025-02-28 19:04:09 +08:00
[[LuckyPackageLogicManager sharedInstance] setRoomUid:@(roomInfo.uid).stringValue];
[[RoomResourceManager sharedManager] updateCurrentSkinID:roomInfo.usedMicSkinId
effectID:roomInfo.usedMicEffectId];
2024-12-20 19:05:43 +08:00
[self.sideMenu updateView];
}
#pragma mark - Game Switch
- (void)addExitGameButton {
[self removeExitGameButton];
2023-10-20 19:30:20 +08:00
if (self.roomInfo.type != RoomType_MiniGame) {
return;
}
if (_exitGameButton == nil) {
_exitGameButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_exitGameButton setTitle:@"切换" forState:UIControlStateNormal];
[_exitGameButton setImage:[UIImage imageNamed:@"ms_room_game_switch_button"] forState:UIControlStateNormal];
[_exitGameButton addTarget:self action:@selector(didTapExitGameButton) forControlEvents:UIControlEventTouchUpInside];
}
[self.view addSubview:self.exitGameButton];
[self.exitGameButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.stageView.mas_bottom).offset(10);
make.leading.mas_equalTo(self.view).offset(12);
make.width.height.equalTo(@21);
}];
2023-07-14 18:50:55 +08:00
}
- (void)removeExitGameButton {
[self.exitGameButton removeFromSuperview];
}
- (void)didTapExitGameButton {
if ([self.littleGameView isInSudGame]) {
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomFunctionContainerView19")];
} else {
@kWeakify(self);
[TTPopup alertWithMessage:YMLocalizedString(@"XPRoomFunctionContainerView20") confirmHandler:^{
@kStrongify(self);
[XNDJTDDLoadingTool showLoading];
[self exitLittleGame];
} cancelHandler:^{ }];
}
}
- (void)exitLittleGame {
RoomInfoModel * roomInfo = self.getRoomInfo;
NSMutableDictionary * params = [NSMutableDictionary dictionary];
NSString * ticket = [AccountInfoStorage instance].getTicket;
[params setObject:ticket forKey:@"ticket"];
2024-06-06 17:10:28 +08:00
[params setObject:@(roomInfo.uid).stringValue forKey:@"uid"];
[params setObject:[NSString stringWithFormat:@"%ld", roomInfo.uid] forKey:@"roomUid"];
if (roomInfo.title.length > 0) {
[params setObject:roomInfo.title forKey:@"title"];
}
if (roomInfo.roomPwd.length > 0) {
[params setObject:roomInfo.roomPwd forKey:@"roomPwd"];
} else{
[params setObject:@"" forKey:@"roomPwd"];
}
if (roomInfo.tagId > 0) {
[params setObject:[NSString stringWithFormat:@"%ld", roomInfo.tagId] forKey:@"tagId"];
}
if (self.roomInfo.oldType == 0) {
self.roomInfo.oldType = RoomType_Game;
}
[params setObject:@(self.roomInfo.oldType) forKey:@"type"];
[params setObject:@"0" forKey:@"mgId"];
[params setObject:@(roomInfo.hasAnimationEffect) forKey:@"hasAnimationEffect"];
[Api ownerUpdateRoomInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
[XNDJTDDLoadingTool hideHUD];
} else {
[XNDJTDDLoadingTool showErrorWithMessage:msg];
}
} params:params];
[self.littleGameView handleSelfInExitEvent];
[self.littleGameView destroyMG];
}
2023-10-31 11:09:04 +08:00
#pragma mark- XPReceiveRedPacketViewDelegate
- (void)closeViewAction{
self.isShowRedPacket = NO;
}
2023-10-30 14:38:33 +08:00
#pragma mark- PIRoomEnterRedPacketViewDelegate
- (void)openRedPacketWithModel:(XPRedPacketModel *)redModel{
2023-10-30 14:38:33 +08:00
XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
view.receiveModel = redModel;
2023-10-31 11:09:04 +08:00
view.delegate = self;
self.isShowRedPacket = YES;
2023-10-30 14:38:33 +08:00
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];
}
2023-09-22 15:26:19 +08:00
#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){
2023-10-30 14:38:33 +08:00
[kWindow addSubview:self.freeView];
2023-09-22 15:26:19 +08:00
}
}
}
2023-09-22 15:26:19 +08:00
- (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)}];
2023-07-14 18:50:55 +08:00
}
2023-07-14 18:50:55 +08:00
- (void)cancelRoomArrangeMic {
2023-10-30 14:38:33 +08:00
///退
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"];
}
2023-07-14 18:50:55 +08:00
}
///
- (void)superAdminEnterPwdRoom:(RoomInfoModel *)roomInfo {
2023-10-30 14:38:33 +08:00
__block BOOL isSuperAdmin = NO;
[self.superMangerList enumerateObjectsUsingBlock:^(GuildSuperAdminInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj.uid isEqualToString:[AccountInfoStorage instance].getUid]) {
isSuperAdmin = YES;
*stop = YES;
}
}];
2025-01-22 21:22:58 +08:00
if (!isSuperAdmin) {
isSuperAdmin = self.userInfo.platformRole == 1;
}
2023-10-30 14:38:33 +08:00
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];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomEntered];
2024-10-17 16:05:02 +08:00
2023-10-30 14:38:33 +08:00
[self.backContainerView onRoomEntered];
2023-08-31 16:51:40 +08:00
[self.littleGameView onRoomEntered];
2023-10-30 14:38:33 +08:00
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];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomEntered];
2023-10-30 14:38:33 +08:00
} else {
//退
[self.stageView onRoomMiniEntered];
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
[self.functionView onRoomEntered];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomMiniEntered];
2023-10-30 14:38:33 +08:00
}
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
}
2023-07-14 18:50:55 +08:00
}
///
- (void)handleSuperManagerEnterAnchorRoom:(RoomInfoModel *)roomInfo {
2023-10-30 14:38:33 +08:00
__block BOOL isSuperAdmin = NO;
[self.superMangerList enumerateObjectsUsingBlock:^(GuildSuperAdminInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj.uid isEqualToString:[AccountInfoStorage instance].getUid]) {
isSuperAdmin = YES;
*stop = YES;
}
}];
2025-01-22 21:22:58 +08:00
if (!isSuperAdmin) {
isSuperAdmin = self.userInfo.platformRole == 1;
}
2023-10-30 14:38:33 +08:00
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];
2024-12-20 19:05:43 +08:00
[self.sideMenu removeFromSuperview];
2023-10-30 14:38:33 +08:00
[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];
2024-12-20 19:05:43 +08:00
[self.anchorScrollView addSubview:self.sideMenu];
2023-10-30 14:38:33 +08:00
[self.anchorScrollView addSubview:self.roomHeaderView];
if (!self.menuContainerView.superview) {
[self.view addSubview:self.menuContainerView];
}
[self.anchorScrollView addSubview:self.functionView];
2023-10-30 14:38:33 +08:00
[self.view bringSubviewToFront:self.animationView];
[self updateViewConstraintsOnAnchorRoom];
[self changeStageViewOnAnchorRoom];
[self.roomHeaderView onRoomEntered];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomEntered];
2023-10-30 14:38:33 +08:00
2024-10-17 16:05:02 +08:00
2023-10-30 14:38:33 +08:00
[self.backContainerView onRoomEntered];
2023-08-31 16:51:40 +08:00
[self.littleGameView onRoomEntered];
2023-10-30 14:38:33 +08:00
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];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomEntered];
2023-10-30 14:38:33 +08:00
} else {
//退
[self.stageView onRoomMiniEntered];
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
[self.functionView onRoomEntered];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomMiniEntered];
2023-10-30 14:38:33 +08:00
}
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
}
2023-07-14 18:50:55 +08:00
}
///
- (void)showAnchorScrollTipView {
2023-10-30 14:38:33 +08:00
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *anchoScrollTip = [defaults objectForKey:kHadShowAnchorRoomTipKey];
if (!anchoScrollTip) {
UIWindow *window = [UIApplication sharedApplication].delegate.window;
[window addSubview:self.anchorScrollTipView];
[window bringSubviewToFront:self.anchorScrollTipView];
}
2023-07-14 18:50:55 +08:00
}
2023-09-22 17:43:21 +08:00
-(void)requesstShieldingAction{
[self.presenter requestShieldingWithType:@"1" objId:[NSString stringWithFormat:@"%ld",self.roomInfo.uid]];
2023-09-22 17:43:21 +08:00
}
-(void)requestShieldingSuccess{
2023-10-17 18:30:14 +08:00
[self showErrorToast:YMLocalizedString(@"RoomHeaderView11")];
[self exitRoom];
}
2023-07-14 18:50:55 +08:00
#pragma mark -
- (void)myGiftEffectUpdate:(NSNotification *)notification {
2023-10-30 14:38:33 +08:00
NSDictionary * dic = notification.object;
self.roomInfo.hasAnimationEffect = ((NSNumber *)dic[@"hasAnimationEffect"]).boolValue;
self.hasAnimationEffect = self.roomInfo.hasAnimationEffect;
[self.roomHeaderView onRoomUpdate];
2023-07-14 18:50:55 +08:00
}
#pragma mark - XPRoomProtocol
2023-10-17 18:30:14 +08:00
///id
-(void)getUnlockRoomAlbumPhotoListSuccessWithList:(NSArray *)list{}
2023-11-28 16:50:45 +08:00
///
-(void)getKickUserListSuccessWithList:(NSArray *)list{
NSString *uid = [[AccountInfoStorage instance]getUid];
for (id obj in list) {
if([obj integerValue] == [uid integerValue]){
2023-11-30 16:41:28 +08:00
[self exitRoom];
2023-11-28 16:50:45 +08:00
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomViewController0")];
break;
}
}
}
- (void)handleRoomWithPasswordAfterInitRoom {
if (!self.isRequestSuperAdmin) {
@kWeakify(self);
[Api getRoomSuperAdminList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
@kStrongify(self);
NSArray<GuildSuperAdminInfoModel *> * array = [GuildSuperAdminInfoModel modelsWithArray:data.data];
self.superMangerList = array;
[self superAdminEnterPwdRoom:self.roomInfo];
} roomUid:self.roomUid];
} else {
[self superAdminEnterPwdRoom:self.roomInfo];
}
}
- (void)handleRoomWithoutPasswordAfterInitRoom {
self.roomInfo.datingState = (self.roomInfo.roomModeType == RoomModeType_Open_Blind) ?
RoomDatingStateChangeType_Open :
RoomDatingStateChangeType_Normal;
[self changeStageViewOnRoomUpdate];
[self.roomHeaderView onRoomEntered];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomEntered];
[self.backContainerView onRoomEntered];
[self.littleGameView onRoomEntered];
self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate;
if ([XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {
[self.functionView onRoomEntered];
[self.messageContainerView onRoomEntered];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomEntered];
//
[self.presenter enterNIMRoom:@(self.roomInfo.roomId).stringValue
user:self.userInfo];
} else {
//退
[self.stageView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
2025-03-06 15:26:44 +08:00
[self.sideMenu onRoomMiniEntered];
[self.functionView onRoomEntered];
2025-01-22 21:22:58 +08:00
[self.menuContainerView onRoomMiniEntered];
2024-10-17 16:05:02 +08:00
// PK 仿 2 roominfo functionView
if (self.roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode ||
self.roomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
[self.functionView onRoomEntered];
}
[self.messageContainerView onRoomMiniEntered];
}
[self cleanMiniRoomStatues];
}
- (void)enterMyRoom {
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(@"XPRoomViewController1"), 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];
}
}
- (void)cleanMiniRoomStatues {
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
}
2024-01-11 17:57:06 +08:00
- (void)initEnterRoomSuccess:(RoomInfoModel *)roomInfo user:(UserInfoModel *)userInfo {
[XNDJTDDLoadingTool hideHUDInView:self.navigationController.view];
2024-10-12 19:30:41 +08:00
[XPSkillCardPlayerManager shareInstance].roomUid = @(roomInfo.uid).stringValue;
2023-10-30 14:38:33 +08:00
userInfo.fromUid = self.fromUid;
userInfo.fromType = self.fromType;
userInfo.fromNick = self.fromNick;
2023-10-30 14:38:33 +08:00
self.hasAnimationEffect = roomInfo.hasAnimationEffect;
self.roomInfo = roomInfo;
self.userInfo = userInfo;
[self requestBoomData];
2024-09-14 18:29:36 +08:00
@kWeakify(self);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_global_queue(0, 0), ^{
@kStrongify(self);
2023-10-30 15:41:21 +08:00
//
[self.presenter getRedPacket:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
[self getOnlineCount];
2023-10-30 15:41:21 +08:00
});
switch (roomInfo.type) {
case RoomType_Anchor:
[self handleInitAnchorRoom];
[self showAnchorScrollTipView];
break;
default: {
if (roomInfo.valid) { //
if (roomInfo.roomPwd.length > 0 &&
roomInfo.uid != [AccountInfoStorage instance].getUid.integerValue &&
[XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {//
[self handleRoomWithPasswordAfterInitRoom];
} else {
[self handleRoomWithoutPasswordAfterInitRoom];
}
} else { //
if ([self.roomUid isEqualToString:[NSString stringWithFormat:@"%ld", userInfo.uid]]) {
//
[self enterMyRoom];
} else { //
[self showSuccessToast:YMLocalizedString(@"XPRoomViewController2")];
[self enterRoomFail:0];
}
} }
break;
2023-10-30 14:38:33 +08:00
}
2024-10-17 16:05:02 +08:00
[self.menuContainerView recheckMicState];
2023-07-14 18:50:55 +08:00
}
- (void)openRoomSuccess:(RoomInfoModel *)roomInfo {
2023-10-30 14:38:33 +08:00
[XNDJTDDLoadingTool hideHUDInView:self.navigationController.view];
2023-10-30 14:38:33 +08:00
self.roomInfo = roomInfo;
2025-01-22 21:22:58 +08:00
[XPSkillCardPlayerManager shareInstance].is9Mic = roomInfo.type == RoomType_Game;
2023-10-30 14:38:33 +08:00
if (roomInfo.type == RoomType_Anchor) {
[self handleInitAnchorRoom];
[self showAnchorScrollTipView];
return;
}
2023-10-30 14:38:33 +08:00
[self changeStageViewOnRoomUpdate];
[self.roomHeaderView onRoomEntered];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomEntered];
2023-10-30 14:38:33 +08:00
[self.backContainerView onRoomEntered];
2023-08-31 16:51:40 +08:00
[self.littleGameView onRoomEntered];
2023-10-30 14:38:33 +08:00
[self.functionView onRoomEntered];
[self.messageContainerView onRoomEntered];
2023-10-30 14:38:33 +08:00
self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate;
2023-10-30 14:38:33 +08:00
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
2023-07-14 18:50:55 +08:00
}
- (void)enterRoomSuccess:(NIMChatroom *)chatRoom {
2023-10-30 14:38:33 +08:00
[XNDJTDDLoadingTool hideHUDInView:self.navigationController.view];
2025-01-22 21:22:58 +08:00
2024-05-21 14:17:30 +08:00
2023-10-30 14:38:33 +08:00
[self.stageView onRoomEntered];
[self.functionView onRoomEntered];
//
if (self.roomInfo != nil) {
[self.presenter reportUserInterRoom:[NSString stringWithFormat:@"%zd", 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}];
});
}
2023-07-14 18:50:55 +08:00
}
2023-07-14 18:50:55 +08:00
- (void)enterRoomFail:(NSInteger)code {
2023-10-30 14:38:33 +08:00
[XNDJTDDLoadingTool hideHUDInView:self.navigationController.view];
[self hideHUD];
if (code == 13003) {
[self showErrorToast:YMLocalizedString(@"XPRoomViewController3")];
}
[self dismissViewControllerAnimated:YES completion:nil];
2023-07-14 18:50:55 +08:00
}
2024-05-21 14:17:30 +08:00
-(void)getOnlineCount{
@kWeakify(self);
2024-05-21 14:17:30 +08:00
[Api requestRoomOnlineUserList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
@kStrongify(self);
2024-05-21 14:17:30 +08:00
if(code == 200){
2025-01-22 21:22:58 +08:00
NSMutableArray *temp = @[].mutableCopy;
2024-05-21 14:17:30 +08:00
NSArray *list = [XPMessageRemoteExtModel modelsWithArray:data.data];
2025-01-22 21:22:58 +08:00
for (XPMessageRemoteExtModel *model in list) {
if (model.platformRole != 1) {
[temp addObject:model];
}
}
self.roomInfo.onlineNum = temp.count;
[self.functionView updateOnlineCount:[NSString stringWithFormat:@"%ld",temp.count] countList:temp.copy isUpdateCount:NO];
2024-05-21 14:17:30 +08:00
}
2025-01-22 21:22:58 +08:00
//
@kWeakify(self);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(60 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
@kStrongify(self);
if (self) {
[self getOnlineCount];
}
});
2024-05-21 14:17:30 +08:00
} roomUid:self.roomUid];
}
2023-07-14 18:50:55 +08:00
///
///roominfo userinfo
- (void)getRoomSuperAdminSuccess:(NSArray *)list {
2023-10-30 14:38:33 +08:00
self.isRequestSuperAdmin = YES;
self.superMangerList = list;
2023-07-14 18:50:55 +08:00
}
///)
- (void)getNextAnchorRoomSuccess:(RoomInfoModel *)roomInfo {
2023-10-30 14:38:33 +08:00
[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];
2024-12-20 19:05:43 +08:00
[self.sideMenu removeFromSuperview];
2023-10-30 14:38:33 +08:00
[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")];
}
2023-07-14 18:50:55 +08:00
}
- (void)getCurrentRoomInfoSuccess:(RoomInfoModel *)roomInfo {
2023-10-30 14:38:33 +08:00
[self hideHUD];
self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight);
if (roomInfo && roomInfo.valid) {
//1退
self.isRequestSuperAdmin = NO;
[self exitOldRoom];
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[[XPRoomMiniManager shareManager] resetLocalMessage];
[[RtcManager instance] exitRoom];
[self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
//2
// [self.backContainerView removeFromSuperview];
[self.stageView removeFromSuperview];
[self.messageContainerView removeFromSuperview];
[self.quickMessageContainerView removeFromSuperview];
2024-12-20 19:05:43 +08:00
[self.sideMenu removeFromSuperview];
2023-10-30 14:38:33 +08:00
[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")];
}
2023-07-14 18:50:55 +08:00
}
///
- (void)handleInitAnchorRoom {
2023-10-30 14:38:33 +08:00
if (self.roomInfo.valid) { //
2025-01-22 21:22:58 +08:00
if (self.roomInfo.roomPwd.length > 0 &&
self.roomInfo.uid != [AccountInfoStorage instance].getUid.integerValue &&
[XPRoomMiniManager shareManager].getRoomInfo.uid != self.roomUid.integerValue) {//
2023-10-30 14:38:33 +08:00
if (!self.isRequestSuperAdmin) {
@kWeakify(self);
2023-10-30 14:38:33 +08:00
[Api getRoomSuperAdminList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
@kStrongify(self);
2023-10-30 14:38:33 +08:00
NSArray<GuildSuperAdminInfoModel *> * array = [GuildSuperAdminInfoModel modelsWithArray:data.data];
self.superMangerList = array;
[self handleSuperManagerEnterAnchorRoom:self.roomInfo];
} roomUid:self.roomUid];
} else {
[self handleSuperManagerEnterAnchorRoom:self.roomInfo];
}
} else {
self.roomInfo.datingState = self.roomInfo.roomModeType == RoomModeType_Open_Blind ? RoomDatingStateChangeType_Open : RoomDatingStateChangeType_Normal;
[self __removeAllViews];
2023-10-30 14:38:33 +08:00
if (!self.anchorScrollView.superview) {
[self.view addSubview:self.anchorScrollView];
}
2023-10-30 14:38:33 +08:00
[self.anchorScrollView addSubview:self.backContainerView];
[self.anchorScrollView addSubview:self.stageView];
[self.anchorScrollView addSubview:self.messageContainerView];
[self.anchorScrollView addSubview:self.quickMessageContainerView];
2024-12-20 19:05:43 +08:00
[self.anchorScrollView addSubview:self.sideMenu];
2023-10-30 14:38:33 +08:00
[self.anchorScrollView addSubview:self.roomHeaderView];
[self.anchorScrollView addSubview:self.menuContainerView];
[self.anchorScrollView addSubview:self.functionView];
2023-10-30 14:38:33 +08:00
[self.view bringSubviewToFront:self.animationView];
[self updateViewConstraintsOnAnchorRoom];
[self changeStageViewOnAnchorRoom];
[self.roomHeaderView onRoomEntered];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomEntered];
2023-10-30 14:38:33 +08:00
2024-10-17 16:05:02 +08:00
2023-10-30 14:38:33 +08:00
[self.backContainerView onRoomEntered];
2023-08-31 16:51:40 +08:00
[self.littleGameView onRoomEntered];
2023-10-30 14:38:33 +08:00
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];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomEntered];
2023-10-30 14:38:33 +08:00
} else {
//退
[self.stageView onRoomMiniEntered];
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
[self.functionView onRoomEntered];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomMiniEntered];
2023-10-30 14:38:33 +08:00
}
[self cleanMiniRoomStatues];
2023-10-30 14:38:33 +08:00
}
} 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];
}
}
2023-07-14 18:50:55 +08:00
}
- (void)getRedPacketInfoSuccess:(XPRedPacketModel *)redInfo{
2023-10-27 17:21:23 +08:00
XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
2023-10-31 11:09:04 +08:00
view.delegate = self;
self.isShowRedPacket = YES;
2023-10-27 17:21:23 +08:00
redInfo.validityType = 0;
redInfo.kind = 1;
view.receiveModel = redInfo;
view.inAllPacketRoom = YES;
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];
}
2023-07-14 18:50:55 +08:00
- (void)getRedPacketSuccess:(NSArray *)list {
2023-10-25 19:26:20 +08:00
if(list.count > 0){
2024-12-20 19:05:43 +08:00
self.sideMenu.redPacketList = [NSMutableArray arrayWithArray:list];
2023-10-25 19:26:20 +08:00
}
2023-07-14 18:50:55 +08:00
}
2023-09-22 15:26:19 +08:00
-(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){
2023-10-30 14:38:33 +08:00
[kWindow addSubview:self.freeView];
2023-09-22 15:26:19 +08:00
}
[XPRoomMiniManager shareManager].curState = nil;
}
}
2023-07-14 18:50:55 +08:00
#pragma mark - NIMChatroomManagerDelegate
- (void)chatroomBeKicked:(NIMChatroomBeKickedResult *)result {
2023-11-13 16:42:34 +08:00
2023-11-28 16:50:45 +08:00
if (result.reason == 5) {
2023-10-30 14:38:33 +08:00
[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]];
2023-08-31 16:51:40 +08:00
[self.littleGameView handleSelfInExitEvent];
[self.littleGameView destroyMG];
2023-10-30 14:38:33 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
2023-07-14 18:50:55 +08:00
}
#pragma mark - NIMChatManagerDelegate
- (void)__removeAllViews {
[self.anchorScrollView removeFromSuperview];
[self.backContainerView removeFromSuperview];
[self.stageView removeFromSuperview];
[self.messageContainerView removeFromSuperview];
[self.quickMessageContainerView removeFromSuperview];
2024-12-20 19:05:43 +08:00
[self.sideMenu removeFromSuperview];
[self.roomHeaderView removeFromSuperview];
[self.functionView removeFromSuperview];
[self.menuContainerView removeFromSuperview];
}
2023-07-14 18:50:55 +08:00
- (void)onRecvMessages:(NSArray<NIMMessage *> *)messages {
2023-10-30 14:38:33 +08:00
for (NIMMessage * message in messages) {
///p2p
if (message.session.sessionType == NIMSessionTypeP2P) {
if(message.messageType == NIMMessageTypeCustom) {
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
AttachmentModel * attachment = (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:@(self.roomInfo.roomId).stringValue]) {
2024-05-16 14:30:21 +08:00
continue;
}
// NSLog(@" --- Message Raw Attach Content: %@, %@, %ld", @(message.senderClientType), message.rawAttachContent, (long)message.messageType);
2025-01-07 20:07:54 +08:00
2023-10-30 14:38:33 +08:00
if (message.messageType == NIMMessageTypeNotification) {
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
2025-01-07 20:07:54 +08:00
2025-01-08 12:10:02 +08:00
// NSLog(@" --- Message Content class: %@", [notiMsg.content class]);
// if ([notiMsg.content isKindOfClass:[NIMUnsupportedNotificationContent class]]) {
// NSLog(@"Fuck %@", message);
// }
2025-01-07 20:07:54 +08:00
if (![notiMsg.content isKindOfClass:[NIMChatroomNotificationContent class]]) {
return;
}
2023-10-30 14:38:33 +08:00
NSInteger onLineNumber = self.roomInfo.onlineNum;
switch (content.eventType) {
case NIMChatroomEventTypeInfoUpdated: //
{
NSDictionary *data = [content.notifyExt toJSONObject];
int type = [data[@"type"] intValue];
switch (type) {
2024-06-25 19:18:51 +08:00
case 1: //
case 3: // &
2023-10-30 14:38:33 +08:00
{
NSMutableDictionary *lastRoomInfoDic = [NSMutableDictionary dictionaryWithDictionary:[self.roomInfo model2dictionary]];
[lastRoomInfoDic addEntriesFromDictionary: ((NSString *)data[@"roomInfo"]).toJSONObject];
RoomInfoModel *newRoomInfo = [RoomInfoModel modelWithJSON:lastRoomInfoDic];
2023-10-30 14:38:33 +08:00
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;
2025-01-22 21:22:58 +08:00
2023-10-30 14:38:33 +08:00
[self.backContainerView onRoomUpdate];
2025-01-22 21:22:58 +08:00
2023-10-30 14:38:33 +08:00
self.quickMessageContainerView.titleArray = self.roomInfo.speakTemplate;
if (self.roomInfo.type == RoomType_Anchor && self.roomInfo.hadChangeRoomType) {///
[self handleInitAnchorRoom];
[self showAnchorScrollTipView];
} else if (anchorToOther) {
[self __removeAllViews];
2025-01-22 21:22:58 +08:00
2023-10-30 14:38:33 +08:00
[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];
2024-12-20 19:05:43 +08:00
[self.view addSubview:self.sideMenu];
2023-10-30 14:38:33 +08:00
[self.view addSubview:self.roomHeaderView];
[self.view bringSubviewToFront:self.menuContainerView];
[self.view addSubview:self.functionView];
2023-10-30 14:38:33 +08:00
[self.view bringSubviewToFront:self.animationView];
2025-01-22 21:22:58 +08:00
2023-10-30 14:38:33 +08:00
[self initSubViewConstraints];
[self changeStageViewOnRoomUpdate];
[self.stageView onRoomUpdate];
[self.menuContainerView onRoomUpdate];
[self.functionView onRoomUpdate];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomUpdate];
2023-10-30 14:38:33 +08:00
[self.messageContainerView onRoomUpdate];
2023-08-31 16:51:40 +08:00
[self.littleGameView onRoomUpdate];
2023-10-30 14:38:33 +08:00
} else {
if (self.roomInfo.type == RoomType_Anchor) {
[self changeStageViewOnAnchorRoom];
} else if (self.roomInfo.type == RoomType_20Mic) {
[self __layoutTwentyMicStage];
[self changeStageViewOnRoomUpdate];
[self.twentyMicStageView onRoomUpdate];
} else if (self.roomInfo.type == RoomType_19Mic) {
[self __layoutNineteenMicStage];
[self changeStageViewOnRoomUpdate];
[self.nineteenMicStageView onRoomUpdate];
} else if (self.roomInfo.type == RoomType_15Mic) {
[self __layoutFifteenMicStage];
[self changeStageViewOnRoomUpdate];
[self.fifteenMicStageView onRoomUpdate];
} else if (self.roomInfo.type == RoomType_10Mic) {
[self __layoutTenMicStage];
[self changeStageViewOnRoomUpdate];
[self.tenMicStageView onRoomUpdate];
2023-10-30 14:38:33 +08:00
} else {
[self changeStageViewOnRoomUpdate];
}
[self.stageView onRoomUpdate];
[self.menuContainerView onRoomUpdate];
[self.functionView onRoomUpdate];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomUpdate];
2023-10-30 14:38:33 +08:00
[self.messageContainerView onRoomUpdate];
2023-08-31 16:51:40 +08:00
[self.littleGameView onRoomUpdate];
2023-10-30 14:38:33 +08:00
}
}
break;
}
}
break;
case NIMChatroomEventTypeEnter:
2023-11-13 16:42:34 +08:00
{
2023-11-28 16:50:45 +08:00
if (content.source.userId.integerValue == [AccountInfoStorage instance].getUid.integerValue){
[self.presenter getKickUserListWithRoomUid:@(self.roomInfo.uid).stringValue];
}
2023-10-30 14:38:33 +08:00
if (content.source.userId.integerValue != [AccountInfoStorage instance].getUid.integerValue && self.userInfo.platformRole != 1) {
onLineNumber += 1;
2023-11-28 16:50:45 +08:00
}else {
///
2023-10-30 14:38:33 +08:00
[self userEnterRoomSuccess];
///
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomUpdate];
2023-10-30 14:38:33 +08:00
[self.menuContainerView onRoomUpdate];
}
2023-11-13 16:42:34 +08:00
2023-10-30 14:38:33 +08:00
break;
2023-11-13 16:42:34 +08:00
}
2023-10-30 14:38:33 +08:00
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;
2025-01-22 21:22:58 +08:00
case NIMChatroomEventTypeAddManager: {
NIMChatroomNotificationMember *targets = [content.targets firstObject];
if (targets.userId.integerValue == self.userInfo.uid) {
[XNDJTDDLoadingTool showSuccessWithMessage:YMLocalizedString(@"1.0.34_text_15")];
}
}
break;
case NIMChatroomEventTypeRemoveManager: {
NIMChatroomNotificationMember *targets = [content.targets firstObject];
if (targets.userId.integerValue == self.userInfo.uid) {
[XNDJTDDLoadingTool showSuccessWithMessage:YMLocalizedString(@"1.0.34_text_16")];
}
}
break;
2023-10-30 14:38:33 +08:00
default:
break;
}
self.roomInfo.onlineNum = onLineNumber;
2024-05-21 14:17:30 +08:00
[self.functionView updateOnlineCount:[NSString stringWithFormat:@"%ld",onLineNumber] countList:@[] isUpdateCount:YES];
2023-10-30 14:38:33 +08:00
[self.roomHeaderView onRoomUpdate];
[self.stageView handleNIMNotificationMessage:message];
[self.animationView handleNIMNotificationMessage:message];
[self.messageContainerView handleNIMNotificationMessage:message];
2024-12-20 19:05:43 +08:00
[self.sideMenu handleNIMNotificationMessage:message];
2023-10-30 14:38:33 +08:00
[self.menuContainerView handleNIMNotificationMessage:message];
[self.functionView handleNIMNotificationMessage:message];
2023-09-01 14:29:14 +08:00
[self.littleGameView handleNIMNotificationMessage:message];
2024-10-12 19:30:41 +08:00
if([self.stageView findMicroViewByUid:@(self.userInfo.uid).stringValue] != nil){
[XPSkillCardPlayerManager shareInstance].isMineInMic = YES;
}else{
[XPSkillCardPlayerManager shareInstance].isMineInMic = NO;
};
2023-10-30 14:38:33 +08:00
} 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];
2024-12-20 19:05:43 +08:00
[self.sideMenu handleNIMCustomMessage:message];
2023-10-30 14:38:33 +08:00
[self.functionView handleNIMCustomMessage:message];
2023-09-01 14:29:14 +08:00
[self.littleGameView handleNIMCustomMessage:message];
2025-02-28 19:04:09 +08:00
[self.messageContainerView handleNIMCustomMessage:message];
2024-10-10 20:16:23 +08:00
2023-10-30 14:38:33 +08:00
if (attachment.first == CustomMessageType_First_Recharge_Reward && attachment.second == Custom_Message_Sub_Room_First_Recharge_Reward) {
self.userInfo.isFirstCharge = NO;
[self.menuContainerView onRoomUpdate];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomUpdate];
2023-10-30 14:38:33 +08:00
} else if (attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_MessageState) {
///iOS
NSDictionary * dic= attachment.data[@"roomInfo"];
if (dic.allKeys.count <=0) {
dic = attachment.data;
}
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:dic];
self.roomInfo.isCloseScreen = roomInfo.isCloseScreen;
2024-05-21 14:17:30 +08:00
2023-10-30 14:38:33 +08:00
[self.menuContainerView onRoomUpdate];
2024-05-22 19:36:51 +08:00
2024-05-21 14:17:30 +08:00
}else if(attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_AnimateEffect){
NSDictionary * dic= attachment.data[@"roomInfo"];
if (dic.allKeys.count <=0) {
dic = attachment.data;
}
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:dic];
self.roomInfo.hasAnimationEffect = roomInfo.hasAnimationEffect;
2024-05-22 19:36:51 +08:00
[self.roomHeaderView onRoomUpdate];
2024-05-21 14:17:30 +08:00
}
else if(attachment.first == CustomMessageType_Queue && attachment.second == Custom_Message_Sub_Queue_Invite) {
2023-10-30 14:38:33 +08:00
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]];
2023-09-01 14:29:14 +08:00
[self.littleGameView handleSelfInExitEvent];
[self.littleGameView destroyMG];
2023-10-30 14:38:33 +08:00
[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)];
2023-10-26 15:20:20 +08:00
XPRedPacketModel *data = [XPRedPacketModel modelWithJSON:attachment.data];
2023-10-31 11:09:04 +08:00
view.delegate = self;
self.isShowRedPacket = YES;
2023-10-26 15:20:20 +08:00
data.validityType = 0;
data.kind = 1;
2023-10-27 16:17:05 +08:00
data.redEnvelopeId = attachment.data[@"redEnvelopeId"];
2023-10-30 14:38:33 +08:00
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];
2024-12-20 19:05:43 +08:00
if(self.sideMenu.redPacketList == nil){
self.sideMenu.redPacketList = [NSMutableArray array];
2023-10-31 11:09:04 +08:00
}
2024-12-20 19:05:43 +08:00
NSMutableArray *redPacketList = [NSMutableArray arrayWithArray:self.sideMenu.redPacketList];
2023-10-31 11:09:04 +08:00
[redPacketList insertObject:data atIndex:0];
2024-12-20 19:05:43 +08:00
self.sideMenu.redPacketList = redPacketList;
2023-10-26 15:20:20 +08:00
}else if(attachment.second == Custom_Message_Sub_NewRoomDiamandRedPacket){
2023-10-27 16:17:05 +08:00
XPRedPacketModel *curData = [XPRedPacketModel modelWithJSON:attachment.data];
2024-12-20 19:05:43 +08:00
if(self.sideMenu.redPacketList == nil){
self.sideMenu.redPacketList = [NSMutableArray array];
2023-10-31 18:02:12 +08:00
}
2024-12-20 19:05:43 +08:00
NSMutableArray *redPacketList = [NSMutableArray arrayWithArray:self.sideMenu.redPacketList];
2023-10-31 18:02:12 +08:00
[redPacketList insertObject:curData atIndex:0];
if(self.roomInfo.uid > 0 && curData.redEnvelopeNum.integerValue != redPacketList.count){
[self.presenter getRedPacket:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
return;
}
2023-10-27 16:17:05 +08:00
curData.redEnvelopeId = attachment.data[@"redEnvelopeId"];
if(curData.validityType == 0){
2023-10-26 15:20:20 +08:00
XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
2023-10-31 11:09:04 +08:00
view.delegate = self;
self.isShowRedPacket = YES;
2023-10-27 16:17:05 +08:00
view.receiveModel = curData;
2023-10-26 15:20:20 +08:00
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];
}
2024-12-20 19:05:43 +08:00
self.sideMenu.redPacketList = redPacketList;
2024-05-16 14:30:21 +08:00
2023-10-26 15:20:20 +08:00
}
2023-10-30 14:38:33 +08:00
}else if(attachment.first == CustomMessageType_Free_Gift_Star_Reset_Time){
2023-09-22 15:26:19 +08:00
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 ?: @""}];
}
} else if (attachment.first == CustomMessageType_Custom_Room_Background) {
if (attachment.second == Custom_Message_Sub_Custom_Room_Background) {
2024-11-06 17:57:32 +08:00
if ([attachment.data isKindOfClass:[NSDictionary class]]) {
NSString *url = attachment.data[@"url"];
if (![NSString isEmpty:url]) {
self.roomInfo.backPic = url;//@"https://tva1.moyu.im/mw600/9f0b0dd5ly1hvacrep5fhj20jg0t60w4.jpg";
[self.backContainerView onRoomUpdate];
}
}
}
} else if (attachment.first == CustomMessageType_RoomLevel_Update) {
if (attachment.second == Custom_Message_Sub_RoomLevel_Update) {
if ([attachment.data isKindOfClass:[NSDictionary class]]) {
NSString *url = attachment.data[@"roomLevelIcon"];
NSNumber *roomLevel = attachment.data[@"roomLevel"];
if (![NSString isEmpty:url] && roomLevel.integerValue > self.roomHeaderView.tag) {
self.roomHeaderView.tag = roomLevel.integerValue;
[self.roomHeaderView updateLevel:url];
self.roomInfo.roomLevelIcon = url;
}
}
}
2023-09-22 15:26:19 +08:00
}
2023-10-30 14:38:33 +08:00
}
} else if(message.messageType == NIMMessageTypeText) {
[self.messageContainerView handleNIMTextMessage:message];
2023-09-01 14:29:14 +08:00
[self.littleGameView handleNIMTextMessage:message];
2023-10-30 14:38:33 +08:00
} else if(message.messageType == NIMMessageTypeTip) {
[self.messageContainerView handleNIMTextMessage:message];
2024-05-11 10:21:48 +08:00
}else if(message.messageType == NIMMessageTypeImage){
[self.messageContainerView handleNIMImageMessage:message];
2023-10-30 14:38:33 +08:00
}
}
2023-07-14 18:50:55 +08:00
}
2023-08-25 16:32:51 +08:00
#pragma mark - NIMBroadcastDelegate
// 广
- (void)onReceiveBroadcastMessage:(NIMBroadcastMessage *)broadcastMessage{
if (broadcastMessage.content) {
NSDictionary *msgDictionary = [broadcastMessage.content toJSONObject];
AttachmentModel *attachment = [AttachmentModel modelWithJSON:msgDictionary[@"body"]];
2024-04-24 20:08:24 +08:00
NSString *partitionId = [NSString stringWithFormat:@"%@",attachment.data[@"partitionId"]];
if(![partitionId isEqualToString:self.getUserInfo.partitionId]){
return;
}
2023-08-31 17:08:59 +08:00
BOOL isHave = NO;
2024-05-16 14:30:21 +08:00
if(attachment.first == CustomMessageType_Look_Love && attachment.second == Custom_Message_Sub_Look_Love_InRoom_NeedAllMicSend){
2024-02-21 17:22:50 +08:00
isHave = YES;
2024-02-21 10:18:59 +08:00
}else if(attachment.first == CustomMessageType_Guardian_Planet && attachment.second == Custom_Message_Sub_Guardian_Planet_All_Room){
2024-02-21 17:22:50 +08:00
isHave = YES;
2025-04-02 11:04:07 +08:00
}else if(attachment.first == CustomMessageType_Super_Gift &&
(attachment.second == Custom_Message_Sub_Super_Gift || attachment.second == Custom_Message_Sub_Super_Gift_Room_Message)){
2024-03-25 14:39:36 +08:00
isHave = YES;
2024-02-23 14:40:10 +08:00
}else if(attachment.first == CustomMessageType_General_Public_Screen && attachment.second == Custom_Message_Sub_General_Public_Screen_All_Room){
isHave = YES;
2023-08-31 17:08:59 +08:00
}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)) { //
2024-02-21 17:22:50 +08:00
isHave = YES;
2023-09-26 17:57:39 +08:00
}else if (attachment.first == CustomMessageType_Tarot && (attachment.second == Custom_Message_Sub_Tarot_Advanced || attachment.second == Custom_Message_Sub_Tarot_Intermediate)){
isHave = YES;
2024-05-07 19:40:21 +08:00
}else if(attachment.first == CustomMessageType_LuckyBag && attachment.second == Custom_Message_Sub_Room_Gift_LuckBag_FullScree){
isHave = YES;
}
if (attachment.first == CustomMessageType_RedPacket && attachment.second == Custom_Message_Sub_AllDiamandRedPacket) {
2023-10-31 11:09:04 +08:00
if(self.isShowRedPacket == YES)return;
2023-10-27 19:30:45 +08:00
XPRedPacketModel *data = [XPRedPacketModel modelWithDictionary:attachment.data];
data.validityType = 0;
data.kind = 1;
data.redEnvelopeId = attachment.data[@"redEnvelopeId"];
RoomInfoModel *roomInfo = self.roomInfo;
2023-10-30 14:38:33 +08:00
XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
2023-10-31 11:09:04 +08:00
view.delegate = self;
self.isShowRedPacket = YES;
2023-10-27 19:30:45 +08:00
if (roomInfo.uid == data.roomUid.integerValue) {
view.inAllPacketRoom = YES;
} else {
view.inAllPacketRoom = NO;
}
2023-10-30 14:38:33 +08:00
view.receiveModel = data;
2023-10-27 19:30:45 +08:00
[self.view addSubview:view];
[self.view bringSubviewToFront:view];
2023-08-31 17:08:59 +08:00
}
if(isHave == NO)return;
2023-08-25 16:32:51 +08:00
attachment.isBroadcast = YES;
NIMMessage *message = [NIMMessage new];
NIMCustomObject *object = [NIMCustomObject new];
object.attachment = attachment;
message.messageObject = object;
[self.messageContainerView handleNIMTextMessage:message];
}
}
2023-07-14 18:50:55 +08:00
//
- (void)sendMessage:(NIMMessage *)message didCompleteWithError:(NSError *)error {
2023-10-30 14:38:33 +08:00
if (message.yidunAntiSpamRes) {
NSDictionary * spamRes = message.yidunAntiSpamRes.toJSONObject;
2024-07-06 16:36:47 +08:00
id spamResExt = ((NSString *)spamRes[@"ext"]).toJSONObject;
NSDictionary *antispamDic = nil;
if ([spamResExt isKindOfClass:[NSArray class]]) {
antispamDic = [spamResExt xpSafeObjectAtIndex:0];
} else if ([spamResExt isKindOfClass:[NSDictionary class]]) {
antispamDic = spamResExt[@"antispam"];
}
NSDictionary *realAntiDic = nil;
if ([[antispamDic allKeys] containsObject:@"antispam"]) {
realAntiDic = antispamDic[@"antispam"];;
} else {
realAntiDic = antispamDic;
}
if (realAntiDic) {
NSInteger suggestion = [realAntiDic[@"suggestion"] integerValue];
if (suggestion == 2) {
[self showErrorToast:YMLocalizedString(@"XPRoomViewController10")];
}
2023-10-30 14:38:33 +08:00
}
}
2024-07-06 16:36:47 +08:00
2024-07-15 11:17:04 +08:00
if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) {
return;
}
2025-01-22 21:22:58 +08:00
if (error) {
NSLog(@"%@", error);
return;
};
2023-10-30 14:38:33 +08:00
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) {
2024-05-22 12:06:48 +08:00
NSDictionary * dic= attachment.data[@"roomInfo"];
if (dic.allKeys.count <=0) {
dic = attachment.data;
}
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:dic];
2023-10-30 14:38:33 +08:00
self.roomInfo.isCloseScreen = roomInfo.isCloseScreen;
[self.menuContainerView onRoomUpdate];
2024-05-21 14:17:30 +08:00
}else if(attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_AnimateEffect){
NSDictionary * dic= attachment.data[@"roomInfo"];
if (dic.allKeys.count <= 0) {
dic = attachment.data;
}
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:dic];
self.roomInfo.hasAnimationEffect = roomInfo.hasAnimationEffect;
}
2024-05-22 19:36:51 +08:00
[self.roomHeaderView onRoomUpdate];
2023-10-30 14:38:33 +08:00
[self.messageContainerView handleNIMCustomMessage:message];
}
}else if(message.messageType == NIMMessageTypeText) {
[self.messageContainerView handleNIMTextMessage:message];;
}
2023-07-14 18:50:55 +08:00
}
#pragma mark - NIMLoginManagerDelegate
- (void)onKickout:(NIMLoginKickoutResult *)result {
// [self exitRoom];
2023-10-30 14:38:33 +08:00
[self dismissViewControllerAnimated:YES completion:nil];
2023-07-14 18:50:55 +08:00
}
2023-07-14 18:50:55 +08:00
#pragma mark - NIMConversationManagerDelegate
- (void)didAddRecentSession:(NIMRecentSession *)recentSession
2023-10-30 14:38:33 +08:00
totalUnreadCount:(NSInteger)totalUnreadCount {
[self.menuContainerView addNIMRecentSession:recentSession];
2023-07-14 18:50:55 +08:00
}
- (void)didUpdateRecentSession:(NIMRecentSession *)recentSession
2023-10-30 14:38:33 +08:00
totalUnreadCount:(NSInteger)totalUnreadCount {
[self.menuContainerView addNIMRecentSession:recentSession];
2023-07-14 18:50:55 +08:00
}
- (void)didRemoveRecentSession:(NIMRecentSession *)recentSession
2023-10-30 14:38:33 +08:00
totalUnreadCount:(NSInteger)totalUnreadCount {
[self.menuContainerView removeNIMRecentSession:recentSession];
2023-07-14 18:50:55 +08:00
}
#pragma mark - RoomDelegate
- (RoomInfoModel *)getRoomInfo {
2023-10-30 14:38:33 +08:00
return self.roomInfo;
2023-07-14 18:50:55 +08:00
}
- (UserInfoModel *)getUserInfo {
2023-10-30 14:38:33 +08:00
return self.userInfo;
2023-07-14 18:50:55 +08:00
}
- (BOOL)isManagerOrOwner {
return self.roomUid.integerValue == self.userInfo.uid ||
[self.superMangerList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"uid == %d", self.userInfo.uid]] > 0;
}
2024-04-30 19:30:11 +08:00
-(NSMutableArray *)getPlayList{
2024-12-20 19:05:43 +08:00
return self.sideMenu.playList;
2024-04-30 19:30:11 +08:00
}
-(NSMutableArray *)getLittleGameList {
2024-12-20 19:05:43 +08:00
return self.sideMenu.littleGameList;
}
2023-07-14 18:50:55 +08:00
- (void)exitRoom {
2025-02-28 19:04:09 +08:00
[XNDJTDDLoadingTool showLoading];
2024-10-17 16:05:02 +08:00
[XPSkillCardPlayerManager shareInstance].micState = MICState_None;
2025-02-28 19:04:09 +08:00
[self.stageView exitNIMRoom];
2023-10-30 14:38:33 +08:00
[self.menuContainerView menuResignFirstResponder];
2025-01-15 19:02:58 +08:00
[self.animationView resumeTimer];
2025-01-15 19:02:58 +08:00
2025-02-28 19:04:09 +08:00
switch (self.roomInfo.roomModeType) {
case RoomModeType_Open_Micro_Mode:
case RoomModeType_Open_Blind:
[self exitRoomAndCancelArrangeMic];
break;
case RoomModeType_Open_PK_Mode:
[self exitRoomWhenPKing];
break;
case RoomType_MiniGame:
[self exitRoomWhenPlayMiniGame];
break;
default:
[self exitRoomPage];
break;
}
}
2025-03-21 16:19:07 +08:00
- (BOOL)isSameRoom:(NSString *)targetUid {
return [self.roomUid isEqualToString:targetUid];
}
2025-02-28 19:04:09 +08:00
- (void)exitRoomAndCancelArrangeMic {
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) {
2023-10-30 14:38:33 +08:00
[arrangeMicModel.queue enumerateObjectsUsingBlock:^(ArrangeMicUserModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.uid.integerValue == [AccountInfoStorage instance].getUid.integerValue) {
grouptype = [NSString stringWithFormat:@"%ld", obj.groupType];
*stop = YES;
}
}];
2025-02-28 19:04:09 +08:00
}
[Api cancelArrangeMic:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
2023-10-30 14:38:33 +08:00
2025-02-28 19:04:09 +08:00
} roomUid:roomUid operUid:uid groupType:grouptype];
[self exitRoomPage];
} cancelHandler:^{
}];
return;
}
}
[self exitRoomPage];
} roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"];
}
- (void)exitRoomWhenPKing {
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;
}
2023-10-30 14:38:33 +08:00
}];
2025-02-28 19:04:09 +08:00
[Api cancelRoomPKArrangeMic:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
} roomUid:roomUid operUid:uid groupType:grouptype];
[self exitRoomPage];
} cancelHandler:^{
}];
return;
2023-10-30 14:38:33 +08:00
}
2023-09-01 14:29:14 +08:00
}
2025-02-28 19:04:09 +08:00
[self exitRoomPage];
} roomUid:roomUid operUid:uid page:@"1" pageSize:@"50"];
}
- (void)exitRoomWhenPlayMiniGame {
if ([self.littleGameView isInSudGame]) {
TTAlertConfig *config = [[TTAlertConfig alloc] init];
config.cancelButtonConfig.title = YMLocalizedString(@"XPRoomSettingInputView4");
config.confirmButtonConfig.title = YMLocalizedString(@"TTAlertConfig0");
config.message = YMLocalizedString(@"XPRoomViewController14");
@kWeakify(self);
[TTPopup alertWithConfig:config confirmHandler:^{ //
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
@kStrongify(self);
[self exitRoomPage];
});
} cancelHandler:^{
}];
} else {
[self exitRoomPage];
2023-09-01 14:29:14 +08:00
}
2025-02-28 19:04:09 +08:00
}
- (void)exitRoomPage {
if (self.roomInfo.type == RoomType_MiniGame) {
2025-02-28 19:04:09 +08:00
[self.littleGameView handleSelfInExitEvent];
[self.littleGameView destroyMG];
2023-10-30 14:38:33 +08:00
}
2025-02-28 19:04:09 +08:00
[[XPRoomMiniManager shareManager] resetLocalMessage];
[[RtcManager instance] exitRoom];
[self.presenter exitNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]];
[self.presenter reportUserOutRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
[self handleFirstOutRoom];
[self dismissViewControllerAnimated:YES completion:^{
[XNDJTDDLoadingTool hideHUD];
}];
2023-07-14 18:50:55 +08:00
}
- (void)miniRoom {
2023-09-22 15:26:19 +08:00
if(self.freeModel != nil){
[XPRoomMiniManager shareManager].curState = self.freeModel.curStage;
}
2024-10-15 20:56:25 +08:00
2023-09-01 14:29:14 +08:00
[self.menuContainerView menuResignFirstResponder];
2023-09-01 14:29:14 +08:00
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) {
2023-10-30 14:38:33 +08:00
if ([self.littleGameView isInSudGame]) {
TTAlertConfig *config = [[TTAlertConfig alloc] init];
config.cancelButtonConfig.title = YMLocalizedString(@"XPRoomViewController15");
config.confirmButtonConfig.title = YMLocalizedString(@"XPRoomViewController16");
config.message = YMLocalizedString(@"XPRoomViewController17");
2024-12-03 17:40:29 +08:00
@kWeakify(self);
2023-10-30 14:38:33 +08:00
[TTPopup alertWithConfig:config confirmHandler:^{ //
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
2024-12-03 17:40:29 +08:00
@kStrongify(self);
2023-10-30 14:38:33 +08:00
[[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];
}
2023-09-01 14:29:14 +08:00
}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];
}
2023-07-14 18:50:55 +08:00
}
- (void)showPKPanel {
[self.functionView showPKPanelView];
}
2023-07-14 18:50:55 +08:00
- (UINavigationController *)getCurrentNav {
2023-10-30 14:38:33 +08:00
return self.navigationController;
2023-07-14 18:50:55 +08:00
}
2024-02-21 10:18:59 +08:00
-(UIView *)getSuperView{
return self.view;
}
2023-07-14 18:50:55 +08:00
- (NSMutableDictionary<NSString *,MicroQueueModel *> *)getMicroQueue {
2023-10-30 14:38:33 +08:00
return [self.stageView getMicroQueue];
2023-07-14 18:50:55 +08:00
}
- (NSArray *)getRoomSuperAdminList {
2023-10-30 14:38:33 +08:00
return self.superMangerList;
2023-07-14 18:50:55 +08:00
}
- (NSArray *)getRoomPKGroupTeamList {
2023-10-30 14:38:33 +08:00
return [self.functionView getRoomPKGroupTeamList];
2023-07-14 18:50:55 +08:00
}
- (BOOL)isRoomPKPlaying {
2023-10-30 14:38:33 +08:00
return [self.functionView isRoomPKPlaying];
2023-07-14 18:50:55 +08:00
}
- (void)onMicroQueueUpdate:(NSMutableDictionary<NSString *,MicroQueueModel *> *)queue {
2023-10-30 14:38:33 +08:00
[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;
}
}
if (isOnMic) {
self.anchorScrollView.scrollEnabled = NO;
} else {
self.anchorScrollView.scrollEnabled = YES;
}
2023-07-14 18:50:55 +08:00
}
- (CGPoint)animationPointAtStageViewByUid:(NSString *)uid {
2023-10-30 14:38:33 +08:00
return [self.stageView animationPointAtStageViewByUid:uid];
2023-07-14 18:50:55 +08:00
}
- (CGPoint)animationPointAtStageViewByIndex:(NSInteger)index {
return [self.stageView animationPointAtStageViewByIndex:index];
}
2024-10-10 20:16:23 +08:00
- (void)getRoomBoomInfoSuccess:(NSArray <BoomDetailModel*> *)models {
[[RoomBoomManager sharedManager] updateBoomDetailArray:models];
2024-12-20 19:05:43 +08:00
[self.sideMenu updateForBoomDetailArray:models];
2024-10-10 20:16:23 +08:00
}
- (void)getRoomBoomExplosionSuccess:(BoomInfoModel *)model {
[[RoomBoomManager sharedManager] receiveEnterRoomBoom:model];
2024-10-10 20:16:23 +08:00
}
2023-07-14 18:50:55 +08:00
#pragma mark - 退
- (void)handleFirstOutRoom {
2023-10-30 14:38:33 +08:00
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults boolForKey:kHadQuitOtherRoomKey] && self.userInfo.uid != self.roomInfo.uid && self.userInfo.showLimitCharge) {
[defaults setBool:YES forKey:kHadQuitOtherRoomKey];
[defaults synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:kNewUserRechargeKey object:nil];
}
2023-07-14 18:50:55 +08:00
}
2023-09-01 14:29:14 +08:00
#pragma mark - XPRoomLittleGameContainerViewDelegate
- (void)hiddenSudGamePostionView {
[self.functionView hiddenSudGamePostionView];
}
2023-07-14 18:50:55 +08:00
#pragma mark - AnchorRoomScrollViewDelegate
- (void)anchorScrollViewScrollToNext:(AnchorRoomScrollView *)anchorScrollView {
2023-10-30 14:38:33 +08:00
if (!self) {
return;
}
[self.view endEditing:YES];
[self showAnchorLoading];
[self.presenter getCycleAnchorRoomList:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]];
2023-07-14 18:50:55 +08:00
}
- (void)anchorScrollViewScrollToPrevious:(AnchorRoomScrollView *)anchorScrollView {
2023-10-30 14:38:33 +08:00
if (!self || self.anchorRoomList.count <= 0) {
return;
}
[self.view endEditing:YES];
[self showAnchorLoading];
if (self.anchorIndex < self.anchorRoomList.count) {
NSString * roomUid = [self.anchorRoomList xpSafeObjectAtIndex:self.anchorIndex];
2023-10-30 14:38:33 +08:00
[self.presenter getCurrentRoomInfo:roomUid];
self.anchorIndex --;
}else {
[self showErrorToast:YMLocalizedString(@"XPRoomViewController13")];
self.anchorScrollView.contentOffset = CGPointMake(0, KScreenHeight);
}
2023-07-14 18:50:55 +08:00
}
#pragma mark - XPRoomSettingInputViewDelegate
///
- (void)xPRoomSettingInputView:(XPRoomSettingInputView *)view didClickConfirm:(NSString *)text type:(RoomSettingInputType)type {
2023-10-30 14:38:33 +08:00
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) {
[self __removeAllViews];
2023-10-30 14:38:33 +08:00
if (!self.anchorScrollView.superview) {
[self.view insertSubview:self.anchorScrollView belowSubview:self.menuContainerView];
}
[self.anchorScrollView addSubview:self.backContainerView];
[self.anchorScrollView addSubview:self.stageView];
[self.anchorScrollView addSubview:self.messageContainerView];
[self.anchorScrollView addSubview:self.quickMessageContainerView];
2024-12-20 19:05:43 +08:00
[self.anchorScrollView addSubview:self.sideMenu];
2023-10-30 14:38:33 +08:00
[self.anchorScrollView addSubview:self.roomHeaderView];
if (!self.menuContainerView.superview) {
[self.view addSubview:self.menuContainerView];
}
[self.anchorScrollView addSubview:self.functionView];
2023-10-30 14:38:33 +08:00
[self.view bringSubviewToFront:self.animationView];
[self updateViewConstraintsOnAnchorRoom];
[self changeStageViewOnAnchorRoom];
[self.roomHeaderView onRoomEntered];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomEntered];
2023-10-30 14:38:33 +08:00
2024-10-17 16:05:02 +08:00
2023-10-30 14:38:33 +08:00
[self.backContainerView onRoomEntered];
2023-09-01 14:29:14 +08:00
[self.littleGameView onRoomEntered];
2023-08-31 16:51:40 +08:00
[self.littleGameView onRoomEntered];
2023-10-30 14:38:33 +08:00
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];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomEntered];
2023-10-30 14:38:33 +08:00
} else {
//退
[self.stageView onRoomMiniEntered];
[self.messageContainerView onRoomMiniEntered];
[self.functionView onRoomMiniEntered];
[self.functionView onRoomEntered];
2024-10-17 16:05:02 +08:00
[self.menuContainerView onRoomMiniEntered];
2023-10-30 14:38:33 +08:00
}
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
} else {
[self.roomHeaderView onRoomEntered];
2024-12-20 19:05:43 +08:00
[self.sideMenu onRoomEntered];
2023-10-30 14:38:33 +08:00
[self.menuContainerView onRoomEntered];
[self changeStageViewOnRoomUpdate];
[self.backContainerView onRoomEntered];
2023-08-31 16:51:40 +08:00
[self.littleGameView onRoomEntered];
2023-10-30 14:38:33 +08:00
[self.functionView onRoomEntered];
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
[self.messageContainerView onRoomEntered];
2023-09-01 14:29:14 +08:00
[self.littleGameView onRoomEntered];
2023-10-30 14:38:33 +08:00
[[XPRoomMiniManager shareManager] configRoomInfo:nil];
[[XPRoomMiniManager shareManager] configUserInfo:nil];
[[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO];
}
} else {
view.isPwdError = YES;
}
2023-07-14 18:50:55 +08:00
}
- (void)didClickCancel:(RoomSettingInputType)type {
2023-10-30 14:38:33 +08:00
if (type == RoomSettingInputType_Input_Pwd) {
[self enterRoomFail:0];
}
2023-07-14 18:50:55 +08:00
}
2024-05-11 10:21:48 +08:00
-(NSInteger)getPublicScreenType{
return self.messageContainerView.type;
}
2023-09-12 17:48:18 +08:00
- (void)displayMusicPanel {
[self.functionView showMusicPanel];
}
- (void)updateScreenMessageState:(BOOL)isClose {
self.roomInfo.isCloseScreen = isClose;
}
2023-09-12 17:48:18 +08:00
#pragma mark - XPFirstRechargeViewDelegate
2024-09-12 14:01:12 +08:00
-(void)rechargeHandle{}
2023-09-21 17:44:59 +08:00
-(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;
@kWeakify(self);
2023-09-21 17:44:59 +08:00
[TTPopup alertWithConfig:config confirmHandler:^{
@kStrongify(self);
2023-09-21 17:44:59 +08:00
[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];
});
}
}];
}
2023-07-14 18:50:55 +08:00
- (XPRoomBackContainerView *)backContainerView {
2023-10-30 14:38:33 +08:00
if (!_backContainerView) {
_backContainerView = [[XPRoomBackContainerView alloc] initWithdelegate:self];
}
return _backContainerView;
2023-07-14 18:50:55 +08:00
}
- (RoomHeaderView *)roomHeaderView {
2023-10-30 14:38:33 +08:00
if (!_roomHeaderView) {
_roomHeaderView = [[RoomHeaderView alloc] initWithDelegate:self];
}
return _roomHeaderView;
2023-07-14 18:50:55 +08:00
}
2024-05-11 10:21:48 +08:00
- (MsRoomMessageMainView *)messageContainerView {
2023-10-30 14:38:33 +08:00
if (!_messageContainerView) {
2024-05-11 10:21:48 +08:00
_messageContainerView = [[MsRoomMessageMainView alloc] initWithDelegate:self];
2023-10-30 14:38:33 +08:00
}
return _messageContainerView;
2023-07-14 18:50:55 +08:00
}
- (XPRoomQuickMessageContainView *)quickMessageContainerView {
2023-10-30 14:38:33 +08:00
if(!_quickMessageContainerView) {
_quickMessageContainerView = [[XPRoomQuickMessageContainView alloc] initWithDelegate:self];
}
return _quickMessageContainerView;
2023-07-14 18:50:55 +08:00
}
- (XPRoomMenuContainerView *)menuContainerView {
2023-10-30 14:38:33 +08:00
if (!_menuContainerView) {
_menuContainerView = [[XPRoomMenuContainerView alloc] initWithDelegate:self];
2024-10-12 19:30:41 +08:00
@kWeakify(self);
[_menuContainerView setUpdateHeight:^(CGFloat height) {
@kStrongify(self);
[self.menuContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.mas_equalTo(self.view);
if (iPhoneXSeries) {
make.bottom.mas_equalTo(self.view);
} else {
make.bottom.mas_equalTo(self.view).offset(-10);
}
2024-10-12 19:30:41 +08:00
make.height.mas_equalTo(height + kSafeAreaBottomHeight);
}];
}];
2023-10-30 14:38:33 +08:00
}
return _menuContainerView;
2023-07-14 18:50:55 +08:00
}
2024-12-20 19:05:43 +08:00
- (RoomSideMenu *)sideMenu {
if (!_sideMenu) {
_sideMenu = [[RoomSideMenu alloc] initWithDelegate:self];
2023-10-30 14:38:33 +08:00
}
2024-12-20 19:05:43 +08:00
return _sideMenu;
2023-07-14 18:50:55 +08:00
}
2025-01-15 19:02:58 +08:00
- (RoomAnimationView *)animationView {
2023-10-30 14:38:33 +08:00
if (!_animationView) {
2025-01-15 19:02:58 +08:00
_animationView = [[RoomAnimationView alloc] initWithHostDelegate:self];
2023-10-30 14:38:33 +08:00
}
return _animationView;
2023-07-14 18:50:55 +08:00
}
- (XPRoomFunctionContainerView *)functionView {
2023-10-30 14:38:33 +08:00
if (!_functionView) {
_functionView = [[XPRoomFunctionContainerView alloc] initWithDelegate:self];
2023-10-30 14:38:33 +08:00
}
return _functionView;
2023-07-14 18:50:55 +08:00
}
- (StageView *)stageView {
2023-10-30 14:38:33 +08:00
if (!_stageView) {
_stageView = [[SocialStageView alloc] initWithDelegate:self];
_stageView.alpha = 0;
2023-10-30 14:38:33 +08:00
}
return _stageView;
2023-07-14 18:50:55 +08:00
}
- (TenMicStageView *)tenMicStageView {
if (!_tenMicStageView) {
_tenMicStageView = [[TenMicStageView alloc] initWithDelegate:self];
}
return _tenMicStageView;
}
2024-12-16 19:41:23 +08:00
- (NineteenMicStageView *)nineteenMicStageView {
if (!_nineteenMicStageView) {
_nineteenMicStageView = [[NineteenMicStageView alloc] initWithDelegate:self];
}
return _nineteenMicStageView;
}
- (TwentyMicStageView *)twentyMicStageView {
if (!_twentyMicStageView) {
_twentyMicStageView = [[TwentyMicStageView alloc] initWithDelegate:self];
}
return _twentyMicStageView;
}
- (FifteenMicStageView *)fifteenMicStageView {
if (!_fifteenMicStageView) {
_fifteenMicStageView = [[FifteenMicStageView alloc] initWithDelegate:self];
}
return _fifteenMicStageView;
}
2023-09-01 14:29:14 +08:00
- (XPRoomLittleGameContainerView *)littleGameView {
if (!_littleGameView) {
_littleGameView = [[XPRoomLittleGameContainerView alloc] initWithDelegate:self];
_littleGameView.delegate = self;
}
return _littleGameView;
}
2023-07-14 18:50:55 +08:00
- (AnchorRoomScrollView *)anchorScrollView {
2023-10-30 14:38:33 +08:00
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;
2023-07-14 18:50:55 +08:00
}
- (AnchorRoomSrollTipView *)anchorScrollTipView {
2023-10-30 14:38:33 +08:00
if (!_anchorScrollTipView) {
_anchorScrollTipView = [[AnchorRoomSrollTipView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
}
return _anchorScrollTipView;
2023-07-14 18:50:55 +08:00
}
- (NSMutableArray<NSString *> *)anchorRoomList {
2023-10-30 14:38:33 +08:00
if (!_anchorRoomList) {
_anchorRoomList = [NSMutableArray array];
}
return _anchorRoomList;
2023-07-14 18:50:55 +08:00
}
2023-09-22 15:26:19 +08:00
-(XPFreeGiftsObtainView *)freeView{
if (!_freeView){
_freeView = [[XPFreeGiftsObtainView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
}
return _freeView;
}
2023-10-30 14:38:33 +08:00
- (PIRoomEnterRedPacketView *)redPacketView{
if(!_redPacketView){
_redPacketView = [[PIRoomEnterRedPacketView alloc]initWithFrame:CGRectZero];
_redPacketView.hidden = YES;
_redPacketView.isInRoom = YES;
_redPacketView.delegate = self;
}
return _redPacketView;
}
2023-07-14 18:50:55 +08:00
@end