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