// // XPRoomViewController.m // xplan-ios // // Created by 冯硕 on 2021/10/11. // #import "XPRoomViewController.h" ///Third #import ///Tool #import "XPMacro.h" #import "AccountInfoStorage.h" ///Model #import "RoomInfoModel.h" #import "UserInfoModel.h" ///View #import "XPRoomActivityContainerView.h" #import "XPRoomBackContainerView.h" #import "XPRoomMenuContainerView.h" #import "XPRoomMessageContainerView.h" #import "XPRoomPositionContainView.h" #import "XPRoomInfoContainerView.h" ///P #import "XPRoomPresenter.h" #import "XPRoomProtocol.h" ///Category #import "XPRoomViewController+RoomInfoContainerView.h" #import "XPRoomViewController+SDKConfig.h" @interface XPRoomViewController () ///背景 @property (nonatomic,strong) XPRoomBackContainerView *backContainerView; ///房间信息 @property (nonatomic,strong) XPRoomInfoContainerView *roomInfoContainerView; ///坑位信息 @property (nonatomic,strong) XPRoomPositionContainView *positionContainerView; ///公屏 @property (nonatomic,strong) XPRoomMessageContainerView *messageContainerView; ///底部操作栏 @property (nonatomic,strong) XPRoomMenuContainerView *menuContainerView; ///活动 @property (nonatomic,strong) XPRoomActivityContainerView *activityContainerView; ///如果是打开房间的话 @property (nonatomic,assign) BOOL isOpenRoom; ///用户信息 @property (nonatomic,strong) UserInfoModel *usereInfo; ///房间信息 @property (nonatomic,strong) RoomInfoModel *roomInfo; @end @implementation XPRoomViewController - (void)dealloc { #warning to do - 时刻注意这个方法 功能做完的时候删除此方法 } - (XPRoomPresenter *)createPresenter { return [[XPRoomPresenter alloc] init]; } - (BOOL)isHiddenNavBar { return YES; } - (void)viewDidLoad { [super viewDidLoad]; [self initSubViews]; [self initSubViewConstraints]; } #pragma mark - Private Method - (void)initSubViews { [self.view addSubview:self.backContainerView]; [self.view addSubview:self.roomInfoContainerView]; [self.view addSubview:self.positionContainerView]; [self.view addSubview:self.messageContainerView]; [self.view addSubview:self.menuContainerView]; [self.view addSubview:self.activityContainerView]; } - (void)initSubViewConstraints { [self.backContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self.view); }]; [self.roomInfoContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.top.mas_equalTo(self.view); make.height.mas_equalTo(kNavigationHeight); }]; [self.positionContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.mas_equalTo(self.view); make.top.mas_equalTo(self.roomInfoContainerView.mas_bottom); make.height.mas_equalTo([self.positionContainerView positionContainerViewHeight]); }]; [self.messageContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.positionContainerView.mas_bottom); make.bottom.equalTo(self.menuContainerView.mas_top).offset(-5); make.left.equalTo(self.view); make.right.equalTo(self.activityContainerView.mas_left).offset(-10); }]; [self.menuContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.mas_equalTo(self.view); make.bottom.mas_equalTo(-kSafeAreaBottomHeight- 8); make.height.mas_equalTo(40); }]; [self.activityContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.messageContainerView); make.right.mas_equalTo(self.view); make.bottom.mas_equalTo(self.menuContainerView.mas_top).offset(-5); make.width.mas_equalTo(80); }]; } ///获取房间信息成功 - (void)requestRoomInfoSuccess:(RoomInfoModel *)roomInfo { [self hideHUD]; self.roomInfo = roomInfo; [self configRoomInfoContainerViewWithRoomInfo:roomInfo]; ///获取房间信息成功之后 就要准备登录云信了 获取确保用户信息存在 if (self.usereInfo == nil) { [self.presenter getUserInfoWithUid:self.roomUid]; } else { [self enterChatRoomWithUseInfo:self.usereInfo]; } } ///dismissVC - (void)disMissRoomVC { if (self.presentingViewController) { [self dismissViewControllerAnimated:YES completion:nil]; } } ///开启房间 - (void)openRoomWithUserInfo { NSString * title = [NSString stringWithFormat:@"%@的房间", self.usereInfo.nick]; [self.presenter openUserRoomWithTitle:title type:RoomType_Game roomPwd:@"" roomDesc:@"" backPic:@""]; } - (void)enterChatRoomWithUseInfo:(UserInfoModel *)userInfo { ///进入房间的时候 必须要有用户信息 并且房间状态一切正常 #warning to do - 进入云信房间的逻辑 [self configEnterRoomSDK]; } #pragma mark - XPRoomProtocol - (void)getRoomInfoSuccess:(RoomInfoModel *)roomInfo { NSString * uid = [AccountInfoStorage instance].getUid; if ([self.roomUid isEqualToString:uid]) {///如果是自己进入房间的话 if (roomInfo == nil || roomInfo.valid) { self.isOpenRoom = YES; if (self.usereInfo) { [self openRoomWithUserInfo]; } else { [self.presenter getUserInfoWithUid:uid]; } } else { [self requestRoomInfoSuccess:roomInfo]; } } else {///如果是进入别人房间的话 if (roomInfo.valid) { if (roomInfo.roomPwd.length > 0) { [self hideHUD]; #warning to do - 输入密码 } else { [self requestRoomInfoSuccess:roomInfo]; } } else { #warning to do - 房主已下线 [self hideHUD]; } } } - (void)getRoomInfoFail { [self hideHUD]; [self disMissRoomVC]; } - (void)getUserInfoSuccess:(UserInfoModel *)userInfo { self.usereInfo = userInfo; if (self.isOpenRoom) { [self openRoomWithUserInfo]; } else { if (self.roomInfo) { [self enterChatRoomWithUseInfo:userInfo]; } } } - (void)getUserInfoFail { [self hideHUD]; [self disMissRoomVC]; } - (void)openRoomSuccess:(RoomInfoModel *)roomInfo { [self requestRoomInfoSuccess:roomInfo]; } - (void)openRoomFail { [self hideHUD]; [self disMissRoomVC]; } #pragma mark - Getters And Setters - (void)setRoomUid:(NSString *)roomUid { _roomUid = roomUid; if (_roomUid) { [self showLoading]; ///获取用户信息 [self.presenter getUserInfoWithUid:_roomUid]; ///获取房间信息 [self.presenter getRoomInfoWithUid:_roomUid]; } } - (XPRoomBackContainerView *)backContainerView { if (!_backContainerView) { _backContainerView = [[XPRoomBackContainerView alloc] init]; } return _backContainerView; } - (XPRoomInfoContainerView *)roomInfoContainerView { if (!_roomInfoContainerView) { _roomInfoContainerView = [[XPRoomInfoContainerView alloc] init]; _roomInfoContainerView.delegate = self; } return _roomInfoContainerView; } - (XPRoomPositionContainView *)positionContainerView { if (!_positionContainerView) { _positionContainerView = [[XPRoomPositionContainView alloc] init]; } return _positionContainerView; } - (XPRoomMessageContainerView *)messageContainerView { if (!_messageContainerView) { _messageContainerView = [[XPRoomMessageContainerView alloc] init]; } return _messageContainerView; } - (XPRoomMenuContainerView *)menuContainerView { if (!_menuContainerView) { _menuContainerView = [[XPRoomMenuContainerView alloc] init]; } return _menuContainerView; } - (XPRoomActivityContainerView *)activityContainerView { if (!_activityContainerView) { _activityContainerView = [[XPRoomActivityContainerView alloc] init]; } return _activityContainerView; } @end