00001 //////////////////////////////////////////////////////////////////////////////// 00002 // Scorched3D (c) 2000-2009 00003 // 00004 // This file is part of Scorched3D. 00005 // 00006 // Scorched3D is free software; you can redistribute it and/or modify 00007 // it under the terms of the GNU General Public License as published by 00008 // the Free Software Foundation; either version 2 of the License, or 00009 // (at your option) any later version. 00010 // 00011 // Scorched3D is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU General Public License 00017 // along with Scorched3D; if not, write to the Free Software 00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 //////////////////////////////////////////////////////////////////////////////// 00020 00021 #ifndef _NETBUFFER_H_ 00022 #define _NETBUFFER_H_ 00023 00024 #include <lang/LangString.h> 00025 #include <common/FixedVector4.h> 00026 #include <common/FixedVector.h> 00027 #include <SDL/SDL.h> 00028 #ifdef __MACOSX__ 00029 #include <SDL_net/SDL_net.h> 00030 #else 00031 #include <SDL/SDL_net.h> 00032 #endif 00033 00034 class NetBuffer 00035 { 00036 public: 00037 NetBuffer(); 00038 NetBuffer(unsigned startSize, void *startBuffer = 0); 00039 NetBuffer(const NetBuffer &other); 00040 virtual ~NetBuffer(); 00041 00042 void reset(); 00043 void clear(); 00044 void resize(unsigned newBufferSize); 00045 void allocate(unsigned size); 00046 void setBufferUsed(unsigned size) { usedSize_ = size; } 00047 00048 void addToBuffer(Vector &vector); 00049 void addToBuffer(FixedVector &vector); 00050 void addToBuffer(FixedVector4 &vector); 00051 void addToBuffer(const char *add); 00052 void addToBuffer(std::string &string); 00053 void addToBuffer(const std::string &string); 00054 void addToBuffer(LangString &string); 00055 void addToBuffer(const LangString &string); 00056 void addToBuffer(const char add); 00057 void addToBuffer(const int add); 00058 void addToBuffer(const float add); 00059 void addToBuffer(const bool add); 00060 void addToBuffer(const unsigned int add); 00061 void addToBuffer(const fixed add); 00062 void addToBuffer(NetBuffer &add); 00063 00064 bool compressBuffer(); 00065 bool uncompressBuffer(); 00066 00067 char *getBuffer() { return buffer_; } 00068 unsigned getTotalBufferSize() { return bufferSize_; } 00069 unsigned getBufferUsed() { return usedSize_; } 00070 00071 // Adds raw data to into the buffer 00072 // NOTE: Care must be taken to ensure that the added data 00073 // is in network byte ordering 00074 void addDataToBuffer(const void *add, unsigned len); 00075 00076 protected: 00077 char *buffer_; 00078 unsigned usedSize_; 00079 unsigned bufferSize_; 00080 00081 }; 00082 00083 class NetBufferReader 00084 { 00085 public: 00086 NetBufferReader(); 00087 NetBufferReader(NetBuffer &buffer); 00088 virtual ~NetBufferReader(); 00089 00090 void reset(); 00091 00092 unsigned getBufferSize() { return bufferSize_; } 00093 unsigned getReadSize() { return readSize_; } 00094 char *getBuffer() { return buffer_; } 00095 00096 void setBuffer(char *buffer) { buffer_ = buffer; } 00097 void setReadSize(unsigned size) { readSize_ = size; } 00098 void setBufferSize(unsigned size) { bufferSize_ = size; } 00099 00100 bool getFromBuffer(Vector &result); 00101 bool getFromBuffer(FixedVector &result); 00102 bool getFromBuffer(FixedVector4 &result); 00103 bool getFromBuffer(fixed &result); 00104 bool getFromBuffer(char &result); 00105 bool getFromBuffer(int &result); 00106 bool getFromBuffer(float &result); 00107 bool getFromBuffer(bool &result); 00108 bool getFromBuffer(unsigned int &result); 00109 bool getFromBuffer(std::string &string, bool safe = true); 00110 bool getFromBuffer(LangString &string); 00111 bool getFromBuffer(NetBuffer &buffer); 00112 00113 // Gets raw data from the buffer 00114 // NOTE: Care must be taken to ensure that the data 00115 // is in network byte ordering 00116 bool getDataFromBuffer(void *dest, int len); 00117 00118 protected: 00119 char *buffer_; 00120 unsigned bufferSize_; 00121 unsigned readSize_; 00122 00123 }; 00124 00125 #endif /* _NETBUFFER_H_ */
1.5.3