www.pudn.com > WBDraw.rar > Packet.h


#ifndef __packet_h__ 
#define __packet_h__ 
 
#include "Winsock2.h" 
 
typedef unsigned char uint8; 
typedef unsigned short uint16; 
typedef unsigned long uint32; 
typedef unsigned __int64 uint64; 
 
# define MAX_JPACKET_SIZE 51200 
class CPacket  { 
//public: 
//	CJPacket(){}; 
//	virtual ~CJPacket(){}; 
public: 
	virtual int getSize( ) = 0 ; 
	virtual const char* getData( ) = 0 ; 
}; 
#endif 
 
/*********************** 
**  接收数据包抽象基类 
***********************/ 
 
class CJInPacket : public CPacket { 
public: 
	virtual CJInPacket& operator >>(const char *&str) = 0; 
	virtual CJInPacket& operator >>( uint8 &data ) = 0 ; 
	virtual CJInPacket& operator >>( uint16 &data ) = 0 ; 
	virtual CJInPacket& operator >>( uint32 &data ) = 0 ; 
	virtual CJInPacket& operator >>( uint64 &data ) = 0 ; 
	virtual uint16 getCmd() = 0 ; 
	virtual const char* readData( uint32 &n ) = 0 ; 
	virtual BOOL IsDataPacket()=0; 
} ; 
 
/************************ 
**  发送数据包抽象基类 
************************/ 
 
class CJOutPacket : public CPacket { 
public: 
	virtual BOOL IsDataPacket()=0; 
	virtual BOOL SetStreadPack(BOOL bDataBlock)=0; 
	virtual CJOutPacket& operator <<(const char *str) = 0; 
	virtual CJOutPacket& operator <<( uint8 data ) = 0 ; 
	virtual CJOutPacket& operator <<( uint16 data ) = 0; 
	virtual CJOutPacket& operator <<( uint32 data ) = 0 ; 
	virtual CJOutPacket& operator <<( uint64 data ) = 0 ; 
	virtual void writeData( const char* buf ,  uint32 n ,BOOL bForcetoDataBlock=false) = 0 ; 
} ; 
 
class CWritePacket : public CJOutPacket { 
public : 
	CWritePacket() { 
		m_pCursor = m_pData ; 
	} 
 
	void Reset(){m_pCursor = m_pData;}; 
	 
	virtual CJOutPacket &operator <<(const char *str) ; 
	virtual CJOutPacket &operator <<( uint8 data ) ; 
	virtual CJOutPacket &operator <<( uint16 data ) ; 
	virtual CJOutPacket &operator <<( uint32 data ) ; 
	virtual CJOutPacket &operator <<( uint64 data ) ; 
	virtual BOOL IsDataPacket(){return false;}; 
	virtual BOOL SetStreadPack(BOOL bDataBlock){return false;}; 
	virtual void writeData( const char* buf ,  uint32 n ,BOOL bForcetoDataBlock=false) ; 
 
	virtual int getSize(){ 
		return m_pCursor - m_pData  ; 
	} 
 
	virtual const char* getData( ){ 
		return m_pData ; 
	} 
	 
	char*	m_pCursor ; 
	char	m_pData[MAX_JPACKET_SIZE] ; 
	int		m_dLen ; 
	 
} ; 
 
class CReadPacket:public CJInPacket{ 
public: 
public : 
	CReadPacket( char* d , int len ){ 
 
		m_pData = d ; 
		m_pCursor = m_pData ; 
		m_dLen = len ; 
	} ; 
	virtual CJInPacket& operator >>(const char *&str) ; 
	virtual CJInPacket& operator >>( uint8 &data )  ; 
	virtual CJInPacket& operator >>( uint16 &data ) ; 
	virtual CJInPacket& operator >>( uint32 &data ) ; 
	virtual CJInPacket& operator >>( uint64 &data ) ; 
	virtual const char* readData( uint32 &n ) ; 
	virtual int getSize(){ 
		return m_dLen ; 
	} 
	virtual const char* getData( ){ 
		return m_pData ; 
	} 
	char*	m_pCursor ; 
	char*	m_pData ; 
	int		m_dLen ; 
	virtual uint16 getCmd(){return 0;} ; 
	virtual BOOL IsDataPacket(){return false;}; 
} ;