Files
peko-ios/PublicRoomMessageForward_Implementation.md

87 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 公共房间消息转发功能实现
## 功能概述
实现了从 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. 或者使用更通用的通知名称,在通知数据中携带消息类型信息