TeamTalk IM_PDUBASE详解

1. 简介

用于TeamTalk通讯数据包的构造与解析
CImPdu结构为自定义header(包含len)+data(protobuf序列化后的消息)解决包的边界判断
该模块依赖于UtilPdu工具类,使用了protobuf第三方库

2. 常用接口说明
  • pdu header结构如下:

    typedef struct {
        uint32_t 	length;		          // 整个包的长度
        uint16_t 	version;	          // 通信协议的版本号
        uint16_t	flag;		              // not used
        uint16_t	service_id;	      // 分组命令号,如login server和msg server属于不同分组
        uint16_t	command_id;	  // 分组内子命令,如登录请求和登录请求回复
        uint16_t	seq_num;          // 包序号
        uint16_t    reversed;          // 保留
    } PduHeader_t;
    
    CSimpleBuffer	m_buf;          // protobuf序列化后的消息体
    PduHeader_t		m_pdu_header;  //pdu消息头
    
  • bool IsPduAvailable(uchar_t* buf, uint32_t len, uint32_t& pdu_len)
    对数据包头部4个字节即长度来校验buf是否完整,包的完整性判断会用到这个

  • void Write(uchar_t* buf, uint32_t len)
    通过buf构造CImPdu内部成员CSimpleBuffer m_buf

  • int ReadPduHeader(uchar_t* buf, uint32_t len)
    从buf解析出包头数据,将buf字节数组转化成struct PduHeader_t,实际是构造CImPdu内部成员PduHeader_t m_pdu_header

  • CImPdu* ReadPdu(uchar_t *buf, uint32_t len)
    读取pdu数据;
    先校验pdu完整性(IsPduAvailable)再pPdu->Write(buf, pdu_len)保存完整pdu原始数据再ReadPduHeader解析出包头数据

  • void WriteHeader()
    通过m_pdu_header结构体信息构造m_buf字节数组头部信息

  • void SetPBMsg(const google::protobuf::MessageLite* msg)
    将msg序列化,内部使用了ProtoBufC数组的序列化APISerializeToArray;
    SetPBMsg先m_buf.Read(NULL, m_buf.GetWriteOffset())清空m_buf再m_buf.Write(NULL, sizeof(PduHeader_t))预留出header空间,然后先设置包体(序列化后的msg),再设置Header。

3. Ubuntu 16.04 automake1.14编译安装指南
  • automake 1.15卸载解决方案
    apt-get install autoconf
    使用上述指令ubuntu 16.04会默认安装automake 1.15
    可以用下面指令卸载
    apt-get --purge remove autoconf

  • 通过源码包安装指南
    依次下载
    http://ftp.gnu.org/gnu/m4/m4-1.4.13.tar.gz
    http://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.gz
    http://ftp.gnu.org/gnu/automake/automake-1.14.1.tar.gz
    tar -zxvf xxx.tar.gz
    cd xxx
    ./configure [–prefix]
    make make install

  • 查看安装情况
    which autoconf
    which automake

4. protobuf库编译安装指南
  • 3rdParty/package_protobuf存放了protobuf-2.6.1.tar.gz源码包

  • 执行3rdParty/make_protobuf.sh即可

  • 最后会将生成的头文件和库文件拷贝到3rdParty/pb供其他模块使用

  • 注意点: protobuf-2.6.1需依赖automake 1.14,解决方案参考上文ubuntu 16.04 automake1.14编译安装指南

5. 生成.proto文件对应的c++代码
  • 3rdParty/im_proto_files存放了TeamTalk所需.proto文件
  • 执行3rdParty/im_proto_files/create.sh会在当前目录创建gen并生成相应c++代码
  • 3rdParty/im_proto_files/sync.sh会将生成的c++代码复制到3rdParty/pb/protocol供其他模块使用
6. 源码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值