Files
yinmeng-ios-store/yinmeng-ios/DingDangApp/CodeClass/Room/View/PublicMessage/RoomPublicMessageView.m

340 lines
15 KiB
Mathematica
Raw Normal View History

2023-12-07 10:50:21 +08:00
//
// RoomPublicScreenView.m
// DingDangApp
//
// Created by apple on 2023/5/27.
//
#import "RoomPublicMessageView.h"
#import "RoomPublicScreenTextCell.h"
#import "RoomPublicScreenCell.h"
#import "RoomPublicScreenEmojiCell.h"
#import "RoomPublicScreenGiftCell.h"
#import "RoomPublicScreenModel.h"
2023-12-14 16:53:04 -08:00
#import "DDClientConfig.h"
2023-12-07 10:50:21 +08:00
2023-12-14 16:53:04 -08:00
static NSInteger kRoomMessageMaxLength = 1000;
2023-12-07 10:50:21 +08:00
@interface RoomPublicMessageView () <UITableViewDelegate, UITableViewDataSource>
/****/
@property (nonatomic, strong) UITableView *tableView;
2023-12-14 16:53:04 -08:00
@property (nonatomic, strong) RoomInfoModel *roomInfo;
///
//@property (nonatomic,strong) NSMutableArray<message *> *datasource;
///
//@property (nonatomic,strong) NSMutableArray<XPMessageInfoModel *> *datasource;
2023-12-07 10:50:21 +08:00
@end
@implementation RoomPublicMessageView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initWithSubView];
2023-12-14 16:53:04 -08:00
2023-12-07 10:50:21 +08:00
} return self;
}
- (void)initWithSubView {
[self addSubview:self.tableView];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self).inset(0);
}];
}
- (void)refreshTableView {
[self.tableView reloadData];
if ([self.dataArr count] > 0) {
NSInteger toRow = self.dataArr.count - 1;
NSIndexPath *toIndexPath = [NSIndexPath indexPathForRow:toRow inSection:0];
NSInteger rows = [self.tableView numberOfRowsInSection:0];
if (toRow < rows) {
[self.tableView scrollToRowAtIndexPath:toIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}else{
NSLog(@"越界了。。。");
}
}
}
2023-12-14 16:53:04 -08:00
- (void)roomInfo:(RoomInfoModel *)roomInfo {
self.roomInfo = roomInfo;
}
- (void)handleRecvMessages:(NIMMessage *)message {
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
if (content.eventType == NIMChatroomEventTypeEnter) {
NIMChatroomNotificationMember *member = content.targets[0];
if (member.userId.integerValue == [AccountInfoStorage instance].getUid.integerValue) {
[self handleFetchHistoryMessage:message];
}
}
}
- (void)handleFetchHistoryMessage:(NIMMessage *)message {
NSString *roomId = [NSString stringWithFormat:@"%ld", self.roomInfo.roomId];
NIMHistoryMessageSearchOption *option = [[NIMHistoryMessageSearchOption alloc] init];
option.limit = [DDClientConfig shareConfig].configInfo.roomMessageCount;
option.startTime = self.roomInfo.clearScreenTime / 1000.0;
option.order = NIMMessageSearchOrderAsc;
option.messageTypes = @[@(NIMMessageTypeText)];
[[NIMSDK sharedSDK].chatroomManager fetchMessageHistory:roomId option:option result:^(NSError * _Nullable error, NSArray<NIMMessage *> * _Nullable messages) {
if (messages.count) {
//50
if (messages.count == [DDClientConfig shareConfig].configInfo.roomMessageCount) {
NIMHistoryMessageSearchOption *option = [[NIMHistoryMessageSearchOption alloc] init];
option.limit = [DDClientConfig shareConfig].configInfo.roomMessageCount;
option.order = NIMMessageSearchOrderDesc;
option.messageTypes = @[@(NIMMessageTypeText)];
[[NIMSDK sharedSDK].chatroomManager fetchMessageHistory:roomId option:option result:^(NSError * _Nullable error, NSArray<NIMMessage *> * _Nullable messages) {
if (self.dataArr.count > kRoomMessageMaxLength) {
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)];
NSArray *needRemoveMsgArray = [self.dataArr objectsAtIndexes:set];
[self.dataArr removeObjectsInArray:needRemoveMsgArray];
}
//
// for (NIMMessage *item in messages.reverseObjectEnumerator) {
// [self.dataArr addObject:[self.messageParser parseMessageAttribute:item]];
// if (!self.isMiniEnter) { ///
// if (self.roomInfo.isCloseScreen) {
// NIMCustomObject *obj = (NIMCustomObject *)item.messageObject;
// if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
// AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
// if (attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_MessageState){
// [[XPRoomMiniManager shareManager] saveRoomMessage:item];
// }
// }
// } else {
// [[XPRoomMiniManager shareManager] saveRoomMessage:item];
// }
// }
// }
// [self.messageTableView reloadData];
// //
// [self scrollToBottom:YES];
// BOOL hideEnter = [self handleHideEnter:message];
// if (!hideEnter) {
// ///
// [self addRoomMessage:message];
// }
// if (!roomInfo.hasAnimationEffect) {
// [self roomInfoNoGiftAnimationMessage:message];
// }
// [self createUserEnterRoomAddRoomtopicMessage];
}];
// return;
}
if (self.dataArr.count > kRoomMessageMaxLength) {
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)];
NSArray *needRemoveMsgArray = [self.dataArr objectsAtIndexes:set];
[self.dataArr removeObjectsInArray:needRemoveMsgArray];
}
//
for (NIMMessage *item in messages) {
// [RoomPublicScreenModel initMessage:<#(nonnull NSString *)#> user:<#(nonnull UserInfoModel *)#> other_user:<#(nonnull UserInfoModel *)#> giftModel:<#(nonnull DDGiftWallModel *)#> message_type:<#(NSInteger)#> handle_type:<#(NSInteger)#>]
// self.dataArr addObject:<#(nonnull id)#>
// [self.dataArr addObject:[self.messageParser parseMessageAttribute:item]];
// if (!self.isMiniEnter) {///
// if (self.hostDelegate.getRoomInfo.isCloseScreen) {
// NIMCustomObject *obj = (NIMCustomObject *)item.messageObject;
// if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
// AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
// if (attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_MessageState){
// [[XPRoomMiniManager shareManager] saveRoomMessage:item];
// }
// }
// } else {
// [[XPRoomMiniManager shareManager] saveRoomMessage:item];
// }
// }
}
// [self.messageTableView reloadData];
// //
// [self scrollToBottom:YES];
}
}];
}
2023-12-07 10:50:21 +08:00
#pragma mark --- UITableViewDelegate || UITableViewDataSource ---
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
2023-12-14 15:38:53 -08:00
return 10;
// return self.dataArr.count;
2023-12-07 10:50:21 +08:00
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (![ToolsObject IsNullWithObject:self.dataArr]) {
RoomPublicScreenModel *model;
if (indexPath.row < [self.dataArr count]) {
model = self.dataArr[indexPath.row];
if (!model) {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
if (model.msg_type == 1 ||
model.msg_type == 2 ||
model.msg_type == 6 ||
model.msg_type == 7 ) {//
RoomPublicScreenTextCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RoomPublicScreenTextCell"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (indexPath.row < self.dataArr.count) {
cell.model = self.dataArr[indexPath.row];
WeakSelf(ws);
cell.cellTapGesActionBlock = ^(RoomUserInfoModel * _Nonnull userModel) {
if (ws.cellTapGesActionBlock) {
ws.cellTapGesActionBlock(userModel);
}
};
}
return cell;
}
if (model.msg_type == 3) {//
RoomPublicScreenCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RoomPublicScreenCell"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (indexPath.row < self.dataArr.count) {
cell.model = self.dataArr[indexPath.row];
WeakSelf(ws);
cell.cellTapGesActionBlock = ^(RoomUserInfoModel * _Nonnull userModel) {
if (ws.cellTapGesActionBlock) {
ws.cellTapGesActionBlock(userModel);
}
};
}
return cell;
}
if (model.msg_type == 5) {//
RoomPublicScreenEmojiCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RoomPublicScreenEmojiCell"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (indexPath.row < self.dataArr.count) {
cell.model = self.dataArr[indexPath.row];
WeakSelf(ws);
cell.cellTapGesActionBlock = ^(RoomUserInfoModel * _Nonnull userModel) {
if (ws.cellTapGesActionBlock) {
ws.cellTapGesActionBlock(userModel);
}
};
}
return cell;
}
if (model.msg_type == 4 || model.msg_type == 8) {//
RoomPublicScreenGiftCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RoomPublicScreenGiftCell"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (indexPath.row < self.dataArr.count) {
cell.model = self.dataArr[indexPath.row];
WeakSelf(ws);
cell.cellTapGesActionBlock = ^(RoomUserInfoModel * _Nonnull userModel) {
if (ws.cellTapGesActionBlock) {
ws.cellTapGesActionBlock(userModel);
}
};
}
return cell;
}
}
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
2023-12-14 15:38:53 -08:00
cell.textLabel.text = @"测试展示公屏";
2023-12-07 10:50:21 +08:00
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
2023-12-14 15:38:53 -08:00
// if (indexPath.row < [self.dataArr count]) {
// RoomPublicScreenModel * model = self.dataArr[indexPath.row];
// return model.cellH;
// }else{
return 40;
// }
2023-12-07 10:50:21 +08:00
}
2023-12-14 16:53:04 -08:00
///
//- (void)appendAndScrollToBottom {
// if (self.incomingMessages.count < 1) {
// ///atincomeatatat
// [self scrollToBottom:YES];
// return;
// }
//
// if (self.datasource.count > kRoomMessageMaxLength) {
// NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)];
// NSArray *needRemoveMsgArray = [self.datasource objectsAtIndexes:set];
// [self.datasource removeObjectsInArray:needRemoveMsgArray];
// }
//
// //
// NSMutableArray *indexPaths = [NSMutableArray array];
// for (NIMMessage *item in self.incomingMessages) {
// [self.datasource addObject:[self.messageParser parseMessageAttribute:item]];
// [indexPaths addObject:[NSIndexPath indexPathForRow:self.datasource.count - 1 inSection:0]];
// }
// [self.incomingMessages removeAllObjects];
// [self.messageTableView reloadData];
//
// //
// [self scrollToBottom:YES];
//}
2023-12-07 10:50:21 +08:00
#pragma mark ------ ------
- (UITableView *)tableView {
if (!_tableView) {
_tableView = [UITableView new];
_tableView.backgroundColor = UIColor.clearColor;
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.delaysContentTouches = NO;
_tableView.canCancelContentTouches = YES;
_tableView.estimatedRowHeight = 0;
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;
_tableView.showsVerticalScrollIndicator = NO;
_tableView.showsHorizontalScrollIndicator = NO;
2023-12-14 15:38:53 -08:00
// _tableView.rowHeight = 40;
2023-12-07 10:50:21 +08:00
if (@available(iOS 11.0, *)) {
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
_tableView.tableFooterView = [UIView new];
if (@available(iOS 15.0, *)) {
_tableView.sectionHeaderTopPadding = 0;
} else {
// Fallback on earlier versions
}
_tableView.delegate = self;
_tableView.dataSource = self;
[_tableView registerClass:NSClassFromString(@"RoomPublicScreenTextCell") forCellReuseIdentifier:@"RoomPublicScreenTextCell"];
[_tableView registerClass:NSClassFromString(@"RoomPublicScreenCell") forCellReuseIdentifier:@"RoomPublicScreenCell"];
[_tableView registerClass:NSClassFromString(@"RoomPublicScreenEmojiCell") forCellReuseIdentifier:@"RoomPublicScreenEmojiCell"];
[_tableView registerClass:NSClassFromString(@"RoomPublicScreenGiftCell") forCellReuseIdentifier:@"RoomPublicScreenGiftCell"];
} return _tableView;
}
@end