第46节 RFC:User interface design
❤️💕💕记录sealos开源项目的学习过程。k8s,docker和云原生的学习。Myblog:http://nsddd.top
[TOC]
驱动
LongConnMgr:负责所有ws网络相关:(内部双协程,分别处理收发消息) (1)发起连接与重连(连接成功或失败,通知某些处理单元做数据同步操作,触发回调到UI层);
(2)关闭连接; (3)发送与接收ws消息(包括发送响应消息与推送消息); (5)连接状态管理; (6)定时触发心跳,以获取seq作为心跳,在连接检测的同时获取最新seq,并且传递给MsgSync协程 MsgSync 负责 同步最新的消息以及处理推送消息,以及最大seq消息:(独立协程) (1)初始化同步最新消息; (2)针对push消息,以及最大seq消息处理,确保消息连续有序; friend、group、user 管理数据单元: (1)分别负责本地数据和服务端数据对比,及回调; (2)存储、修改、读取本地db; (3)提供提供相关接口共外部调用; Conversation 管理消息及会话单元:(独立协程) (1)负责消息的创建与发送,处理,存储与触发; (1)负责会话生成,更新,删除,并触发; (2)根据通知消息调用相应的管理数据单元同步逻辑 (3)针对消息及会话,提供提供相关接口供外部调用(以channel通信方式)
接口定义
// Caller is an interface that defines the SDK's basic and message sending caller.
type Caller interface {
// BaseCaller calls the SDK's basic caller by checking the arguments and verifying the callback.
BaseCaller(funcName interface{}, base open_im_sdk_callback.Base, args ...interface{})
// SendMessageCaller sends a message by calling the SDK's message sender.
SendMessageCaller(funcName interface{}, messageCallback open_im_sdk_callback.SendMsgCallBack, args ...interface{})
}
BaseCaller 已经存在,它的逻辑是:
- 首先,检查参数的数量是否正确,并获取操作ID。
- 然后,检查资源是否加载完成,如果没有完成,则返回一个错误。
- 最后,使用反射调用函数,将回调和参数传递给该函数,并在不同的协程中运行该函数。
- 如果出现恐慌,将恐慌转换为字符串并通过回调返回其错误。
END 链接
✴️版权声明 © :本书所有内容遵循CC-BY-SA 3.0协议(署名-相同方式共享)©