llsdmessagebuilder.h

Go to the documentation of this file.
00001 
00032 #ifndef LL_LLSDMESSAGEBUILDER_H
00033 #define LL_LLSDMESSAGEBUILDER_H
00034 
00035 #include <map>
00036 
00037 #include "llmessagebuilder.h"
00038 #include "llmsgvariabletype.h"
00039 #include "llsd.h"
00040 
00041 class LLMessageTemplate;
00042 class LLMsgData;
00043 
00044 class LLSDMessageBuilder : public LLMessageBuilder
00045 {
00046 public:
00047 
00048         //CLASS_LOG_TYPE(LLSDMessageBuilder);
00049         
00050         LLSDMessageBuilder();
00051         virtual ~LLSDMessageBuilder();
00052 
00053         virtual void newMessage(const char* name);
00054 
00055         virtual void nextBlock(const char* blockname);
00056         virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror...
00057 
00059         virtual void addBinaryData(
00060                 const char* varname,
00061                 const void* data, 
00062                 S32 size);
00063         virtual void addBOOL(const char* varname, BOOL b);
00064         virtual void addS8(const char* varname, S8 s);
00065         virtual void addU8(const char* varname, U8 u);
00066         virtual void addS16(const char* varname, S16 i);
00067         virtual void addU16(const char* varname, U16 i);
00068         virtual void addF32(const char* varname, F32 f);
00069         virtual void addS32(const char* varname, S32 s);
00070         virtual void addU32(const char* varname, U32 u);
00071         virtual void addU64(const char* varname, U64 lu);
00072         virtual void addF64(const char* varname, F64 d);
00073         virtual void addVector3(const char* varname, const LLVector3& vec);
00074         virtual void addVector4(const char* varname, const LLVector4& vec);
00075         virtual void addVector3d(const char* varname, const LLVector3d& vec);
00076         virtual void addQuat(const char* varname, const LLQuaternion& quat);
00077         virtual void addUUID(const char* varname, const LLUUID& uuid);
00078         virtual void addIPAddr(const char* varname, const U32 ip);
00079         virtual void addIPPort(const char* varname, const U16 port);
00080         virtual void addString(const char* varname, const char* s);
00081         virtual void addString(const char* varname, const std::string& s);
00082 
00083         virtual BOOL isMessageFull(const char* blockname) const;
00084         virtual void compressMessage(U8*& buf_ptr, U32& buffer_length);
00085 
00086         virtual BOOL isBuilt() const;
00087         virtual BOOL isClear() const;
00088         virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data);
00091         virtual void clearMessage();
00092 
00093         // TODO: babbage: remove this horror.
00094         virtual void setBuilt(BOOL b);
00095 
00096         virtual S32 getMessageSize();
00097         virtual const char* getMessageName() const;
00098 
00099         virtual void copyFromMessageData(const LLMsgData& data);
00100 
00101         virtual void copyFromLLSD(const LLSD& msg);
00102 
00103         const LLSD& getMessage() const;
00104 private:
00105 
00106         /* mCurrentMessage is of the following format:
00107                 mCurrentMessage = { 'block_name1' : [ { 'block1_field1' : 'b1f1_data',
00108                                                                                                 'block1_field2' : 'b1f2_data',
00109                                                                                                 ...
00110                                                                                                 'block1_fieldn' : 'b1fn_data'},
00111                                                                                         { 'block2_field1' : 'b2f1_data',
00112                                                                                                 'block2_field2' : 'b2f2_data',
00113                                                                                                 ...
00114                                                                                                 'block2_fieldn' : 'b2fn_data'},
00115                                                                                         ...                                                                                     
00116                                                                                         { 'blockm_field1' : 'bmf1_data',
00117                                                                                                 'blockm_field2' : 'bmf2_data',
00118                                                                                                 ...
00119                                                                                                 'blockm_fieldn' : 'bmfn_data'} ],
00120                                                         'block_name2' : ...,
00121                                                         ...
00122                                                         'block_namem' } */
00123         LLSD mCurrentMessage;
00124         LLSD* mCurrentBlock;
00125         std::string mCurrentMessageName;
00126         std::string mCurrentBlockName;
00127         BOOL mbSBuilt;
00128         BOOL mbSClear;
00129 };
00130 
00131 #endif // LL_LLSDMESSAGEBUILDER_H

Generated on Fri May 16 08:32:30 2008 for SecondLife by  doxygen 1.5.5