在获取自己的信息以及获取好友信息和获取群信息之后,我们的WebQQ基本上也就完成了一半了,接下来的步骤该是开始聊天了。下面开始我们的WebQQ聊天协议分析与程序设计吧。
当然,由于WebQQ是基础HTTP协议的,所以服务器有了新信息需要客户端更新时不会主动给客户端发送信息,需要客户端定时去服务器查询。
WebQQ的定时查询命令是00,格式如下:
515667845;00;消息编号;4b2b432f;
WebQQ是每隔大约1秒向服务器发送一次消息的。
1、得到群聊天内容
服务器返回的命令:17
格式如下:515667845;17;28656;XXXXXX;54028;2b;0b;聊天内容;0c40808010新宋体;1;86540289;XXXXXX;128783;374;1281709924;3305670154;
第二个值为命令号17;第三个值可以理解为聊天内容编号;第四个为群ID号,注意不是群号;第五个也是聊天内容编号;第六个为子命令号,2b表示群消息;第七未知;第八个为聊天内容,聊天内容有些复杂,比如图片和QQ表情是不同的,现在只处理最简单的文本;第九个为字体,前两个字符“0c”组成一个字节的十六进制数,该字节的第一位为下划线位,第二位斜体位,第三位为加粗位,后五位为字体大小位,“408080”为文本颜色,“10”无意义,再往后就是字体了;第十二个为发言人的QQ号;第十五个为发言时间。
接收到聊天消息后须告诉服务器接收成功,格式如下:515667845;17;28656;4b2b432f;XXXXXX;1030196367;54028;2;3305670154;
显然,服务器接收到的第三个、第五个、第十六个数是需要用的,数据比较容易分析,这里不再多说明。如果不回复这条消息,服务器会以为客户端没有收到该条聊天内容,会再次发送;当然即使回复了也可能重复接收,所以需要记录聊天内容编号以处理是否已经接收过。
2、得到好友聊天内容
服务器返回的命令:17
格式如下:515667845;17;29389;XXXXXX;608909;09;0b;聊天内容;0a00000010宋体;1283479380;3389593516;
第二个值为命令号17;第三个值可以理解为聊天内容编号;第四个为好友QQ 号;第五个也是聊天内容编号;第六个为子命令号,09表示好友消息;第七未知;第八个为聊天内容,聊天内容有些复杂,比如图片和QQ表情是不同的,现在只处理最简单的文本;第九个为字体,前两个字符“0c”组成一个字节的十六进制数,该字节的第一位为下划线位,第二位斜体位,第三位为加粗位,后五位为字体大小位,“000000”表示好友发来的消息文本为黑色,“10”无意义,再往后就是字体了;第十个为发言时间。
接收到聊天消息后须告诉服务器接收成功,格式如下:515667845;17;29389;68246411;XXXXXX;1030196367;608909;1;3389593516;
从服务器接收到的信息中第三个、第五个、第十一个数是需要用的,这些与接收群聊天内容类似,大家揣摩揣摩应该就懂了。
3、给好友发送消息
命令:16
格式:515667845;16;消息号;4b2b432f;XXXXXX;0b;0;消息内容;0900000010宋体;
第五个为接收消息的好友QQ号;第六个0b固定;第七个0固定;第八个为给好友的聊天内容;第九个为字体信息。
4、给群发送消息
命令:30
格式:%s;30;消息号;4b2b432f;0a;XXXXXX;消息内容;0900000010宋体;
第五个固定为0a;第六个为群ID(不是群号);第七个为聊天内容;第八个为字体信息。
