⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer.h

📁 CMPP 客户端接口API 符合中国移动CMPP3.0 2.0 适用于SP端客户端的开发
💻 H
字号:
/**
 *	buffer.h
 *	
 *	Short Message Abstractive Library.(SMAL)
 *
 *	Copyright 2003-2006	北京风起水流软件工作室
 *	
 *	http://www.zealware.com
 *	
 *	princetoad@gmail.com
 *
 */

#ifndef _SMAL_BUFFER_H
#define _SMAL_BUFFER_H

#include <smal.h>

class CBuffer {
public:
	CBuffer(int sz = DefaultBufferSize)
		: _size(sz), m_nLen(0) {
		m_str = new char[sz];
		ZeroMemory(m_str, sz);
	}

	~CBuffer() {
		delete[] m_str;
		m_str = NULL;
	}

	const char * GetBuffer() {
		return m_str;
	}

	int GetBufLen() {
		return m_nLen;
	}

	/** 设置buffer的内容,n1=TotalLength, n2=CommandID, n3=SeqID, pchData=MsgBody, nLen=sizeof(MsgBody).
		适用于CMPP,SGIP,SMGP
		*/
	void SetBuffer(unsigned long nStart, unsigned long nTotalLength, unsigned long nCommandId, unsigned long nSeqId, void* pvData = NULL, unsigned long nLen = 0) {
		if ( (int)nLen > (_size - 12)) {
			delete[] m_str;
			m_str = NULL;
			m_str = new char[nLen + 12];
		}

		CopyMemory(m_str + nStart,			&nTotalLength,	4);
		CopyMemory(m_str + nStart + 4,	&nCommandId,		4);
		CopyMemory(m_str + nStart + 8,	&nSeqId,				4);
		if (pvData != NULL) {
			CopyMemory(m_str + nStart +12, pvData, nLen);
		}
		m_nLen = nStart + 12 + nLen;
	}

	/**设置buffer的内容
		n1=TotalLength, n2=CommandID, n3=command_status, n4=SeqID, pchData=MsgBody, nLen=sizeof(MsgBody).
		(适用于CNGP)
	*/
	void SetBuffer(
		unsigned long nStart,				///< buffer起始位置
		unsigned long nTotalLength,			///< total_length
		unsigned long nCommandId,			///< command_id
		unsigned long nCommandStatus,		///< command_status
		int nSeqId,							///< sequence_id
		void* pvData = NULL,				///< message body
		int nLen = 0						///< length of message body
		) 
	{
		CopyMemory(m_str + nStart, &nTotalLength, 4);
		CopyMemory(m_str + nStart + 4, &nCommandId, 4);
		CopyMemory(m_str + nStart + 8, &nCommandStatus, 4);
		CopyMemory(m_str + nStart + 12, &nSeqId, 4);
		if (pvData != NULL) {
			CopyMemory(m_str + nStart + 16, pvData, nLen);
		}
		m_nLen = nStart + 16 + nLen;
	}

	// 增加一段内容.
	// 可以是byte, word, dword,等二进制数据
	void Add(void* pvData, int nLen) {
		//增加了对pvData是否为空的判断.
		if (AfxIsValidAddress(pvData, nLen, FALSE)) {
			CopyMemory(m_str + m_nLen, pvData, nLen);
		}

		m_nLen += nLen;
	}

	// 以Null结尾的ASCII字符串
	void AddString(const char * pvData) {
		strcpy(m_str + m_nLen, pvData);
		m_nLen += strlen(pvData);
		m_str[m_nLen] = '\0';
		m_nLen += 1;
	}

private:
	static const int DefaultBufferSize = 1024;

	char *m_str;	///< 指向buffer的指针
	int	m_nLen;		///< 当前buffer的有效长度.
	int _size;		///< buffer总长度
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -