QQ基本协议族消息管理器

CBasicFamilyParser处理基本协议族的收发包,它的代码很简单,但作用很重要,它对基本协议族的支持包括:
要发送包的只要传进来 一个CQQUser对象(由这个对象提供要发送包的参数),指定命令号,就会生成一个CBasicOutPacket派生类对象,而这个 CBasicOutPacket派生类对象会送到发送队列中,由发送队列统一调配发送时间,决定需不需要重发,收没收到反馈等等,发送队列以后再详细说 明,这里只提到发送一个包并不是直接做一个二进制buffer,通过socket发出去的,而是生成一个CBasicOutPacket派生类对象,提交 给发送队列,发送队列会对所有CBasicOutPacket派生类对象统一管理,决定每个包的发送时间,重发次数,以及收到Ack删除对应的包等等
收 到的原始数据(二进制数据)通过它转换为CBasicInPacket派生类对象,这个CBasicInPacket派生类对象根据不同的包类型有不同的 用途,比如向上层报告收到的聊天消息,好友状态变更,系统消息,或者是发送包的Ack包,则提交给发送队列,让发送队列删除收到Ack包的发送包(否则这 个包会重发)
CBasicFamilyParser类接口非常简单,对外有CreateOutPacket生成发送包对象和 ParseInPacket生成接收包对象。这个类在每引入一对发送/接收包都会改变,由于目前还没有介绍一个CBasicIn/OutPacket派生 类,所以目前的CreateOutPacket和ParseInPacket都是空的
比如请求登录包/应答包是CRequestLoginTokenPacket/CRequestLoginTokenReplyPacket,那么CreateOutPacket代码中会有
 if( sCommand == QQ.QQ_CMD_REQUEST_LOGIN_TOKEN )
 {
  pBasicInPacket = new CRequestLoginTokenReplyPacket(pQQUser);
 }
而ParseInPacket代码中会有
 if( sCommand == QQ.QQ_CMD_REQUEST_LOGIN_TOKEN )
 {
  return new CRequestLoginTokenPacket(pQQUser);
 }
依此类推

代码SVNhttp://vcye23.SVN.sourceforge.net/SVNroot/vcye23/qqprotocol/
引用请注明出处,谢谢

Tags:  qq皮肤管理器 qq消息管理器 qq管理器 qq信息管理器 qq登陆管理器 qq协议 qq数据包 qq协议分析 qq远程协议 qq2008协议 qq传输协议

延伸阅读

最新评论

发表评论