--- a +++ b/comm/message.cpp @@ -0,0 +1,95 @@ +#include <string.h> +#include <message.h> + +CUserMessage::CUserMessage(): +m_iDataLength(0), +m_iBufLength(65536) +{ + m_pcBuffer = new char[m_iBufLength]; +} + +CUserMessage::CUserMessage(const int& len): +m_iDataLength(0), +m_iBufLength(len) +{ + if (m_iBufLength < 4) + m_iBufLength = 4; + + m_pcBuffer = new char[m_iBufLength]; +} + +CUserMessage::CUserMessage(const CUserMessage& msg): +m_iDataLength(msg.m_iDataLength), +m_iBufLength(msg.m_iBufLength) +{ + m_pcBuffer = new char[m_iBufLength]; + memcpy(m_pcBuffer, msg.m_pcBuffer, m_iDataLength + 4); +} + +CUserMessage::~CUserMessage() +{ + delete [] m_pcBuffer; +} + +int CUserMessage::resize(const int& len) +{ + m_iBufLength = len; + + if (m_iBufLength < m_iDataLength) + m_iBufLength = m_iDataLength; + + char* temp = new char[m_iBufLength]; + memcpy(temp, m_pcBuffer, m_iDataLength); + delete [] m_pcBuffer; + m_pcBuffer = temp; + + return m_iBufLength; +} + + +int32_t CRTMsg::getType() const +{ + return *(int32_t*)m_pcBuffer; +} + +void CRTMsg::setType(const int32_t& type) +{ + *(int32_t*)m_pcBuffer = type; +} + +char* CRTMsg::getData() const +{ + return m_pcBuffer + 4; +} + +void CRTMsg::setData(const int& offset, const char* data, const int& len) +{ + while (4 + offset + len > m_iBufLength) + resize(m_iBufLength << 1); + + memcpy(m_pcBuffer + 4 + offset, data, len); +} + + +int32_t CCBMsg::getType() const +{ + return *(int32_t*)m_pcBuffer; +} + +void CCBMsg::setType(const int32_t& type) +{ + *(int32_t*)m_pcBuffer = type; +} + +char* CCBMsg::getData() const +{ + return m_pcBuffer + 4; +} + +void CCBMsg::setData(const int& offset, const char* data, const int& len) +{ + while (4 + offset + len > m_iBufLength) + resize(m_iBufLength << 1); + + memcpy(m_pcBuffer + 4 + offset, data, len); +}