所有协议并非完全一致,有些协议不知道具体放在哪个文件合适,就挑选了一个相对合适的文件放入。
该文件定义了service_id,command_id以及一些基础数据结构,如用户,部门等
1.9 IM.SwitchService.proto
该文件定义了用户之间的P2P消息,比如正在输入等,服务端不关心具体的协议内容,只做转发,客户端互相之间知道协议的含义。
这里简单说下各个协议的含义,不会具体到每个字段标识什么意思,一般的协议定义的时候,就可以见名知意,不过有些协议还是会导致一些误导,在介绍这些协议的时候,我会尽量说清楚。
介绍顺序以数据结构,协议在文件出现的先后顺序来进行。
基础数据结构的定义在IM.BaseDefine.proto中。
服务号,对不同的协议进行归类,便于后面针对模块进行分类。
消息类型,单聊文字,单聊语音,群聊文字,群聊语音。
客户端类型,包含win,mac, Android, iOS
服务端用户状态数据结构,比UserStat多了一个用户所在端。
未读消息数据结构,其中seession_id定义的有点歧义,在这里标识对方id(可以理解为peer_id),如果是单聊,表示对方id,如果是群组,表示群id
该系列协议定义在IM.Buddy.proto中,主要定义了最近联系人(会话)相关的协议。
IMRecentContactSessionReq
IMRecentContactSessionRsp
所有用户请求,其中带了一个latest_update_time字段,请求应答会返回latest_update_time时间之后发生变化的用户回来。
所有用户应答,同事携带一个新的latest_update_time本次最新的用户变化时间,下次请求带上这个字段即可。
IMUsersStatReq
IMUsersStatRsp
该系列协议定义在IM.File.proto中,因为暂时未使用,暂不做说明。
该系列协议定义在IM.Group.proto中,定义了与群组相关的协议。
IMGroupChangeMemberNotify
该系列协议定义在IM.Login.proto文件中,定义了一系列与登陆相关的协议。
msg_server地址请求(已经废弃,改用http请求)
该系列协议定义在IM.Message.proto文件中,定义了一系列与消息相关的协议。
获取消息回复。
对于群而言,如果消息数目返回的数值小于请求的cnt,则表示群的消息能拉取的到头了,更早的消息没有权限拉取。如果msg_cnt 和 msg_id_begin计算得到的最早消息id与实际返回的最早消息id不一致,说明服务器消息有缺失,需客户端做一个缺失标记,避免下次再次拉取。
该系列协议定义在IM.Other.proto文件中,目前只定义了心跳协议。
该系列协议定义在IM.Server.proto文件中,定义了服务端之间专属的相关协议。主要用于msg_server与db_proxy之间的通信。
由db_proxy发给其他服务端,用于通知其他服务端本端停止接收包,主要在重启的过程中用到,目前做的比较ugly。
服务端主从角色变换,用于route_server。
msg_server信息,主要用于msg_server向login_server汇报用。
IMServerPCLoginStatusNotify
该系列协议定义在IM.SwitchService.proto中,主要定义了客户端之间的协议,服务端只做转发。
客户端之间的协议,服务端不认识,只做转发。例如“正在输入”这些。