summaryrefslogblamecommitdiffstats
path: root/source/packets/cPacket.h
blob: 817aa1a277cdf420f2c8c3caaa680cc17873f5be (plain) (tree)
1
2
3
4
5
6
7
8
9
 

             


                         


 
 







                                  

                                                                                                                                                     






























                                                                                                                  

                                                                                                              
   
 


                                           


 

#pragma once

#include "../cSocket.h"
#include "../PacketID.h"





class cPacket
{
public:
	cPacket()
		: m_PacketID( 0 )
	{}
	virtual ~cPacket() {}

	virtual bool Parse( cSocket & a_Socket) {a_Socket.CloseSocket(); LOGERROR("Undefined NEW Parse function %x\n", m_PacketID ); return false; }
	virtual bool Send( cSocket & a_Socket)  {a_Socket.CloseSocket(); LOGERROR("Undefined NEW Send function %x\n",  m_PacketID ); return false; }
	virtual cPacket* Clone() const = 0;

	unsigned char m_PacketID;
	cSocket m_Socket; // Current socket being used
protected:
	bool ReadString	( std::string & a_OutString );
	bool ReadString16( std::string & a_OutString );
	bool ReadShort	( short & a_Short );
	bool ReadInteger(int & a_OutInteger );
	bool ReadInteger(unsigned int & a_OutInteger );
	bool ReadFloat	( float & a_OutFloat );
	bool ReadDouble	( double & a_OutDouble );
	bool ReadByte	( char & a_OutByte );
	bool ReadByte	( unsigned char & a_OutByte );
	bool ReadLong	( long long & a_OutLong );
	bool ReadBool	( bool & a_OutBool );

	void AppendString	( std::string & a_String,	char* a_Dst, unsigned int & a_Iterator );
	void AppendString16 ( std::string & a_String,	char* a_Dst, unsigned int & a_Iterator );
	void AppendShort	( short a_Short,			char* a_Dst, unsigned int & a_Iterator );
	void AppendShort	( unsigned short a_Short,	char* a_Dst, unsigned int & a_Iterator );
	void AppendInteger	( int a_Integer,			char* a_Dst, unsigned int & a_Iterator );
	void AppendInteger	( unsigned int a_Integer,	char* a_Dst, unsigned int & a_Iterator );
	void AppendFloat	( float a_Float,			char* a_Dst, unsigned int & a_Iterator );
	void AppendDouble	( double & a_Double,		char* a_Dst, unsigned int & a_Iterator );
	void AppendByte		( char a_Byte,				char* a_Dst, unsigned int & a_Iterator );
	void AppendLong		( long long & a_Long,		char* a_Dst, unsigned int & a_Iterator );
	void AppendBool		( bool a_Bool,				char* a_Dst, unsigned int & a_Iterator );
	void AppendData		( char* a_Data, unsigned int a_Size, char* a_Dst, unsigned int & a_Iterator );

public:
	static int SendData( cSocket & a_Socket, const char* a_Message, unsigned int a_Size, int a_Options );
	static int RecvAll( cSocket & a_Socket, char* a_Data, unsigned int a_Size, int a_Options );
};

typedef std::list <cPacket*>  PacketList;
typedef std::deque<cPacket *> PacketQueue;