TeamTalk/doc/协议文件说明.md
2015-03-28 15:18:24 +08:00

9.6 KiB
Raw Permalink Blame History

协议说明

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

客户端类型包含winmac 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

客户端之间的协议,服务端不认识,只做转发。例如“正在输入”这些。