淘宝开源网络框架tbnet之ipacketstreamer,ipackethandler以及iserveradaper

本文深入探讨了tbnet库中的ipacketstreamer、ipacketHandler和iserverAdapter类。ipacketstreamer负责数据包与缓冲区之间的转换,其中defaultPacketstreamer类实现了数据包的创建和解码。ipacketHandler处理接收到的数据包,提供了一个抽象的处理接口。iserverAdapter作为一个数据包处理适配器,可以根据不同需求实现单个或批量处理。这些设计模式的运用提高了代码的可维护性和灵活性。
摘要由CSDN通过智能技术生成

在上篇博文中,我们讨论了iocomponent这部分,个人认为在tbnet中在对网络数据包输入输出的处理上,封装的很不错的,对于那些想要做一些库开发方面的人有一定的借鉴作用,今天我们就来看看tbnet库中的其他几个类,主要是针对数据包的处理方面的,下面我们就来先看看tbnet库的ipacketstreamer这个类,这个类的作用根据网上的说法就是用于底层缓冲区与上次的数据包的交换处理类,个人还是比较认可这种说法的,下面先来看看其代码实现吧,代码如下:

class IPacketStreamer {

public:
    /*
     * ¹¹Ôì
     */
    IPacketStreamer() {
        _factory = NULL;
        _existPacketHeader = true;
    }

    /*
     * ¹¹Ôì
     */
    IPacketStreamer(IPacketFactory *factory) {
        _factory = factory;
        _existPacketHeader = true;
    }

    /*
     * Îö¹¹º
     */
    virtual ~IPacketStreamer() {}

    /*
     * µÃµ½°üÍ·
     *
     * @param input  Ô´buffe
     * @param header ½á¹ûhea
     * @return ÊÇ·ñ³É
     */
    virtual bool getPacketInfo(DataBuffer *input, PacketHeader *header, bool *broken) = 0;

    /*
     * ¶Ô°üµÄ½âÂë
     *
     * @param input
     * @param header
     * @return ½âÂëºóµÄÊý¾Ý°ü
     */
    virtual Packet *decode(DataBuffer *input, PacketHeader *header) = 0;

    /*
     * ¶ÔPacketµÄ×é×°
     *
     * @param packet Êý¾Ý°ü
     * @param output ×é×°ºóµÄÊý¾ÝÁ÷
     * @return ÊÇ·ñ³É¹¦
     */
    virtual bool encode(Packet *packet, DataBuffer *output) = 0;

    /*
     * ÊÇ·ñÓÐÊý¾Ý°üÍ·
     */
    bool existPacketHeader() {
        return _existPacketHeader;
    }

protected:
    IPacketFactory *_factory;   // ²úÉúpacket
    bool _existPacketHeader;    // ÊÇ·ñÓÐpacket header, ÈçhttpÓÐ×Ô¼ºÐ­Òé¾Í²»ÐèÒªÊä³öÍ·ÐÅÏ¢
};

在这个类中,首先来看看其成员变量,里面有个IPacketFactory对象,这个对象从名字上就能看出它的作用了,其实准确来讲它就是一个造数据包的工厂(使用了工厂模式),而具体的流程是在另外的两个函数中处理的,decode和encode,而这两个函数是虚函数,因而具体的实现需要看其子类,幸好在tbnet中已经实现了一个默认的数据包转换类(defaultPackets

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值