00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _ACTIVEMQ_COMMANDS_ACTIVEMQSTREAMMESSAGE_H_
00019 #define _ACTIVEMQ_COMMANDS_ACTIVEMQSTREAMMESSAGE_H_
00020
00021 #include <activemq/util/Config.h>
00022 #include <activemq/commands/ActiveMQMessage.h>
00023 #include <activemq/commands/ActiveMQMessageTemplate.h>
00024 #include <cms/StreamMessage.h>
00025 #include <cms/MessageNotWriteableException.h>
00026 #include <cms/MessageNotReadableException.h>
00027 #include <cms/MessageFormatException.h>
00028 #include <cms/MessageEOFException.h>
00029 #include <decaf/lang/exceptions/NullPointerException.h>
00030 #include <decaf/io/DataInputStream.h>
00031 #include <decaf/io/DataOutputStream.h>
00032 #include <string>
00033 #include <memory>
00034
00035 namespace activemq {
00036 namespace commands {
00037
00038 class ActiveMQStreamMessageImpl;
00039
00040 class AMQCPP_API ActiveMQStreamMessage: public ActiveMQMessageTemplate<cms::StreamMessage> {
00041 private:
00042
00043 ActiveMQStreamMessageImpl* impl;
00044
00045 mutable std::auto_ptr<decaf::io::DataInputStream> dataIn;
00046 mutable std::auto_ptr<decaf::io::DataOutputStream> dataOut;
00047
00048 public:
00049
00050 const static unsigned char ID_ACTIVEMQSTREAMMESSAGE = 27;
00051
00052 private:
00053
00054 ActiveMQStreamMessage(const ActiveMQStreamMessage&);
00055 ActiveMQStreamMessage& operator=(const ActiveMQStreamMessage&);
00056
00057 public:
00058
00059 ActiveMQStreamMessage();
00060 virtual ~ActiveMQStreamMessage() throw ();
00061
00062 virtual unsigned char getDataStructureType() const;
00063
00064 virtual ActiveMQStreamMessage* cloneDataStructure() const;
00065
00066 virtual void copyDataStructure(const DataStructure* src);
00067
00068 virtual std::string toString() const;
00069
00070 virtual bool equals(const DataStructure* value) const;
00071
00072 virtual void onSend();
00073
00074 public:
00075
00076 virtual cms::StreamMessage* clone() const {
00077 ActiveMQStreamMessage* clone = this->cloneDataStructure();
00078 clone->setReadOnlyBody(false);
00079 clone->setReadOnlyProperties(false);
00080 return dynamic_cast<cms::StreamMessage*>(clone);
00081 }
00082
00083 virtual void clearBody();
00084
00085 public:
00086
00087 virtual ValueType getNextValueType() const;
00088
00089 virtual void reset();
00090
00091 virtual bool readBoolean() const;
00092
00093 virtual void writeBoolean(bool value);
00094
00095 virtual unsigned char readByte() const;
00096
00097 virtual void writeByte(unsigned char value);
00098
00099 virtual int readBytes(std::vector<unsigned char>& value) const;
00100
00101 virtual void writeBytes(const std::vector<unsigned char>& value);
00102
00103 virtual int readBytes(unsigned char* buffer, int length) const;
00104
00105 virtual void writeBytes(const unsigned char* value, int offset, int length);
00106
00107 virtual char readChar() const;
00108
00109 virtual void writeChar(char value);
00110
00111 virtual float readFloat() const;
00112
00113 virtual void writeFloat(float value);
00114
00115 virtual double readDouble() const;
00116
00117 virtual void writeDouble(double value);
00118
00119 virtual short readShort() const;
00120
00121 virtual void writeShort(short value);
00122
00123 virtual unsigned short readUnsignedShort() const;
00124
00125 virtual void writeUnsignedShort(unsigned short value);
00126
00127 virtual int readInt() const;
00128
00129 virtual void writeInt(int value);
00130
00131 virtual long long readLong() const;
00132
00133 virtual void writeLong(long long value);
00134
00135 virtual std::string readString() const;
00136
00137 virtual void writeString(const std::string& value);
00138
00139 private:
00140
00141 void storeContent();
00142
00143 void initializeReading() const;
00144
00145 void initializeWriting();
00146
00147 };
00148
00149 }}
00150
00151 #endif