00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _ACTIVEMQ_COMMANDS_ACTIVEMQBYTESMESSAGE_H_
00019 #define _ACTIVEMQ_COMMANDS_ACTIVEMQBYTESMESSAGE_H_
00020
00021 #include <activemq/util/Config.h>
00022 #include <activemq/commands/ActiveMQMessageTemplate.h>
00023 #include <decaf/io/ByteArrayOutputStream.h>
00024 #include <decaf/io/DataInputStream.h>
00025 #include <decaf/io/DataOutputStream.h>
00026 #include <cms/BytesMessage.h>
00027 #include <vector>
00028 #include <string>
00029 #include <memory>
00030
00031 namespace activemq{
00032 namespace commands{
00033
00034 class AMQCPP_API ActiveMQBytesMessage :
00035 public ActiveMQMessageTemplate< cms::BytesMessage > {
00036 private:
00037
00042 decaf::io::ByteArrayOutputStream* bytesOut;
00043
00047 mutable std::auto_ptr<decaf::io::DataInputStream> dataIn;
00048
00052 std::auto_ptr<decaf::io::DataOutputStream> dataOut;
00053
00057 mutable int length;
00058
00059 public:
00060
00061 const static unsigned char ID_ACTIVEMQBYTESMESSAGE = 24;
00062
00063 private:
00064
00065 ActiveMQBytesMessage( const ActiveMQBytesMessage& );
00066 ActiveMQBytesMessage& operator= ( const ActiveMQBytesMessage& );
00067
00068 public:
00069
00070 ActiveMQBytesMessage();
00071
00072 virtual ~ActiveMQBytesMessage() throw();
00073
00074 virtual unsigned char getDataStructureType() const;
00075
00076 virtual ActiveMQBytesMessage* cloneDataStructure() const;
00077
00078 virtual void copyDataStructure( const DataStructure* src );
00079
00080 virtual std::string toString() const;
00081
00082 virtual bool equals( const DataStructure* value ) const;
00083
00084 public:
00085
00086 virtual cms::BytesMessage* clone() const {
00087 ActiveMQBytesMessage* clone = this->cloneDataStructure();
00088 clone->setReadOnlyBody(false);
00089 clone->setReadOnlyProperties(false);
00090 return dynamic_cast<cms::BytesMessage*>(clone);
00091 }
00092
00093 virtual void clearBody();
00094
00095 virtual void onSend();
00096
00097 public:
00098
00099 virtual void setBodyBytes( const unsigned char* buffer, int numBytes );
00100
00101 virtual unsigned char* getBodyBytes() const;
00102
00103 virtual int getBodyLength() const;
00104
00105 virtual void reset();
00106
00107 virtual bool readBoolean() const;
00108
00109 virtual void writeBoolean( bool value );
00110
00111 virtual unsigned char readByte() const;
00112
00113 virtual void writeByte( unsigned char value );
00114
00115 virtual int readBytes( std::vector<unsigned char>& value ) const;
00116
00117 virtual void writeBytes( const std::vector<unsigned char>& value );
00118
00119 virtual int readBytes( unsigned char* buffer, int length ) const;
00120
00121 virtual void writeBytes( const unsigned char* value, int offset, int length );
00122
00123 virtual char readChar() const;
00124
00125 virtual void writeChar( char value );
00126
00127 virtual float readFloat() const;
00128
00129 virtual void writeFloat( float value );
00130
00131 virtual double readDouble() const;
00132
00133 virtual void writeDouble( double value );
00134
00135 virtual short readShort() const;
00136
00137 virtual void writeShort( short value );
00138
00139 virtual unsigned short readUnsignedShort() const;
00140
00141 virtual void writeUnsignedShort( unsigned short value );
00142
00143 virtual int readInt() const;
00144
00145 virtual void writeInt( int value );
00146
00147 virtual long long readLong() const;
00148
00149 virtual void writeLong( long long value );
00150
00151 virtual std::string readString() const;
00152
00153 virtual void writeString( const std::string& value );
00154
00155 virtual std::string readUTF() const;
00156
00157 virtual void writeUTF( const std::string& value );
00158
00159 private:
00160
00161 void storeContent();
00162
00163 void initializeReading() const;
00164
00165 void initializeWriting();
00166
00167 };
00168
00169 }}
00170
00171 #endif