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 ; 
	} 
}