#include <ArBasePacket.h>
Inheritance diagram for ArBasePacket:
This class is a base class for all packets... most software will never need to use this class, it is there mostly to help people do more advanced client and server communications.
All of the functions are virtual so it can be completely overridden if desired... but the few most likely ones to be overridden are empty and makeFinal...
The theory of the packet works like this, the packet has a buffer, headerLength, footer length, readLength, length, and a maxLength. When the packet is initialized it is given a buffer and its maxLength. All of the functions that are somethingToBuf put data in at the current length of the packet, and advance the length. All of the functions that do bufToSomething get the data from where readLength points, and advance read length. If bufToSomething would go beyond the data length of the packet it returns a 0 (note that this includes if it goes into the footer length). resetRead sets readLength back to the header (since no one outside of the person who writes the class should touch the header). empty likewise sets the length back to the header since the header will be calculated in the finalizePacket method.
The base class and most classes of this kind will have an integer before the string, denoting the strings length... this is hidden by the function calls, but something someone may want to be aware of... it should not matter much as this same packet class should be used on both sides.
Uses of this class that don't get newed and deleted a lot can just go ahead and use the constructor with buf = NULL, as this will have the packet manage its own memory, making life easier.
Public Member Functions | |
ArBasePacket (const ArBasePacket &other) | |
Copy constructor. | |
ArBasePacket (ArTypes::UByte2 bufferSize=0, ArTypes::UByte2 headerLength=0, char *buf=NULL, ArTypes::UByte2 footerLength=0) | |
Constructor. | |
virtual ArTypes::Byte | bufToByte (void) |
Gets a ArTypes::Byte from the buffer. | |
virtual ArTypes::Byte2 | bufToByte2 (void) |
Gets a ArTypes::Byte2 from the buffer. | |
virtual ArTypes::Byte4 | bufToByte4 (void) |
Gets a ArTypes::Byte4 from the buffer. | |
virtual void | bufToData (unsigned char *data, int length) |
Gets length bytes from buffer and puts them into data. | |
virtual void | bufToData (char *data, int length) |
Gets length bytes from buffer and puts them into data. | |
virtual void | bufToStr (char *buf, int len) |
Gets a string from the buffer. | |
virtual ArTypes::UByte | bufToUByte (void) |
Gets a ArTypes::UByte from the buffer. | |
virtual ArTypes::UByte2 | bufToUByte2 (void) |
Gets a ArTypes::UByte2 from the buffer. | |
virtual ArTypes::UByte4 | bufToUByte4 (void) |
Gets a ArTypes::UByte4 from the buffer. | |
virtual void | byte2ToBuf (ArTypes::Byte2 val) |
Puts ArTypes::Byte2 into packets buffer. | |
virtual void | byte4ToBuf (ArTypes::Byte4 val) |
Puts ArTypes::Byte4 into packets buffer. | |
virtual void | byteToBuf (ArTypes::Byte val) |
Puts ArTypes::Byte into packets buffer. | |
virtual void | dataToBuf (const unsigned char *data, int length) |
Copies length bytes from data into packet buffer. | |
virtual void | dataToBuf (const char *data, int length) |
Copies length bytes from data into packet buffer. | |
virtual void | duplicatePacket (ArBasePacket *packet) |
Makes this packet a duplicate of another packet. | |
virtual void | empty (void) |
resets the length for more data to be added | |
virtual void | finalizePacket (void) |
MakeFinals the packet in preparation for sending, must be done. | |
virtual const char * | getBuf (void) |
Gets a pointer to the buffer the packet uses. | |
virtual ArTypes::UByte2 | getDataLength (void) |
Gets the length of the data in the packet. | |
virtual ArTypes::UByte2 | getDataReadLength (void) |
Gets how far into the data of the packet that has been read. | |
virtual ArTypes::UByte2 | getFooterLength (void) |
Gets the length of the header. | |
virtual ArTypes::UByte2 | getHeaderLength (void) |
Gets the length of the header. | |
virtual ArTypes::UByte2 | getLength (void) |
Gets the total length of the packet. | |
virtual ArTypes::UByte2 | getMaxLength (void) |
Gets the maximum length packet. | |
virtual ArTypes::UByte2 | getReadLength (void) |
Gets how far into the packet that has been read. | |
virtual bool | isValid (void) |
Returns whether the packet is valid, i.e. no error has occurred when reading/writing. | |
virtual void | log (void) |
ArLogs the hex and decimal values of each byte of the packet, and possibly extra metadata as well. | |
ArBasePacket & | operator= (const ArBasePacket &other) |
Assignment operator. | |
virtual void | printHex (void) |
ArLogs the hex value of each byte in the packet. | |
virtual void | resetRead (void) |
Restart the reading process. | |
virtual void | resetValid () |
Resets the valid state of the packet. | |
virtual void | setBuf (char *buf, ArTypes::UByte2 bufferSize) |
Sets the buffer the packet is using. | |
virtual bool | setHeaderLength (ArTypes::UByte2 length) |
Sets the length of the header. | |
virtual bool | setLength (ArTypes::UByte2 length) |
Sets the length of the packet. | |
virtual void | setMaxLength (ArTypes::UByte2 bufferSize) |
Sets the maximum buffer size (if new size is <= current does nothing). | |
virtual void | setReadLength (ArTypes::UByte2 readLength) |
Sets the read length. | |
virtual void | strNToBuf (const char *str, int length) |
Copies the given number of bytes from str into packet buffer. | |
virtual void | strToBuf (const char *str) |
Puts a NULL-terminated string into packet buffer. | |
virtual void | strToBufPadded (const char *str, int length) |
Copies length bytes from str, if str ends before length, pads data with 0s. | |
virtual void | uByte2ToBuf (ArTypes::UByte2 val) |
Puts ArTypes::UByte2 into packet buffer. | |
virtual void | uByte4ToBuf (ArTypes::UByte4 val) |
Puts ArTypes::UByte 4 into packet buffer. | |
virtual void | uByteToBuf (ArTypes::UByte val) |
Puts ArTypes::UByte into packets buffer. | |
virtual | ~ArBasePacket () |
Destructor. | |
Protected Member Functions | |
bool | hasWriteCapacity (int bytes) |
Returns true if there is enough room in the packet to add the specified number of bytes. | |
bool | isNextGood (int bytes) |
Protected Attributes | |
char * | myBuf |
ArTypes::UByte2 | myFooterLength |
ArTypes::UByte2 | myHeaderLength |
bool | myIsValid |
ArTypes::UByte2 | myLength |
ArTypes::UByte2 | myMaxLength |
bool | myOwnMyBuf |
ArTypes::UByte2 | myReadLength |
virtual void ArBasePacket::strNToBuf | ( | const char * | str, | |
int | length | |||
) | [virtual] |
Copies the given number of bytes from str into packet buffer.