www.pudn.com > WBDraw.rar > Packet.cpp
#include "stdafx.h"
#include "packet.h"
CJInPacket& CReadPacket::operator >>(const char *&str)
{
uint16 len ;
operator >> ( len ) ;
if( len > 0 && m_pCursor <= m_pData + m_dLen - len && !m_pCursor[len - 1 ] ) {
str = m_pCursor ;
m_pCursor += len ;
}
else{
str = "" ;
}
return (*this ) ;
}
CJInPacket& CReadPacket::operator >>(uint8 &data)
{
if (m_pCursor <= m_pData + m_dLen - sizeof(data)) {
data = *(uint8 *) m_pCursor;
m_pCursor += sizeof(data);
} else
data = 0;
return (*this ) ;
}
CJInPacket& CReadPacket::operator >>(uint16 &data)
{
if (m_pCursor <= m_pData + m_dLen - sizeof(data)) {
data = ntohs(*(uint16 *) m_pCursor);
m_pCursor += sizeof(data);
} else
data = 0;
return (*this ) ;
}
CJInPacket& CReadPacket::operator >>(uint32 &data)
{
if (m_pCursor <= m_pData + m_dLen - sizeof(data)) {
data = ntohl(*(uint32 *) m_pCursor);
m_pCursor += sizeof(data);
} else
data = 0;
return (*this ) ;
}
CJInPacket& CReadPacket::operator >>(uint64 &data)
{
if (m_pCursor <= m_pData + m_dLen - sizeof(data)) {
data = *(uint64 *) m_pCursor;
m_pCursor += sizeof(data);
} else
data = 0;
return (*this ) ;
}
const char* CReadPacket::readData( uint32 &n )
{
char* ret = NULL ;
operator >> (n) ;
if( n > 0 && m_pCursor <= m_pData + m_dLen - n ) {
ret = m_pCursor ;
m_pCursor += n ;
return ret ;
}
return ret ;
}
CJOutPacket& CWritePacket::operator <<(const char *str)
{
uint16 len = strlen(str) + 1;
if( m_pCursor <= m_pData + MAX_JPACKET_SIZE - len - sizeof( len ) ){
operator<< ( len ) ;
strcpy( m_pCursor , str ) ;
m_pCursor += len ;
}
return (*this ) ;
}
CJOutPacket& CWritePacket::operator << (uint8 data)
{
if (m_pCursor <= m_pData + MAX_JPACKET_SIZE - sizeof(data)) {
*(uint8 *) m_pCursor = data;
m_pCursor += sizeof(data);
}
return (*this ) ;
}
CJOutPacket& CWritePacket::operator <<(uint16 data)
{
if (m_pCursor <= m_pData + MAX_JPACKET_SIZE - sizeof(data)) {
*(uint16 *) m_pCursor = htons(data);
m_pCursor += sizeof(data);
}
return (*this ) ;
}
CJOutPacket& CWritePacket::operator <<(uint32 data)
{
if (m_pCursor <= m_pData + MAX_JPACKET_SIZE - sizeof(data)) {
*(uint32 *) m_pCursor = htonl(data);
m_pCursor += sizeof(data);
}
return (*this ) ;
}
CJOutPacket& CWritePacket::operator <<(uint64 data)
{
if (m_pCursor <= m_pData + MAX_JPACKET_SIZE - sizeof(data)) {
*(uint64 *) m_pCursor = data ;
m_pCursor += sizeof(data);
}
return (*this ) ;
}
void CWritePacket::writeData( const char* buf , uint32 n ,BOOL bf)
{
if( m_pCursor <= m_pData + MAX_JPACKET_SIZE - n - sizeof( n )) {
operator<< (n) ;
memcpy( m_pCursor , buf , n ) ;
m_pCursor += n ;
}
}