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