1. 描述
发送消息失败时,不直接显示红色叹号,而是显示发送中,等到 IM 连接成功时,自动重发。
2. 重新发送逻辑
sequenceDiagram
App->>Lib: 发送消息
Lib-->>Lib: 消息发送失败
Lib-->>Lib: 符合重发条件消息加入重发队列
Lib-->>App: 消息发送失败
App-->>App: 消息在重发队列中,显示发送中的菊花
Lib-->>App: IM 连接成功
Lib-->>Lib: 启动重发队列
Lib-->>App: 消息发送成功
App-->>App: 消息 UI 更新
2.1 发送时如果是符合重新发送的情况(当前连接状态),会将 Message 添加到 ResendManager 的字典中
- (void)addResendMessageIfNeed:(long)messageId error:(ErrorCode)code;
2.2 MessageCell 对应 UI 展示时根据消息是否需要重新发送(ResendManager needResend)来展示发送中(菊花)
需要查看消息 Cell 的处理
2.3 ResendManager 监听 IM 连接状态,连接时遍历字典重新发送,第一条发送成功后才会发送第二条
连接成功后,如果不是重发中,开始重新发送
2.4 重新发送成功时或者取消时 将 Message 从字典中移除
- (void)removeResendMessage:(long)messageId;