代码拉取完成,页面将自动刷新
同步操作将从 张远浩/call_demo_server 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/*
* ImPduBase.h
*
* Created on: 2013-8-27
* Author: ziteng@mogujie.com
*/
#ifndef IMPDUBASE_H_
#define IMPDUBASE_H_
#include "UtilPdu.h"
#include <sstream>
#define IM_PDU_HEADER_LEN 8
/* added by luoning 2014.06.10. */
/* added end */
#define PARSE_PACKET_ASSERT if (is.GetPos() != (nLen - IM_PDU_HEADER_LEN)) { \
ostringstream ostr;\
ostr << "parse packet failed, ";\
string reason = ostr.str();\
throw CPduException(m_pdu_header.command_id, ERROR_CODE_PARSE_FAILED, reason.c_str()); \
}
#define ALLOC_FAIL_ASSERT(p) if (p == NULL) { \
throw CPduException(m_pdu_header.command_id, ERROR_CODE_ALLOC_FAILED, "allocate failed"); \
}
//////////////////////////////
typedef struct {
uint32_t length; // 数据包长度,包括包头
uint16_t command_id; // 命令号
uint16_t reserved; // 保留,可用户如序列号等
} PduHeader_t;
class CImPdu
{
public:
CImPdu();
virtual ~CImPdu() {}
uchar_t* GetBuffer();
uint32_t GetLength();
uint16_t GetCommandId() { return m_pdu_header.command_id; }
uint16_t GetReserved() { return m_pdu_header.reserved; }
void SetReserved(uint16_t reserved);
void WriteHeader();
virtual uint16_t GetPduType() { return 0; }
static bool IsPduAvailable(uchar_t* buf, uint32_t len, uint32_t& pdu_len);
static int ReadPduHeader(uchar_t* buf, uint32_t len, PduHeader_t* header);
static CImPdu* ReadPdu(uchar_t* buf, uint32_t len);
private:
void _SetIncomingLen(uint32_t len) { m_incoming_len = len; }
void _SetIncomingBuf(uchar_t* buf) { m_incoming_buf = buf; }
protected:
CSimpleBuffer m_buf;
uchar_t* m_incoming_buf;
uint32_t m_incoming_len;
PduHeader_t m_pdu_header;
};
#endif /* IMPDUBASE_H_ */
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。