9.6 KiB
9.6 KiB
协议说明
1、各pb文件说明
所有协议并非完全一致,有些协议不知道具体放在哪个文件合适,就挑选了一个相对合适的文件放入。
1.1 IM.BaseDefine.proto
该文件定义了service_id,command_id以及一些基础数据结构,如用户,部门等
1.2 IM.Buddy.proto
该文件定义了与最近联系人,会话相关的协议。
1.3 IM.File.proto
该文件定义了文件传输相关的协议,但是暂未使用。
1.4 IM.Group.proto
该文件定义了与群组相关的协议。
1.5 IM.Login.proto
该文件定义了与登录相关的协议。
1.6 IM.Message.proto
该文件定义了与消息相关的协议
1.7 IM.Other.proto
该文件目前只有一个心跳协议。
1.8 IM.Server.proto
该文件定义了服务端之间专属的协议
1.9 IM.SwitchService.proto
该文件定义了用户之间的P2P消息,比如正在输入等,服务端不关心具体的协议内容,只做转发,客户端互相之间知道协议的含义。
2 协议说明
这里简单说下各个协议的含义,不会具体到每个字段标识什么意思,一般的协议定义的时候,就可以见名知意,不过有些协议还是会导致一些误导,在介绍这些协议的时候,我会尽量说清楚。
介绍顺序以数据结构,协议在文件出现的先后顺序来进行。
2.1 基础数据结构定义
基础数据结构的定义在IM.BaseDefine.proto中。
ServiceID
服务号,对不同的协议进行归类,便于后面针对模块进行分类。
LoginCmdID
登陆相关的命令。
BuddyListCmdID
最近联系人,会话等相关命令。
MessageCmdID
消息相关命令。
GroupCmdID
群组相关命令。
FileCmdID
文件传输相关命令。
SwitchServiceCmdID
定义了P2P命令。
OtherCmdID
定义了一些其他的命令,目前只使用了心跳。
ResultType
这里定义了登陆返回错误码。
KickReasonType
这里定义了用户被踢的原因。
OnlineListType
o(╯□╰)o
UserStatType
用户状态定义。
SessionType
会话类型,群组,还是单聊。
MsgType
消息类型,单聊文字,单聊语音,群聊文字,群聊语音。
ClientType
客户端类型,包含win,mac, Android, iOS
GroupType
群组类型,临时群,固定群。
GroupModifyType
群成员更改类型,增加成员,删除成员。
FileType
文件传输类型,在线传输,离线传输。
ClientFileState
文件传输状态定义。
ClientFileRole
文件传输角色定义。
FileServerError
文件传输错误码。
SessionStatusType
最近联系人(会话)状态定义,删除,正常。
DepartmentStatusType
部门状态定义。
IpAddr
一组服务的唯一标识:IP+port定义
UserInfo
用户信息数据结构。
ContactSessionInfo
最近联系人(会话)数据结构
UserStat
用户状态数据结构
ServerUserStat
服务端用户状态数据结构,比UserStat多了一个用户所在端。
UnreadInfo
未读消息数据结构,其中seession_id定义的有点歧义,在这里标识对方id(可以理解为peer_id),如果是单聊,表示对方id,如果是群组,表示群id
MsgInfo
消息数据结构,session_id同上。
GroupVersionInfo
群组版本信息数据结构,为增量推送群组信息考虑。
GroupInfo
群组数据结构。
UserTokenInfo
推送用户token数据结构。
PushResult
推送结果定义。
ShieldStatus
群消息推送屏蔽状态
OfflineFileInfo
离线文件信息。
DepartInfo
部门信息数据结构。
2.2 最近会话相关协议
该系列协议定义在IM.Buddy.proto中,主要定义了最近联系人(会话)相关的协议。
IMRecentContactSessionReq
最近联系人会话请求。
IMRecentContactSessionRsp
最近联系人会话应答。
IMUserStatNotify
用户状态通知。
IMUsersInfoReq
用户信息请求
IMUsersInfoRsp
用户信息应答。
IMRemoveSessionReq
删除最近会话请求
IMRemoveSessionRsp
删除最近会话应答。
IMAllUserReq
所有用户请求,其中带了一个latest_update_time字段,请求应答会返回latest_update_time时间之后发生变化的用户回来。
IMAllUserRsp
所有用户应答,同事携带一个新的latest_update_time本次最新的用户变化时间,下次请求带上这个字段即可。
IMUsersStatReq
用户状态请求。
IMUsersStatRsp
用户状态应答。
IMChangeAvatarReq
更改头像请求(暂时未使用)
IMChangeAvatarRsp
更改头像应答(暂时未使用)
IMPCLoginStatusNotify
PC登陆后通知移动端。
IMRemoveSessionNotify
删除会话后的通知,用于多端同步。
IMDepartmentReq
部门信息请求。
IMDepartmentRsp
部门信息应答。
2.3 文件传输协议
该系列协议定义在IM.File.proto中,因为暂时未使用,暂不做说明。
2.4 群组相关协议
该系列协议定义在IM.Group.proto中,定义了与群组相关的协议。
IMNormalGroupListReq
用户所在固定群组请求。
IMNormalGroupListRsp
用户所在固定群组应答。
IMGroupInfoListReq
群组信息请求。
IMGroupInfoListRsp
群组信息应答。
IMGroupCreateReq
创建群组请求。
IMGroupCreateRsp
创建群组应答。
IMGroupChangeMemberReq
群组成员变更请求。
IMGroupChangeMemberRsp
群组成员变更应答。
IMGroupShieldReq
屏蔽群组请求。
IMGroupShieldRsp
屏蔽群组应答。
IMGroupChangeMemberNotify
群组成员变更通知。
2.5 登陆相关协议
该系列协议定义在IM.Login.proto文件中,定义了一系列与登陆相关的协议。
IMMsgServReq
msg_server地址请求(已经废弃,改用http请求)
IMMsgServRsp
msg_server地址应答(已经废弃)
IMLoginReq
登陆请求
IMLoginRes
登陆应答。
IMLogoutReq
登出请求。
IMLogoutRsp
登出应答。
IMKickUser
踢用户。
IMDeviceTokenReq
设备token汇报请求(用于推送)
IMDeviceTokenRsp
设备token汇报应答
IMKickPCClientReq
移动端踢PC端请求
IMKickPCClientRsp
移动端踢PC端应答。
2.6 消息相关协议
该系列协议定义在IM.Message.proto文件中,定义了一系列与消息相关的协议。
IMMsgData
发送消息协议。
IMMsgDataAck
消息收到回复。
IMMsgDataReadAck
消息已读回复。
IMMsgDataReadNotify
消息已读通知,用于多端同步。
IMClientTimeReq
服务器时间请求。
IMClientTimeRsp
服务器时间回复。
IMUnreadMsgCntReq
未读消息计数请求。
IMUnreadMsgCntRsp
未读消息计数回复
IMGetMsgListReq
获取消息请求。
IMGetMsgListRsp
获取消息回复。
对于群而言,如果消息数目返回的数值小于请求的cnt,则表示群的消息能拉取的到头了,更早的消息没有权限拉取。如果msg_cnt 和 msg_id_begin计算得到的最早消息id与实际返回的最早消息id不一致,说明服务器消息有缺失,需客户端做一个缺失标记,避免下次再次拉取。
IMGetLatestMsgIdReq
获取某个会话最新msg_id请求
IMGetLatestMsgIdRsp
获取某个会话最新msg_id回复
IMGetMsgByIdReq
通过msg_id获取消息请求
IMGetMsgByIdRsp
通过msg_id获取消息回复
2.7 其他协议
该系列协议定义在IM.Other.proto文件中,目前只定义了心跳协议。
IMHeartBeat
心跳协议
2.8 服务器端之间专属协议
该系列协议定义在IM.Server.proto文件中,定义了服务端之间专属的相关协议。主要用于msg_server与db_proxy之间的通信。
IMStopReceivePacket
由db_proxy发给其他服务端,用于通知其他服务端本端停止接收包,主要在重启的过程中用到,目前做的比较ugly。
IMValidateReq
客户端登陆认证请求。
IMValidateRsp
客户端登陆认证回复。
IMGetDeviceTokenReq
获取某个用户的设备token请求,主要用于推送。
IMGetDeviceTokenRsp
获取某个用户设备token回复。
IMRoleSet
服务端主从角色变换,用于route_server。
IMOnlineUserInfo
在线用户信息。
IMMsgServInfo
msg_server信息,主要用于msg_server向login_server汇报用。
IMUserStatusUpdate
用户状态变更。
IMUserCntUpdate
用户数量变化。
IMServerKickUser
服务端踢人。
IMServerPCLoginStatusNotify
PC登陆通知。
IMPushToUserReq
发送push通知请求。
IMPushToUserRsp
发送push通知回复。
IMGroupGetShieldReq
获取用户屏蔽群设置请求。
IMGroupGetShieldRsp
获取用户屏蔽群设置回复。
IMFileTransferReq
文件传输请求
IMFileTransferRsp
文件传输回复。
IMFileServerIPReq
文件服务器信息请求
IMFileServerIPRsp
文件服务器信息回复。
2.9 P2P协议
该系列协议定义在IM.SwitchService.proto中,主要定义了客户端之间的协议,服务端只做转发。
IMP2PCmdMsg
客户端之间的协议,服务端不认识,只做转发。例如“正在输入”这些。