接收消息

更新时间: 2022/10/31 07:43:30

本文主要介绍如何通过 NERoom SDK 在房间内实现聊天室消息的接收。

功能介绍

消息类型

类型
描述
文本消息 文本消息的内容是文本,可以包含超链接、emoji 表情符号等。表情消息是基于文本消息实现的。 文本消息大小限制为 5 KB。
多媒体消息 多媒体消息包括文件消息和图片消息。
自定义消息 开发者自定义的消息类型,例如红包消息、石头剪子布等形式的消息。

功能原理

消息收发.png

消息收发流程如下

  1. 房间内的用户 A 发送一条消息到云信的 NERoom IM 服务器。
  2. IM服务器投递给房间内聊天室内的其他成员。如果消息为广播消息,则全员投递,如果为定向消息,则仅投递指定的成员。
  3. 目标用户收到消息。

注意事项

  • 用户只有加入聊天室后,才能接收消息。
  • 本版本支持文本消息、图片消息和文件消息,不支持语音消息、视频消息等其他类型的消息。

接收文本消息

配置步骤

  1. 调用 getRoomContext 方法获取房间上下文。

    调用此方法时,您需要将 roomUid 设置为您所加入房间的 ID。

  2. 调用 joinChatroom 方法加入聊天室。

  3. 添加消息接收的监听。

示例代码

实现接收文本消息的示例代码如下:

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);
}

接收图片、文件消息

配置步骤

  1. 调用如下接口添加消息接收的监听以及消息附件下载进度监听。

    void addRoomListener(INERoomListener* listener)
    
  2. 在消息回调中对接收到的消息过滤出图片、文件消息。

    void onReceiveChatroomMessages(const std::vector<SharedChatMessagePtr>& messages)
    
    名称 类型 描述
    message NERoomChatMessage 消息的相关信息
  3. 调用接口进行消息附件的下载。

    void downloadAttachment(const std::string& messageUuid, const std::string& fileUrl, const std::string& filePath, const NERoomChatCallback& callback)
    
  4. (可选)调用接口进行取消下载消息附件。

    void cancelDownloadAttachment(const std::string& messageUuid, const NERoomChatCallback& callback)
    
  5. 通过消息附件上传/下载进度的回调,监听进度。

    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 取消下载图片、文件消息的附件
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 消息类型
  • 功能原理
  • 注意事项
  • 接收文本消息
  • 配置步骤
  • 示例代码
  • 接收图片、文件消息
  • 配置步骤
  • 示例代码
  • 相关API文档