1. 简介

用于TeamTalk通讯数据包的构造与解析
CImPdu结构为自定义头+protobuf序列化后的消息
该模块依赖于UtilPdu工具类,使用了protobuf第三方库

2. 常用接口说明

  • pdu header结构如下:

    typedef struct {uint32_t  length;       // the whole pdu lengthuint16_t   version;      // pdu version numberuint16_t flag;         // not useduint16_t   service_id;   //uint16_t    command_id;   //uint16_t    seq_num;      // 包序号uint16_t    reversed;     // 保留
    } PduHeader_t;CSimpleBuffer m_buf;  //pdu原始数据(header+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. 源码

  • 链接:TeamTalk_BlueBling/imPduBase
  • 本项目主要为了学习teamtalk,尽量将每个细化模块独立出来并编写测试用例,方便移植。
  • 测试demo: tests/test_impdubase.cpp

TeamTalk IM_PDUBASE详解相关推荐

  1. TeamTalk Netlib详解

    1.简介 主要用于处理tcp连接,自己实现了一个网络库 2.类与接口 2.1 CBaseSocket:socket基础类,封装了常用网络api void CBaseSocket::_SetReuseA ...

  2. TeamTalk slog详解

    1.简介 slog模块依赖于log4cxx,实际是对log4cxx的进一步封装. 2.主要类关系说明: CSLog teamtalk日志类,利用内部成员(CSLogObject* m_log)调用CS ...

  3. 【转】WebSocket详解(一):初步认识WebSocket技术

    1.前言 HTML5规范在传统的web交互基础上为我们带来了众多的新特性,随着web技术被广泛用于web APP的开发,这些新特性得以推广和使用,而websocket作为一种新的web通信技术具有巨大 ...

  4. WebSocket详解(一):初步认识WebSocket技术

    WebSocket详解(一):初步认识WebSocket技术 1.前言 HTML5规范在传统的web交互基础上为我们带来了众多的新特性,随着web技术被广泛用于web APP的开发,这些新特性得以推广 ...

  5. P2P技术详解(一):NAT详解——详细原理、P2P简介(转)

    这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. <P2P技术详解>系列文章 ➊ 本 ...

  6. 015. P2P技术详解(一):NAT详解——详细原理、P2P简介

    http://www.52im.net/thread-50-1-1.html 这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层 ...

  7. (转)理论经典:TCP协议的3次握手与4次挥手过程详解

    摘要: 本文将分别讲解经典的TCP协议建立连接(所谓的"3次握手")和断开连接(所谓的"4次挥手")的过程. 1.前言 尽管TCP和UDP都使用相同的网络层(I ...

  8. Web端即时通讯技术原理详解

    Web端即时通讯技术原理详解 前言 在web端的IM即时通讯应用,由于浏览器的兼容性以及其固有的"客户端请求服务器处理并响应"的C/S通信模型,造成了要在浏览器中实现一个兼容性较好 ...

  9. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  10. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

最新文章

  1. 【十九】require和include的区别
  2. 移植 stm32f7_移植zephyrOS到正点原子apollo STM32F767上
  3. [CQOI2015]选数(杜教筛)
  4. mysql 赋给用户权限 grant all privileges on
  5. linux开发板 杭州迈冲,杭州迈冲科技MC9G20-DK评估开发板
  6. 一步一步写算法(之 回数)
  7. Bailian4073 最长公共字符串后缀【文本处理】
  8. “七”待已久,“夕”望是你,“快”来学习,“乐”在其中!
  9. 计算机科学与技术是属于什么学科,计算机科学与技术专业属于什么大类 属于哪个学科...
  10. Google 抓取工具(Googlebot)汇总
  11. 最详细的世界集成电路发展历史足迹
  12. #include“stdafx.h”详解
  13. 百度首页制作 (仿百度首页)
  14. anconda各个版本下载
  15. 初学盲打,免费,免安装,高颜值的在线打字练习网站
  16. c++ linux utf-8 编码 中文汉字分割(超简单代码)
  17. 《电子元器件的可靠性》——2.3节可靠性基本术语和主要特征量
  18. 全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。
  19. 在线项目管理软件的重要性
  20. Jetty的安装、配置和使用(三种使用方式)

热门文章

  1. java实现火车票查询_java抓取12306火车余票信息
  2. 万网域名修改 DNS 方法
  3. 红米k30s 至尊纪念版本看闪存型号 硬盘型号
  4. 微信小程序实现word,excell等文件下载
  5. 叩丁狼培训实战教程之Java的动态代理
  6. OrCAD导出BOM表的方法
  7. 如何给公司节约成本,搭建免费开源监控系统uptime-kuma
  8. 现网必用的主备冗余技术,VRRP理论+配置
  9. mybatis pagehelper自定义count语句
  10. Linux 服务器乱码问题解决