00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_MESSAGE_H
00027 #define NL_MESSAGE_H
00028
00029 #include "nel/misc/types_nl.h"
00030
00031 #include <sstream>
00032
00033 #include "nel/misc/mem_stream.h"
00034
00035 #include "nel/misc/string_id_array.h"
00036
00037 #include <vector>
00038
00039 namespace NLNET
00040 {
00041
00042
00056 class CMessage : public NLMISC::CMemStream
00057 {
00058 public:
00059
00060 enum TStreamFormat { UseDefault, Binary, String };
00061
00062 CMessage (NLMISC::CStringIdArray &sida, const std::string &name = "", bool inputStream = false, TStreamFormat streamformat = UseDefault, uint32 defaultCapacity = 1000);
00063
00064 CMessage (const std::string &name = "", bool inputStream = false, TStreamFormat streamformat = UseDefault, uint32 defaultCapacity = 1000);
00065
00066 CMessage (NLMISC::CMemStream &memstr);
00067
00069 CMessage (const CMessage &other);
00070
00072 CMessage &operator= (const CMessage &other);
00073
00075 void setType (NLMISC::CStringIdArray::TStringId id);
00076
00078 void setType (const std::string &name);
00079
00081 uint32 getHeaderSize ();
00082
00083
00084 void readType ();
00085
00086
00087 bool typeIsSet () const;
00088
00089
00090 void invert()
00091 {
00092 CMemStream::invert();
00093
00094 if ( isReading() )
00095 {
00096
00097 _TypeSet = false;
00098 readType();
00099 }
00100
00101 }
00102
00103
00104 void clear ();
00105
00107 std::string getName () const;
00108
00110 NLMISC::CStringIdArray::TStringId getId () const;
00111
00115 std::string toString () const;
00116
00118 static void setDefaultStringMode( bool stringmode ) { _DefaultStringMode = stringmode; }
00119
00120 bool TypeHasAnId;
00121 bool TypeHasAName;
00122
00123 protected:
00124
00126 void init( const std::string &name, TStreamFormat streamformat );
00127
00128 private:
00129 bool _TypeSet;
00130 NLMISC::CStringIdArray *_SIDA;
00131
00132 std::string _Name;
00133 NLMISC::CStringIdArray::TStringId _Id;
00134
00135
00136 uint32 _HeaderSize;
00137
00138
00139 static bool _DefaultStringMode;
00140 };
00141
00142 }
00143
00144 #endif // NL_MESSAGE_H
00145
00146