第46节 RFC:User interface design


❤️💕💕记录sealosopen in new window开源项目的学习过程。k8s,docker和云原生的学习open in new window。Myblog:http://nsddd.topopen in new window


[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 链接