posts - 8,  comments - 46,  trackbacks - 0
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);
 }
依此类推

代码svn:https://vcye23.svn.sourceforge.net/svnroot/vcye23/qqprotocol/
引用请注明出处,谢谢
posted on 2007-10-17 02:59 叶子墙 阅读(1272) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2007年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(15)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜