00001 #ifndef _AMQMethodBody_
00002 #define _AMQMethodBody_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "amqp_types.h"
00025 #include "AMQBody.h"
00026 #include "qpid/framing/ProtocolVersion.h"
00027 #include "qpid/shared_ptr.h"
00028
00029 #include <ostream>
00030
00031 #include <assert.h>
00032
00033 namespace qpid {
00034 namespace framing {
00035
00036 class Buffer;
00037 class AMQP_ServerOperations;
00038 class MethodBodyConstVisitor;
00039
00040 class AMQMethodBody : public AMQBody {
00041 public:
00042 AMQMethodBody() {}
00043 virtual ~AMQMethodBody();
00044
00045 virtual void accept(MethodBodyConstVisitor&) const = 0;
00046
00047 virtual MethodId amqpMethodId() const = 0;
00048 virtual ClassId amqpClassId() const = 0;
00049 virtual bool isContentBearing() const = 0;
00050 virtual bool resultExpected() const = 0;
00051 virtual bool responseExpected() const = 0;
00052
00053 template <class T> bool isA() const {
00054 return amqpClassId()==T::CLASS_ID && amqpMethodId()==T::METHOD_ID;
00055 }
00056
00057 virtual uint32_t size() const = 0;
00058 virtual uint8_t type() const { return METHOD_BODY; }
00059
00060 virtual bool isSync() const { return false; }
00061 virtual void setSync(bool) const { }
00062
00063 AMQMethodBody* getMethod() { return this; }
00064 const AMQMethodBody* getMethod() const { return this; }
00065 void accept(AMQBodyConstVisitor& v) const { v.visit(*this); }
00066 };
00067
00068
00069 }}
00070
00071
00072 #endif