接收消息
更新时间: 2022/10/31 07:43:30
本文主要介绍如何通过 NERoom SDK 在房间内实现聊天室消息的接收。
功能介绍
消息类型
类型 |
描述 |
---|---|
文本消息 | 文本消息的内容是文本,可以包含超链接、emoji 表情符号等。表情消息是基于文本消息实现的。 文本消息大小限制为 5 KB。 |
多媒体消息 | 多媒体消息包括文件消息和图片消息。 |
自定义消息 | 开发者自定义的消息类型,例如红包消息、石头剪子布等形式的消息。 |
功能原理
消息收发流程如下:
- 房间内的用户 A 发送一条消息到云信的 NERoom IM 服务器。
- IM服务器投递给房间内聊天室内的其他成员。如果消息为广播消息,则全员投递,如果为定向消息,则仅投递指定的成员。
- 目标用户收到消息。
注意事项
- 用户只有加入聊天室后,才能接收消息。
- 本版本支持文本消息、图片消息和文件消息,不支持语音消息、视频消息等其他类型的消息。
接收文本消息
配置步骤
-
调用
getRoomContext
方法获取房间上下文。调用此方法时,您需要将 roomUid 设置为您所加入房间的 ID。
-
调用
joinChatroom
方法加入聊天室。 -
添加消息接收的监听。
示例代码
实现接收文本消息的示例代码如下:
auto context = m_pRoomKit->getRoomService()->getRoomContext(roomUuid);
if(context){
context->getChatController()->joinChatroom();
}
// 添加房间事件监听
class NERoomListener : public INERoomListener {
public:
NERoomListener();
virtual void onReceiveChatroomMessages(const std::list<NERoomMessage>& messages) override;
};
if(context){
auto listener = new NERoomListener();
context->registerListener(listener);
}
接收图片、文件消息
配置步骤
-
调用如下接口添加消息接收的监听以及消息附件下载进度监听。
void addRoomListener(INERoomListener* listener)
-
在消息回调中对接收到的消息过滤出图片、文件消息。
void onReceiveChatroomMessages(const std::vector<SharedChatMessagePtr>& messages)
名称 类型 描述 message NERoomChatMessage 消息的相关信息 -
调用接口进行消息附件的下载。
void downloadAttachment(const std::string& messageUuid, const std::string& fileUrl, const std::string& filePath, const NERoomChatCallback& callback)
-
(可选)调用接口进行取消下载消息附件。
void cancelDownloadAttachment(const std::string& messageUuid, const NERoomChatCallback& callback)
-
通过消息附件上传/下载进度的回调,监听进度。
void onChatroomMessageAttachmentProgress(const std::string& messageUuid, int64_t transferred, int64_t total)
示例代码
实现接收图片和文件消息的示例代码如下:
auto context = m_pRoomKit->getRoomService()->getRoomContext(roomUuid);
if(context){
context->getChatController()->joinChatroom();
}
// 添加房间事件监听
class NERoomListener : public INERoomListener {
public:
NERoomListener();
virtual void onReceiveChatroomMessages(const std::list<NERoomMessage>& messages) override {
for (auto& message : messages) {
if (message->messageType() == kNERoomMessageTypeText) {
// 文本消息
auto chatTextMsg = std::dynamic_pointer_cast<INERoomChatTextMessage>(message);
} else if (message->messageType() == kNERoomMessageTypeFile) {
// 文件消息
auto fileMsg = std::dynamic_pointer_cast<INERoomChatFileMessage>(message);
} else if (message->messageType() == kNERoomMessageTypeImage) {
// 图片消息
auto imageMsg = std::dynamic_pointer_cast<INERoomChatImageMessage>(message);
}
}
}
};
if(context){
auto listener = new NERoomListener();
context->registerListener(listener);
}
相关API文档
方法 | 功能描述 |
---|---|
onReceiveChatroomMessages |
需要先joinChatroom加入聊天室,才能收到聊天室消息。 |
onChatroomMessageAttachmentProgress |
监听图片、文件消息的附件下载进度 |
downloadAttachment |
下载图片、文件消息的附件 |
cancelDownloadAttachment |
取消下载图片、文件消息的附件 |
此文档是否对你有帮助?