新增公共房间消息转发通知常量,并在相关管理器和视图控制器中实现消息转发逻辑,优化公共房间消息处理流程,提升代码可读性和功能性。

This commit is contained in:
edwinQQQ
2025-08-12 18:50:43 +08:00
parent 505472b073
commit 2867c7ddb5
6 changed files with 150 additions and 1 deletions

View File

@@ -0,0 +1,86 @@
# 公共房间消息转发功能实现
## 功能概述
实现了从 PublicRoomManager 转发特定消息到房间中的功能。当 PublicRoomManager 接收到 attachment.first 为 106 的消息时,会自动转发到当前活跃的房间中。
## 实现方案
### 1. 通知机制
- 使用 NSNotificationCenter 进行消息转发
- 通知名称:`@"MessageFromPublicRoomWithAttachmentNotification"`
- 通知对象NIMMessage 对象
### 2. 修改的文件
#### PublicRoomManager.m
-`onRecvMessages:` 方法中添加转发逻辑
- 当检测到 `attachment.first == 106` 时发送通知
#### XPRoomViewController.m
-`setupNotifications` 方法中注册通知监听
- 添加 `handlePublicRoomMessageForward:` 方法处理转发的消息
-`dealloc` 中自动移除通知监听
#### YUMIConstant.m
- 添加常量定义:`kMessageFromPublicRoomWithAttachmentNotification`(已添加但当前使用字符串字面量)
#### XPRoomViewController.h
- 添加常量声明(已添加但当前使用字符串字面量)
## 使用流程
1. **消息接收**PublicRoomManager 接收到公共房间消息
2. **类型检查**:检查 attachment.first 是否为 106
3. **发送通知**:如果是 106 类型,发送转发通知
4. **接收处理**XPRoomViewController 接收通知并处理
5. **消息显示**:通过现有的消息处理流程显示在房间中
## 代码示例
### 发送通知PublicRoomManager.m
```objective-c
if (attachment && attachment.first == 106) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"MessageFromPublicRoomWithAttachmentNotification"
object:message];
NSLog(@"PublicRoomManager: 转发106类型消息到房间");
}
```
### 接收处理XPRoomViewController.m
```objective-c
- (void)handlePublicRoomMessageForward:(NSNotification *)notification {
NIMMessage *message = notification.object;
if (![message isKindOfClass:[NIMMessage class]]) {
return;
}
// 检查房间是否处于活跃状态
if (!self.roomInfo || !self.messageContainerView) {
return;
}
// 使用现有的消息处理流程
[self.messageContainerView handleNIMCustomMessage:message];
}
```
## 测试场景
1. **正常转发**公共房间收到106类型消息时正确转发
2. **房间状态**:房间最小化、关闭等状态下的处理
3. **消息过滤**:确保转发的消息经过正确的过滤流程
4. **性能影响**:确保不影响现有消息处理性能
## 注意事项
1. 消息会经过现有的 `isCanDisplayMessage` 过滤
2. 支持最小化房间的特殊处理
3. 自动处理内存管理(在 dealloc 中移除监听)
4. 包含完整的错误检查和日志记录
## 扩展性
如果将来需要转发其他类型的消息,可以:
1. 修改条件判断(如 `attachment.first == 107`
2. 或者使用更通用的通知名称,在通知数据中携带消息类型信息