1、本源码下载地址:http:/ IM处理流程 用户上线 1) 0x1001:Client 连接 Appsvr,发送上线请求,包格式如下: 字段名 长度(字节数) 类型 备注 用户名 UserName 31 char 密码 Password 16 char 版本号 4 int 好友列表最后刷新时间4 Time_t 如果版本不匹配,连接到文件服务器下载最新版本的安装程序,断开客户端连接; 0x5001:Appsvr 收到请求后作版本比较,如果版本更新,则通知 Client 字段名 长度 类型 备注 文件服务器 IP 16 char 文件服务器端口 2 byte 版本号 4 int 如果 AppSvr
2、 中的待处理登录命令太多,则直接拒绝客户端登录请求 0x5001 AppSvrClient 字段名 长度(字节数) 类型 备注 状态码: 0x5001 版本不匹配 0x5002 服务器忙 2) 0x5002: Appsvr 向 DBGateway请求验证; 字段名 长度 类型 备注 源消息 ID 4 int AppSvr 发给 MCG 的消息 ID 用户名 UserName 31 char 密码 Password 16 char 好友列表最后刷新时间4 Time_t3) 数据库网关返回验证结果 如果验证客户端失败,返回空包 0x7001:DBGAppsvr 字段名称 长度 类型 备注 源消息
3、ID 4 int AppSvr 发给 MCG 的消息 ID 状态码: 0x7001 用户密码错 0x7002 用户不存在 如果验证客户端成功,返回用户个人信息和好友列表 0x7001 DBGApSvr 字段名称 长度 类型 备注 源消息 ID 4 int AppSvr 发给 MCG 的消息 ID 用户 ID 4 int 用户名 31 char 性别 1 Byte 0:无,1:男,2:女 年龄 1 Byte 加好友方式 1 byte 0:直接加,1:验证,2:禁止加 图标 ID 2 byte 昵称 51 Char 手机 20 Char Email 地址 51 Char 公司 31 Char 部门
4、 21 char 国家 31 char 省份 31 char 城市 31 char 地址 51 char 是否需要更新本地好友列表 1 byte 0:不需要更新;1:必须更新 是否有加好友验证消息需反馈 1 byte 0:没有;1:有 加过本方的人的个数 2 WORD 分组个数 2 word 好友个数 2 WORD 加过本方为好友的人的列表 用户号 UserID 4 Int 分组列表 GroupID 4 int GroupName 31 char 好友列表 好友 UserID 4 Int好友用户名 31 char 图标 ID 2 Int 昵称 DispName 51 Char 组 ID 4 i
5、nt 状态码:0x0000 验证成功 4) AppSvr 向 Client 回复登录验证结果 如果验证客户端失败,AppSvr 向客户端回复失败状态,并断开客户端连接 0x5001 AppSvrClient 字段名称 长度 类型 备注 状态码: 0x7001 用户不存在 0x7002 用户密码错误 如果验证成功,返回用户个人信息和好友列表以及所负载的 IMSvr,然后断开客户端连接 0x5001: AppsvrClient:通知客户端验证成功,返回用户个人信息和 IMSvr 列表 字段名 长度 类型 备注 用户 ID 4 int 用户名 31 char 用户 ID 4 int 性别 1 Byt
6、e 0:无,1:男,2:女 年龄 1 Byte 加好友方式 1 byte 0:直接加,1:验证,2:禁止加 图标 ID 2 byte 昵称 51 Char 手机 20 Char Email 地址 51 Char 公司 31 Char 部门 21 char 国家 31 char 省份 31 char 城市 31 char 地址 51 char IMSvr 个数 1 byte IMSvr列表 IMSvr IP 16 Char IMSvr TCP 端口 2 Short IMSvr UDP 端口 2 Short 状态码:0x0000 验证成功0x5003:AppsvrClient 刷新好友信息 字段名
7、 长度 类型 备注 是否需要更新本地好友列表 1 byte 0:不需要更新;1:必须更新 分组个数 2 Word 好友个数 2 word 分组列表 GroupID 4 int GroupName 31 char 好友列表 好友 UserID 4 Int 好友用户名 31 char 图标 ID 2 Int 昵称 DispName 51 Char 组 ID 4 int 状态码:0x0000 成功 5) 0x1002:Client_IMSVR_TCP_online:ClientIMSvr:客户端登录 IM 服务器 字段名 长度 类型 备注 用户号 UserID 4 Int 密码 Password 1
8、6 Char 内网 IP 16 char 内网 UDP 端口 2 short 6) 0xB001 IMSvrAppSvr 请求验证客户端 字段名 长度 类型 备注 用户号 UserID 4 Int 密码 Password 16 Char 7) 0x5004 AppSvrIMSvr 返回验证结果 字段名 长度 类型 备注 用户号 UserID 4 Int 状态码: 0x0000 验证成功 0x5003 用户不存在 0x5004 用户密码错误 8) 0xB002 IMSvrClient 返回验证结果字段名 长度 类型 备注 状态码: 0x0000 验证成功 0x5003 用户不存在 0x5004
9、用户密码错误 IMSvr 向客户端返回验证成功的结果后, 在待处理队列中写入一个包, 记录开始等候 UDP 连接的时间,作超时检测。Client 收到验证成功的消息后,开始向 IMSvr 发 UDP 激活包; TCP 激活包的格式如下: 0x1032 字段名 长度 类型 备注 客户端定时向 IMServer 发送 TCP 激活包,如果超过一定时间(一般在一分钟内)没有 收到此包,将断开客户端。 UDP 激活包的格式如下: 0x1031: 字段名 长度 类型 备注 用户号 UserID 4 Int 如果 IMSvr 超时未收到客户端的 UDP 激活包,则通知 Client 登录失败,断开连接;
10、如果成功收到激活包,则通客户端登录成功。同时 IMSvr 通知 AppSvr,Client 登录 是否成功。 9) 0xB003 IMSvrClient IM 服务器通知客户端登录结果 字段名 长度 类型 备注 状态码: 0x0000 登录成功 0xB001 超时未收到 UDP 激活包 0xB002 服务器超时 0xB003 服务器忙 0xB004 服务器拒绝登录请求 0x5003 用户不存在 0x5004 用户密码错误 0xB004 IMSvrAppSvr:Client 上线是否成功 字段名 长度 类型 备注 用户号 UserID 4 Int 外网 IP 16 char 外网 udp端口 2
11、 byte 内网 IP 16 char 内网 udp端口 2 byte 状态码: 0x0000 登录成功其它: 登录失败 10) AppSvr 的处理 如果 AppSvr 收到 IMSvr 发送的客户端登录成功的消息, 则 (1) 更改用户结点的状态;(2) 通知数据库网关更改数据库中记录的状态;(3)返回用户的在线好友列表给 IMSvr;(4) 通知加过该用户的所有在线好友所在的 IMSvr,有人上线。 0x5005 :AppDBGateway:向数据库写用户在线信息 字段名 长度 类型 备注 用户号 UserID 4 Int 外网 IP 16 char 外网 udp端口 2 Short 内
12、网 IP 16 Char 内网 udp端口 2 short 登录状态 1 Byte 0x5006:AppsvrIMSvr: 刷在线好友信息(包括加我为好友的人的信息) 字段名 长度 类型 备注 用户 ID 4 int 在线好友个数 2 short 在线好友列表 在线好友 UserID 4 Int 用户名 31 char 昵称 51 char 图标 ID 2 short IMSvr 的 IP 16 char 外网 IP 16 char 外网 UDP 端口 2 Byte 内网 IP 16 char 内网 UDP 端口 2 byte 在线状态 1 Byte 好友类型 1 byte 1:我的好友;2:
13、加过我的人 0xB013 IMerver IMClient 刷在线好友信息(包括加我为好友的人的信息) 字段名 长度 类型 备注 在线好友个数 2 short 在线好友列表 在线好友 UserID 4 Int 用户名 31 char 昵称 51 char图标 ID 2 short IMSvr 的 IP 16 char 外网 IP 16 char 外网 UDP 端口 2 Byte 内网 IP 16 char 内网 UDP 端口 2 byte 在线状态 1 Byte 好友类型 1 byte 1:我的好友;2:加过我的人 0x5007:AppIMSvrx: 通知加过我为好友的人,有人上线 11) 0
14、xB005 IMSvrxClientx: IMSvrx 通知每个在线好友,有人上线 字段名 长度 类型 备注 用户号 UserID 4 Int 用户名 31 char 昵称 DispName 51 Char 图标 ID 2 Int IMSvr 的 IP 16 Char 外网 IP 16 Char 外网 UDP 端口 2 Byte 内网 IP 16 char 内网 UDP 端口 2 byte 在线状态 1 Byte 好友类型 1 byte 1:我的好友;2:加过我的人 好友个数 2 short 好友 ID 列表流程图: 用户下线 用户主动下线 1)0x1003:Client_IMSvr_Ofli
15、ne:ClientIMSvr:Client 向 IM 服务器发送下线请求 字段名 长度 类型 备注 2)0xB006 IMSvrAppsvr:IMSvr 向应用服务器发送用户下线通知 字段名 长度 类型 备注 用户号 UserID 30 char 3)0x5008:AppsvrDBGateway:通知用户下线. 字段名 长度 类型 备注 用户号 UserID 4 int 0x5009:AppsvrIMSvrx:应用服务器发送用户下线通知给该用户的所有在线好友所 在的 IMSvrx, 字段名 长度 类型 备注 下线用户号 UserID 4 Int 好友用户号 ID列表 4 int 4):0xB0
16、07 IMSvrx Clientx IMSvr 通知客户端,有好友下线 字段名 长度 类型 备注 用户号 UserID 4 Int 用户名 31 char 昵称 DispName 51 Char 图标 ID 2 Int IMSvr 的 IP 16 char 外网 IP 16 char 外网 UDP 端口 2 Byte 内网 IP 16 char 内网 UDP 端口 2 byte 在线状态 1 Byte 好友类型 1 byte 1:我的好友;2:加过我的人字段名 长度 类型 备注 下线用户号 UserID 4 int 用户主动下线流程图: ? MCU MCU ? ? ? ? ? ? 3 ? MC
17、U ? ? ? ? 2? 1? ? ? 4 ? 3 ? ? 用户超时下线: 客户端定时向 IM 服务器发送心跳包,如果 IM 服务器超时未收到客户端的心跳包,则认为 用户下线 处理过程同“用户主动下线”的 2)4)步 添加好友 1) 0x1010:ClientIMSvr :客户端向 IMSVR 查询指定用户的信息 发送加好友请求 字段名 长度 类型 备注 本方用户号 UserID 4 int 对方用户名 UserName 31 Char2) :0xB008 IMSvrAppsvr:IMSvr 向应用服务器转发加好友的请求 字段名 长度 类型 备注 本方用户号 UserID 4 int 对方用户
18、名 UserName 31 char 3) 0x500A:AppsvrDBGateway:应用服务器向数据库网关转发加好友的请求 字段名 长度 类型 备注 SourceID 4 Int 源 ID 本方用户号 UserID 4 int 对方用户名 UserName 31 char 4) 0x7002:DBGatewayAppsvr:数据库网关向应用服务器应答加好友的结果 如果添加成功,返回被加用户的个人详细信息 字段名 长度 类型 备注 SourceID 4 int 源 ID 本方用户号 UserID 4 Int 对方用户名 UserName 31 char 以下为被加方的个人详细信息 用户 I
19、D 4 int 昵称 51 char 图标 ID 2 byte 性别 1 Byte 省份 31 char 年龄 1 byte 对方状态 1 byte 状态码: 0x0000 添加成功 如果添加失败,返回错误码 字段名 长度 类型 备注 SourceID 4 int 源 ID 本方用户号 UserID 4 int 对方用户名 UserName 31 char 状态码: 其它: 添加失败 5) 0x500B: AppSvrIMSvr:应用服务器向 IM 服务器转发加好友的结果 字段名 长度 类型 备注 本方用户号 UserID 4 Int对方用户名 UserName 31 char 以下为被加方的
20、个人详细信息 用户 ID 4 int 昵称 51 char 图标 ID 2 byte 性别 1 Byte 省份 10 char 年龄 1 byte 对方状态 1 byte 状态码: 0x0000 添加成功 如果添加失败,返回错误码 字段名 长度 类型 备注 本方用户号 UserID 4 int 对方用户名 UserName 31 char 状态码: 其它: 添加失败 6) 0xB009 IMSvrClient:IM 服务器向客户端转发加好友的结果 包格式同 5) 直接加好友的流程图:运营中心 MCU MCU 计费网关群 会议通讯网关群 运营 数据 库 客户端 客户端 (1)查询已知用户信息申请
21、/返回好友信息 帐务 远程监控系统 计费服务器 (2)查询已知用户信息申请/返回好友信息 读写数据库 连接到MCU 读写数据库 读写数据库 5)数据共享 (3)加好友申请/回应通过 4)加好友申请/回应通过 6)通知好友所在的MCU 7)通知被加好友 删除好友 1) 0x1011:ClientIMSvr 客户端发送请求删除好友的命令 字段名 长度 类型 备注 本方 UserID 4 int 被删用户号 4 Int 2) 0xB00A: IMSvrAppsvrIM 服务器向应用服务器转发用户删除好友的命令 字段名 长度 类型 备注 本方 UserID 4 int 被删用户号 4 Int 3) 0
22、x500C : AppsvrDBGateway 应用服务器向数据库网关转发用户删除好友的命令 字段名 长度 类型 备注 SourceID 4 Int 本方 UserID 4 int 被删用户号 4 Int 4) 0x7003:DBGatewayAppSvr 数据库网关回复用户删除好友的结果字段名 长度 类型 备注 SourceID 4 int 本方 UserID 4 int 被删用户号 4 Int 状态码: 0x0000 成功 其它: 删除失败 5) 0x500D:AppSvrIMSvr 应用服务器向 IM 服务器转发用户删除好友的结果 字段名 长度 类型 备注 本方 UserID 4 int
23、 被删用户号 4 Int 状态码: 0x0000 成功 其它: 删除失败 6) :0xB00B IMSvrClient IM 服务器向客户端转发删除好友的结果 字段名 长度 类型 备注 本方 UserID 4 int 被删用户号 4 Int 状态码: 0x0000 成功 其它: 删除失败 添加组 1) 0x1012:ClientIMSvr : 客户端向 IMSVR 发送添加新组的请求 字段名 长度 类型 备注 本方用户号 UserID 4 int 新添加组名GroupName 31 Char 2) :0xB014 IMSvrAppsvr 向 APSVR 发送添加新组的请求 字段名 长度 类型
24、备注 用户号 UserID 4 int 新添加组名GroupName 31 Char 3) :0x5200 ApsvrDBGateway 向 DBGateway发送添加新组的请求 字段名 长度 类型 备注 源 ID SourceID 4 int 用户号 UserID 4 int 新添加组名GroupName 31 Char4) :0x7010 DBGatewayAppSvr 数据库网关回复添加新组的结果 字段名 长度 类型 备注 源 ID SourceID 4 int 用户号 UserID 4 int GroupName 31 char GroupID 4 int 增加失败时置无效值 状态码:
25、 0x0000 成功 0x7020 组已经存在 0x7021 组名非法 其他 其他错误 5) :0x5201AppSvrIMSvr 应用服务器向 IM 服务器回复添加新组的结果 字段名 长度 类型 备注 用户号 UserID 4 int GroupName 31 char GroupID 4 int 增加失败时置无效值 状态码: 0x0000 成功 0x7020 组已经存在 0x7021 组名非法 其他 其他错误 6) : 0xb015 IMSvrClient IM 服务器向客户端回复添加新组的结果 字段名 长度 类型 备注 用户号 UserID 4 int GroupName 31 char
26、 GroupID 4 int 增加失败时置无效值 状态码: 状态码: 0x0000 成功 0x7020 组已经存在 0x7021 组名非法 其他 其他错误 删除组 1) 0x1013:ClientIMSvr 客户端发送请求删除指定组的命令 字段名 长度 类型 备注 本方 UserID 4 int 被删组号 nGroupID 4 Int2) :0xB016 IMSvrAppsvr IM 服务器向应用服务器转发删除指定组的命令 字段名 长度 类型 备注 用户 ID UserID 4 int 被删组号 nGroupID 4 Int 3) :0x5202 ApsvrDBGateway 应用服务器向数据
27、库网关转发删除指定组的命令 字段名 长度 类型 备注 源 ID SourceID 4 int 用户 ID UserID 4 int 被删组号 nGroupID 4 Int 4) :0x7011 DBGatewayAppSvr 数据库网关回复删除指定组的结果 字段名 长度 类型 备注 源 ID SourceID 4 int 用户 ID UserID 4 int 被删组号 nGroupID 4 Int 状态码: 0x0000 成功 0x7022 组不存在 其他 其他错误 5) :0x5203 ApSvrIMSvr 应用服务器向 IM 服务器转发删除指定组的结果 字段名 长度 类型 备注 用户 ID
28、 UserID 4 int 被删组号 nGroupID 4 Int 状态码: 0x0000 成功 0x7022 组不存在 其他 其他错误 6) :0xB017 IMSvrClient IM 服务器向客户端转发删除指定组的结果 字段名 长度 类型 备注 本方 UserID 4 int 被删组号 nGroupID 4 Int 状态码: 0x0000 成功 0x7022 组不存在 其他 其他错误 修改用户信息 1) 0x1020:ClientIMSVR 客户端请求修改个人信息字段名 长度 类型 备注 UserID 4 Int 密码 Password 16 char 昵称 51 Char 2) 0xB
29、00C: IMSvrAppSvr IM 服务器转发用户修改个人信息的命令 字段名 长度 类型 备注 UserID 4 int 昵称 51 char 3) 0x500E: AppsvrDBGateway 应用服务器转发用户修改个人信息的命令 字段名 长度 类型 备注 SourceID 4 int UserID 4 Int 昵称 4) 0x7004: DBGatewayAppsvr 数据库网关回复用户修改个人信息的结果 字段名 长度 类型 备注 SourceID 4 int UserID 4 Int 状态码: 0x0000 成功 其它: 修改失败 5) 0x500F: AppsvrIMSvr 应用
30、服务器转发用户修改个人信息的结果 字段名 长度 类型 备注 UserID 4 Int 状态码: 0x0000 成功 其它: 修改失败 6) 0xB00D: IMSvrClient IM 服务器转发用户修改个人信息的结果 字段名 长度 类型 备注 UserID 4 Int 状态码: 0x0000 成功 其它: 修改失败查询用户详细信息 1) 0x1021:ClientIMSVR 客户端请求查询用户详细信息 字段名 长度 类型 备注 UserID 4 Int 对方 UserID 4 int 2) 0xB00E: IMSvrAppSvr IM 服务器转发查询用户详细信息的命令 字段名 长度 类型 备
31、注 UserID 4 int 对方 UserID 3) 0x5010: AppsvrDBGateway 应用服务器转发查询用户详细信息的命令 字段名 长度 类型 备注 SourceID 4 int UserID 4 Int 对方 UserID 4 int 4) 0x7005: DBGatewayAppsvr 数据库网关回复查询用户详细信息的结果 成功返回用户详细信息: 字段名 长度 类型 备注 SourceID 4 int UserID 4 Int 对方 UserID 用户名 31 Char 昵称 51 char 图标 ID 状态码: 0x0000 成功 失败返回: 字段名 长度 类型 备注
32、SourceID 4 int UserID 4 Int 对方 UserID 状态码: 0x7002 用户不存在 其它: 查询失败5) 0x5011: AppsvrIMSvr 应用服务器转发查询用户详细信息的结果 成功返回: 字段名 长度 类型 备注 UserID 4 Int 对方 UserID 用户名 31 Char 昵称 51 char 图标 ID 状态码: 0x0000 成功 失败返回: 字段名 长度 类型 备注 UserID 4 Int 对方 UserID 状态码: 0x7002 用户不存在 其它: 查询失败 6) 0xB00F: IMSvrClient IM 服务器转发查询用户详细信息
33、的结果 成功返回: 字段名 长度 类型 备注 UserID 4 Int 对方 UserID 用户名 31 Char 昵称 51 char 图标 ID 状态码: 0x0000 成功 失败返回: 字段名 长度 类型 备注 UserID 4 Int 对方 UserID 状态码: 0x7002 用户不存在 其它: 查询失败转发命令 在客户端、IM 服务器、应用服务器之间直接转发从一个 Client 到另一个 Client 的即时消息 1) 0x1FFF:ClientIMSvr 字段名 长度 类型 备注 源 UserID 4 int 目的 UserID 4 Int 命令包内容 2) 0x1FFF:IMS
34、vrApsvr 字段名 长度 类型 备注 源 UserID 4 int 目的 UserID 4 Int 命令包内容 3) 0x1FFF:AppSvrIMSvr 字段名 长度 类型 备注 源 UserID 4 int 目的 UserID 4 Int 命令包内容 4) 0x1FFF:IMSvrClient IM 字段名 长度 类型 备注 源 UserID 4 int 目的 UserID 4 Int 命令包内容 IMServer上线 0xB010 IMServerAppServer IMServer启动时向 Appserver验证 字段名 长度 类型 备注 密码 16 Char TCP 端口 4 I
35、ntUDP 端口 4 Int 0x5012 AppSvrDBGateway 请求数据库网关验证 IM服务器 字段名 长度 类型 备注 源 ID 4 int IM 服务器 IP 16 char 密码 16 Char 0x7006 DBGatewayAppSvr 数据库网关返回验证 IM服务器的结果 字段名 长度 类型 备注 源 ID 4 int IMSvrID 4 int 状态码: 0x0000 验证成功 0x7010 没有注册的 IMServer 0x7011 注册密码错误 0x5100:AppServerIMserver Appserver 返回验证结果 字段名 长度 类型 备注 状态码:
36、0x0000 验证成功 0x7010 没有注册的 IMServer 0x7011 注册密码错误 IMServer下线 0xB011 IMServerAppServer 通知 Appserver本地 IMserver即将关闭 字段名 长度 类型 备注 0x5013 AppSvrDBGateway 向数据库网关发送 IM服务器下线命令 字段名 长度 类型 备注 IMSvrD 4 int IMServer心跳包 0xB012 IMServerAppServer 字段名 长度 类型 备注AppSvr 登录数据库网关 0x5200 ApSvrDBGateway 应用服务器连接数据库网关 字段名 长度 类型 备注 源 ID 4 int 密码 16 Char 0x7200 DBGatewayAppSvr 数据库网关回复应用服务器验证结果 字段名 长度 类型 备注 AppSvr 下线 0x5201 AppSvrDBGateway 应用服务器断开与数据库网关的连接 字段名 长度 类型 备注 AppSvr 心跳包 0x5202 AppSvrDBGateway 应用服务器向数据库网关发送心跳包 字段名 长度 类型 备注