乐趣区

关于im:如何利用融云-IMLib-来实现一个阅后即焚功能

场景

我的项目须要在私聊中来实现一个阅后即焚的性能,即 A 用户给 B 用户发送音讯,B 用户在进入聊天页面查看之后 A 用户删除此音讯,B 用户开始进入倒计时,倒计时完结后,删除此音讯。

思考

  1. 大体的梳理一下具体的逻辑

    • A -> B
    • B 进入会话页面
    • B 将此音讯开始倒计时
    • 告诉 A 我已进行浏览
    • A 删除音讯
  2. 从下面内容咱们来大体的设计一下咱们须要用户的技术

    • 单例类
    • 自定义音讯,用来通知 A 我曾经开始浏览了,你删除吧
    • 一个用于保护阅后即焚音讯的治理类
    • 一个存储 A 给 B 发送的所有的阅后即焚的音讯的容器 A <k, v> k 为 targetid ,v 为 messageIDs
    • 一个存储每条阅后即焚音讯的容器 B <k,v> k 为 messageId, v 为以后音讯还剩的倒计时工夫。
    • 一个用来存储所有阅后即焚音讯的容器 C K:ID V:msg
    • 两个解决队列 一个解决工夫 一个解决音讯
  3. 对外裸露接口

    • 代理 接管方焚烧音讯的每秒倒计时
    • 告诉 接管方收到对方已浏览某条音讯的告诉

详解

  1. 初始化咱们的所有容器
  2. 收到音讯,在适合的业务机会将此音讯退出到焚烧队列
  3. 查问音讯是否曾经在焚烧队列
  4. 如果不在,增加到 A B C 容器
  5. 执行倒计时

倒计时操作

  1. 遍历 C 是否有音讯
  2. 给发送方发送音讯,告诉我曾经开始焚烧 A 里的音讯了 并在 A 容器删除此会话
  3. 发送方收到音讯发送告诉
  4. 接管方遍历 B 容器,判断每条音讯是否到时
  5. 如果音讯焚烧工夫到 在 A、B 容器删除,并触发代理
  6. 如果没到工夫,就触发代理并批改 此音讯在 B 容器的时长。
退出移动版