本文介绍会话模型,会话管理和群聊会话的实现流程。

会话分为单聊和群聊,群聊是单聊会话的扩展。

会话模型

群聊是单聊会话的扩展,模型中有大部分字段是公用的,部分字段只用于单聊或者只用于群聊。

字段 类型 描述 具体类型
created_at int64_t 会话创建服务端时间。
appCid std::string 会话id。
type AIMConvType 会话类型。
  • 单聊。
  • 群聊。
enum AIMConvType{
    CONV_TYPE_UNKNOW= -1,//未知类型
    CONV_TYPE_SINGLE= 1,//单聊
    CONV_TYPE_GROUP= 2,//群聊
 };
status AIMConvStatus 会话状态。
  • 可见。
  • 隐藏。
enum AIMConvStatus{
    CONV_STATUS_UNKNOW = -1,
    CONV_STATUS_HIDE = 0,
    CONV_STATUS_NORMAL = 1,
    CONV_STATUS_OFFLINE = 2,
    CONV_STATUS_KICKED = 3,
    CONV_STATUS_DISMISSED = 4,
};
last_msg Message 会话最后一条消息。
red_point int32_t 未读消息数。
draft std::string 草稿内容。
extension std::map<std::string,std::string> 扩展信息。
user_extension std::map<std::string,std::string> user维度会话扩展信息。
local_extension std::map<std::string,std::string> 本地Extras数据,业务自定义。
mute_notification bool 消息通知设置。
  • true:关闭消息通知。
  • false:开启消息通知。
top_rank int64_t 获取会话置顶排序。数值越大,越靠前,等于0时表示未置顶。
modify_time int64_t 获取会话最后更新时间,拉取会话列表时SDK会根据此字段排序。

目前影响该属性变更的是lastMessage的修改和置顶。

join_time int64_t 会话加入事件。主要用于群聊。
userids std::string 单聊对方和自己的uid。单聊独有参数,群成员不在此,有单独结构。
title std::string 群会话标题。群聊独有参数。
owner_uid std::string 群主的uid。群聊独有参数。
icon std::string 群头像。群聊独有参数。
silence_all bool 群是否开启禁言。群聊独有参数。
silenced_status AIMGroupSilencedStatus 禁言状态,比如是否在禁言黑白名单。群聊独有参数。
enum AIMGroupSilencedStatus:
{
    GROUP_SILENCE_STATUS_NORMAL = 0,
    GROUP_SILENCE_STATUS_IN_WHITELIST = 1,
    GROUP_SILENCE_STATUS_IN_BLACKLIST = 2,
};
silenced_endtime int64_t 禁言截止时间。群聊独有参数。
admins std::string 群管理员uid。群聊独有参数。
member_permissions std::vector<AIMGroupPermission> 群成员权限,比如群成员是否可以改标题头像。群聊独有参数。 AIMGroupPermission类型

会话管理

  • 创建会话

    可通过AIMConvService类中的CreateSingleConversation接口创建会话,CreateSingelConvParam包含创建会话时相关的参数。

    表 1. 基础参数
    字段 类型 描述 是否必填
    cid std::string 支持使用客户端自己设置cid
    uids std::string 自己和对方的uid
    cid std::string 会话cid
    biz_type std::string 业务类型
    ext std::map<std::string, std::string> 会话扩展属性
    ctx std::map<std::string, std::string> 创建会话的扩展上下文信息 上下文信息
    表 2. 相关接口
    接口 描述
    CreateSingleConversation 创建单聊会话。
    ImportConversations 导入会话列表。
  • 获取会话及会话列表

    可通过AIMPubConvService类中的listConversations接口获取会话列表。getConversation获取单个会话,getConversations获取制定会话列表。

    表 3. 相关接口
    接口 描述
    ListLocalConversations 获取会话列表。
    ListAllStatusLocalConvs 获取本地会话列表,包括所有状态的会话,包括隐藏的会话。
    GetSingleConversations 根据user_id获取对应的会话列表集合。
    GetConversation 获取会话ID对应的会话。
    GetConversations 获取会话cid集合对应的会话列表。

    先从本地获取,如果本地不存在,会通过RPC拉取。

    GetLocalConversations 获取本地的会话集合。
    GetRemoteConversations 强制拉取远端会话。并且会刷新本地缓存和DB。
  • 删除(隐藏)会话

    可通过AIMConversationService类中的Hide接口删除会话列表。

    这里是逻辑删除,会话状态变为Hide,如果会话有新消息时会话状态恢复到Normal。RemoveLocalConversation只是物理删除DB,并且会删除会话对应的所有消息,不会发送RPC同步服务端。一般情况下都是用Hide,除非客户端需要删除会话表中的数据。
    说明 隐藏会话不会删除相关消息,RemoveLocalConversation会删除。
    表 4. 相关接口
    接口 描述
    Hide 隐藏会话。
    RemoveLocalConversation 物理删除本地会话和消息。
    HideBatch 批量隐藏会话(最大值1000个)。
  • 会话更新

    单独更新会话的字段,除了本地字段都会同步服务端。

    表 5. 相关接口
    接口 描述
    UpdateTypingStatus 发送正在输入消息事件给接收方。
    UpdateDraftMessage 更新草稿,草稿只在本地存储。
    UpdateLocalExtension 全量更新本地extension数据,只在本地存储。
    Mute 更新会话是否免打扰。
    SetTop 会话置顶。
    Clear 清空会话所有消息。
    ClearRedPoint 清除会话红点。
  • 激活会话

    选中当前会话时,设置SetActiveCid,active会话不会记未读数,当会话窗口未激活或者最小化之类的情况下,SetActiveCid传空,一般和ClearRedPoint一起使用。

会话变更事件

通过AIMPubConvListListener和AIMPubConvChangeListener中的函数回调上层通知会话相关结构的变更,这两个Listener在AIMPubConversationService中注册。

群聊会话

群聊会话是会话的扩展,model还是沿用会话model,群聊的扩展能力由AIMGroupService提供。

  • 创建群聊会话

    可通过类AIMGroupService中的CreateGroupConversation接口创建群聊会话,CreateGroupConvParam包含创建会话时相关的参数。

    表 6. 群聊参数
    字段 类型 描述 是否必填
    uids std::string 群成员uid。
    title std::string 群聊标题。
    icon std::string 群聊会话Icon。
    biz_type std::string 业务类型。
    ext std::map<std::string, std::string> 会话扩展属性。
    ctx std::map<std::string, std::string> 创建会话的扩展上下文信息。 上下文信息
    表 7. 相关接口
    接口 描述
    CreateGroupConversation 创建群聊会话。
  • 群聊会话成员操作
    表 8. AIMGroupLeave
    字段 类型 描述 是否必填
    cid std::string 群cid。
    表 9. AIMGroupUserInfo
    字段 类型 描述 是否必填
    nick_name std::string 昵称。
    uid std::string uid。
    表 10. AIMGroupJoin和AIMGroupKick
    字段 类型 描述 是否必填
    cid std::string 群cid。
    users std::vector<AIMGroupUserInfo> 群成员的集合。
    表 11. 相关接口
    接口 描述
    Leave 退出群。
    ListLocalMembers 拉取本地群成员。
    ListAllMembers 拉取群成员。
    AddMembers 添加群成员。
    RemoveMembers 删除群成员。

群聊会话变更事件

通过AIMGroupChangeListener和AIMGroupMemberChangeListener中的函数回调上层通知会话相关结构的变更,这两个Listener在AIMGroupService中注册。