#ifndef ROOT_TMessage
#define ROOT_TMessage

//+SEQ,CopyRight,T=NOINCLUDE.

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TMessage                                                             //
//                                                                      //
// Message buffer class used for serializing objects and sending them   //
// over the network.                                                    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TBuffer
//*KEEP,TBuffer.
#include "TBuffer.h"
//*KEND.
#endif
#ifndef ROOT_MessageTypes
//*KEEP,MessageTypes,T=C++.
#include "MessageTypes.h"
//*KEND.
#endif


class TMessage : public TBuffer {

friend class TSocket;

private:
   UInt_t   fWhat;   //message type
   TClass  *fClass;  //if message is kMESS_OBJECT, pointer to object's class

   TMessage(void *buf, Int_t bufsize);   // only called by TSocket::Recv()
   void SetLength() const;               // only called by TSocket::Send()

public:
   TMessage(UInt_t what = kMESS_ANY);
   virtual ~TMessage();

   TClass  *GetClass() const { return fClass; }
   void     Reset();
   void     Reset(UInt_t what) { SetWhat(what); Reset(); }
   UInt_t   What() const { return fWhat; }
   void     SetWhat(UInt_t what);

   ClassDef(TMessage,0)  // Message buffer class
};

#endif