You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2014/01/25 00:25:34 UTC
svn commit: r1561226 [2/2] -
/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/
Modified: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/StreamMessage.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/StreamMessage.cs?rev=1561226&r1=1561225&r2=1561226&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/StreamMessage.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/StreamMessage.cs Fri Jan 24 23:25:34 2014
@@ -19,875 +19,877 @@ using System;
using System.IO;
using Apache.NMS.Util;
+// TODO: Any Amqp support?
+
namespace Apache.NMS.Amqp
{
- public class StreamMessage : BaseMessage, IStreamMessage
- {
- private EndianBinaryReader dataIn = null;
- private EndianBinaryWriter dataOut = null;
- private MemoryStream byteBuffer = null;
- private int bytesRemaining = -1;
-
- public bool ReadBoolean()
- {
- InitializeReading();
-
- try
- {
- long startingPos = this.byteBuffer.Position;
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.BOOLEAN_TYPE)
- {
- return this.dataIn.ReadBoolean();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return Boolean.Parse(this.dataIn.ReadString16());
- }
- else if(type == PrimitiveMap.NULL)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new NMSException("Cannot convert Null type to a bool");
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a Boolean type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public byte ReadByte()
- {
- InitializeReading();
-
- try
- {
- long startingPos = this.byteBuffer.Position;
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.BYTE_TYPE)
- {
- return this.dataIn.ReadByte();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return Byte.Parse(this.dataIn.ReadString16());
- }
- else if(type == PrimitiveMap.NULL)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new NMSException("Cannot convert Null type to a byte");
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a Byte type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public char ReadChar()
- {
- InitializeReading();
-
- try
- {
- long startingPos = this.byteBuffer.Position;
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.CHAR_TYPE)
- {
- return this.dataIn.ReadChar();
- }
- else if(type == PrimitiveMap.NULL)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new NMSException("Cannot convert Null type to a char");
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a Char type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public short ReadInt16()
- {
- InitializeReading();
-
- try
- {
- long startingPos = this.byteBuffer.Position;
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.SHORT_TYPE)
- {
- return this.dataIn.ReadInt16();
- }
- else if(type == PrimitiveMap.BYTE_TYPE)
- {
- return this.dataIn.ReadByte();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return Int16.Parse(this.dataIn.ReadString16());
- }
- else if(type == PrimitiveMap.NULL)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new NMSException("Cannot convert Null type to a short");
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a Int16 type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public int ReadInt32()
- {
- InitializeReading();
-
- try
- {
- long startingPos = this.byteBuffer.Position;
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.INTEGER_TYPE)
- {
- return this.dataIn.ReadInt32();
- }
- else if(type == PrimitiveMap.SHORT_TYPE)
- {
- return this.dataIn.ReadInt16();
- }
- else if(type == PrimitiveMap.BYTE_TYPE)
- {
- return this.dataIn.ReadByte();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return Int32.Parse(this.dataIn.ReadString16());
- }
- else if(type == PrimitiveMap.NULL)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new NMSException("Cannot convert Null type to a int");
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a Int32 type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public long ReadInt64()
- {
- InitializeReading();
-
- try
- {
- long startingPos = this.byteBuffer.Position;
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.LONG_TYPE)
- {
- return this.dataIn.ReadInt64();
- }
- else if(type == PrimitiveMap.INTEGER_TYPE)
- {
- return this.dataIn.ReadInt32();
- }
- else if(type == PrimitiveMap.SHORT_TYPE)
- {
- return this.dataIn.ReadInt16();
- }
- else if(type == PrimitiveMap.BYTE_TYPE)
- {
- return this.dataIn.ReadByte();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return Int64.Parse(this.dataIn.ReadString16());
- }
- else if(type == PrimitiveMap.NULL)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new NMSException("Cannot convert Null type to a long");
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a Int64 type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public float ReadSingle()
- {
- InitializeReading();
-
- try
- {
- long startingPos = this.byteBuffer.Position;
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.FLOAT_TYPE)
- {
- return this.dataIn.ReadSingle();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return Single.Parse(this.dataIn.ReadString16());
- }
- else if(type == PrimitiveMap.NULL)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new NMSException("Cannot convert Null type to a float");
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a Single type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public double ReadDouble()
- {
- InitializeReading();
-
- try
- {
- long startingPos = this.byteBuffer.Position;
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.DOUBLE_TYPE)
- {
- return this.dataIn.ReadDouble();
- }
- else if(type == PrimitiveMap.FLOAT_TYPE)
- {
- return this.dataIn.ReadSingle();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return Single.Parse(this.dataIn.ReadString16());
- }
- else if(type == PrimitiveMap.NULL)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new NMSException("Cannot convert Null type to a double");
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a Double type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public string ReadString()
- {
- InitializeReading();
-
- long startingPos = this.byteBuffer.Position;
-
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.BIG_STRING_TYPE)
- {
- return this.dataIn.ReadString32();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return this.dataIn.ReadString16();
- }
- else if(type == PrimitiveMap.LONG_TYPE)
- {
- return this.dataIn.ReadInt64().ToString();
- }
- else if(type == PrimitiveMap.INTEGER_TYPE)
- {
- return this.dataIn.ReadInt32().ToString();
- }
- else if(type == PrimitiveMap.SHORT_TYPE)
- {
- return this.dataIn.ReadInt16().ToString();
- }
- else if(type == PrimitiveMap.FLOAT_TYPE)
- {
- return this.dataIn.ReadSingle().ToString();
- }
- else if(type == PrimitiveMap.DOUBLE_TYPE)
- {
- return this.dataIn.ReadDouble().ToString();
- }
- else if(type == PrimitiveMap.CHAR_TYPE)
- {
- return this.dataIn.ReadChar().ToString();
- }
- else if(type == PrimitiveMap.BYTE_TYPE)
- {
- return this.dataIn.ReadByte().ToString();
- }
- else if(type == PrimitiveMap.BOOLEAN_TYPE)
- {
- return this.dataIn.ReadBoolean().ToString();
- }
- else if(type == PrimitiveMap.NULL)
- {
- return null;
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a known type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public int ReadBytes(byte[] value)
- {
- InitializeReading();
-
- if(value == null)
- {
- throw new NullReferenceException("Passed Byte Array is null");
- }
-
- try
- {
- if(this.bytesRemaining == -1)
- {
- long startingPos = this.byteBuffer.Position;
- byte type = this.dataIn.ReadByte();
-
- if(type != PrimitiveMap.BYTE_ARRAY_TYPE)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Not a byte array");
- }
-
- this.bytesRemaining = this.dataIn.ReadInt32();
- }
- else if(this.bytesRemaining == 0)
- {
- this.bytesRemaining = -1;
- return -1;
- }
-
- if(value.Length <= this.bytesRemaining)
- {
- // small buffer
- this.bytesRemaining -= value.Length;
- this.dataIn.Read(value, 0, value.Length);
- return value.Length;
- }
- else
- {
- // big buffer
- int rc = this.dataIn.Read(value, 0, this.bytesRemaining);
- this.bytesRemaining = 0;
- return rc;
- }
- }
- catch(EndOfStreamException ex)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(ex);
- }
- catch(IOException ex)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(ex);
- }
- }
-
- public Object ReadObject()
- {
- InitializeReading();
-
- long startingPos = this.byteBuffer.Position;
-
- try
- {
- int type = this.dataIn.ReadByte();
-
- if(type == PrimitiveMap.BIG_STRING_TYPE)
- {
- return this.dataIn.ReadString32();
- }
- else if(type == PrimitiveMap.STRING_TYPE)
- {
- return this.dataIn.ReadString16();
- }
- else if(type == PrimitiveMap.LONG_TYPE)
- {
- return this.dataIn.ReadInt64();
- }
- else if(type == PrimitiveMap.INTEGER_TYPE)
- {
- return this.dataIn.ReadInt32();
- }
- else if(type == PrimitiveMap.SHORT_TYPE)
- {
- return this.dataIn.ReadInt16();
- }
- else if(type == PrimitiveMap.FLOAT_TYPE)
- {
- return this.dataIn.ReadSingle();
- }
- else if(type == PrimitiveMap.DOUBLE_TYPE)
- {
- return this.dataIn.ReadDouble();
- }
- else if(type == PrimitiveMap.CHAR_TYPE)
- {
- return this.dataIn.ReadChar();
- }
- else if(type == PrimitiveMap.BYTE_TYPE)
- {
- return this.dataIn.ReadByte();
- }
- else if(type == PrimitiveMap.BOOLEAN_TYPE)
- {
- return this.dataIn.ReadBoolean();
- }
- else if(type == PrimitiveMap.BYTE_ARRAY_TYPE)
- {
- int length = this.dataIn.ReadInt32();
- byte[] data = new byte[length];
- this.dataIn.Read(data, 0, length);
- return data;
- }
- else if(type == PrimitiveMap.NULL)
- {
- return null;
- }
- else
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw new MessageFormatException("Value is not a known type.");
- }
- }
- catch(FormatException e)
- {
- this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- catch(EndOfStreamException e)
- {
- throw NMSExceptionSupport.CreateMessageEOFException(e);
- }
- catch(IOException e)
- {
- throw NMSExceptionSupport.CreateMessageFormatException(e);
- }
- }
-
- public void WriteBoolean(bool value)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.BOOLEAN_TYPE);
- this.dataOut.Write(value);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteByte(byte value)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.BYTE_TYPE);
- this.dataOut.Write(value);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteBytes(byte[] value)
- {
- InitializeWriting();
- this.WriteBytes(value, 0, value.Length);
- }
-
- public void WriteBytes(byte[] value, int offset, int length)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.BYTE_ARRAY_TYPE);
- this.dataOut.Write((int) length);
- this.dataOut.Write(value, offset, length);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteChar(char value)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.CHAR_TYPE);
- this.dataOut.Write(value);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteInt16(short value)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.SHORT_TYPE);
- this.dataOut.Write(value);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteInt32(int value)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.INTEGER_TYPE);
- this.dataOut.Write(value);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteInt64(long value)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.LONG_TYPE);
- this.dataOut.Write(value);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteSingle(float value)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.FLOAT_TYPE);
- this.dataOut.Write(value);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteDouble(double value)
- {
- InitializeWriting();
- try
- {
- this.dataOut.Write(PrimitiveMap.DOUBLE_TYPE);
- this.dataOut.Write(value);
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteString(string value)
- {
- InitializeWriting();
- try
- {
- if(value.Length > 8192)
- {
- this.dataOut.Write(PrimitiveMap.BIG_STRING_TYPE);
- this.dataOut.WriteString32(value);
- }
- else
- {
- this.dataOut.Write(PrimitiveMap.STRING_TYPE);
- this.dataOut.WriteString16(value);
- }
- }
- catch(IOException e)
- {
- NMSExceptionSupport.Create(e);
- }
- }
-
- public void WriteObject(Object value)
- {
- InitializeWriting();
- if(value is System.Byte)
- {
- this.WriteByte((byte) value);
- }
- else if(value is Char)
- {
- this.WriteChar((char) value);
- }
- else if(value is Boolean)
- {
- this.WriteBoolean((bool) value);
- }
- else if(value is Int16)
- {
- this.WriteInt16((short) value);
- }
- else if(value is Int32)
- {
- this.WriteInt32((int) value);
- }
- else if(value is Int64)
- {
- this.WriteInt64((long) value);
- }
- else if(value is Single)
- {
- this.WriteSingle((float) value);
- }
- else if(value is Double)
- {
- this.WriteDouble((double) value);
- }
- else if(value is byte[])
- {
- this.WriteBytes((byte[]) value);
- }
- else if(value is String)
- {
- this.WriteString((string) value);
- }
- else
- {
- throw new MessageFormatException("Cannot write non-primitive type:" + value.GetType());
- }
- }
-
- public override void ClearBody()
- {
- base.ClearBody();
- this.byteBuffer = null;
- this.dataIn = null;
- this.dataOut = null;
- this.bytesRemaining = -1;
- }
-
- public void Reset()
- {
- StoreContent();
- this.dataIn = null;
- this.dataOut = null;
- this.byteBuffer = null;
- this.bytesRemaining = -1;
- this.ReadOnlyBody = true;
- }
-
- private void InitializeReading()
- {
- FailIfWriteOnlyBody();
- if(this.dataIn == null)
- {
- // TODO - Add support for Message Compression.
- this.byteBuffer = new MemoryStream(this.Content, false);
- dataIn = new EndianBinaryReader(byteBuffer);
- }
- }
-
- private void InitializeWriting()
- {
- FailIfReadOnlyBody();
- if(this.dataOut == null)
- {
- // TODO - Add support for Message Compression.
- this.byteBuffer = new MemoryStream();
- this.dataOut = new EndianBinaryWriter(byteBuffer);
- }
- }
-
- private void StoreContent()
- {
- if(dataOut != null)
- {
- dataOut.Close();
- // TODO - Add support for Message Compression.
-
- this.Content = byteBuffer.ToArray();
- this.dataOut = null;
- this.byteBuffer = null;
- }
- }
- }
+ public class StreamMessage : BaseMessage, IStreamMessage
+ {
+ private EndianBinaryReader dataIn = null;
+ private EndianBinaryWriter dataOut = null;
+ private MemoryStream byteBuffer = null;
+ private int bytesRemaining = -1;
+
+ public bool ReadBoolean()
+ {
+ InitializeReading();
+
+ try
+ {
+ long startingPos = this.byteBuffer.Position;
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.BOOLEAN_TYPE)
+ {
+ return this.dataIn.ReadBoolean();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return Boolean.Parse(this.dataIn.ReadString16());
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new NMSException("Cannot convert Null type to a bool");
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a Boolean type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public byte ReadByte()
+ {
+ InitializeReading();
+
+ try
+ {
+ long startingPos = this.byteBuffer.Position;
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.BYTE_TYPE)
+ {
+ return this.dataIn.ReadByte();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return Byte.Parse(this.dataIn.ReadString16());
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new NMSException("Cannot convert Null type to a byte");
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a Byte type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public char ReadChar()
+ {
+ InitializeReading();
+
+ try
+ {
+ long startingPos = this.byteBuffer.Position;
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.CHAR_TYPE)
+ {
+ return this.dataIn.ReadChar();
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new NMSException("Cannot convert Null type to a char");
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a Char type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public short ReadInt16()
+ {
+ InitializeReading();
+
+ try
+ {
+ long startingPos = this.byteBuffer.Position;
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.SHORT_TYPE)
+ {
+ return this.dataIn.ReadInt16();
+ }
+ else if(type == PrimitiveMap.BYTE_TYPE)
+ {
+ return this.dataIn.ReadByte();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return Int16.Parse(this.dataIn.ReadString16());
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new NMSException("Cannot convert Null type to a short");
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a Int16 type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public int ReadInt32()
+ {
+ InitializeReading();
+
+ try
+ {
+ long startingPos = this.byteBuffer.Position;
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.INTEGER_TYPE)
+ {
+ return this.dataIn.ReadInt32();
+ }
+ else if(type == PrimitiveMap.SHORT_TYPE)
+ {
+ return this.dataIn.ReadInt16();
+ }
+ else if(type == PrimitiveMap.BYTE_TYPE)
+ {
+ return this.dataIn.ReadByte();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return Int32.Parse(this.dataIn.ReadString16());
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new NMSException("Cannot convert Null type to a int");
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a Int32 type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public long ReadInt64()
+ {
+ InitializeReading();
+
+ try
+ {
+ long startingPos = this.byteBuffer.Position;
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.LONG_TYPE)
+ {
+ return this.dataIn.ReadInt64();
+ }
+ else if(type == PrimitiveMap.INTEGER_TYPE)
+ {
+ return this.dataIn.ReadInt32();
+ }
+ else if(type == PrimitiveMap.SHORT_TYPE)
+ {
+ return this.dataIn.ReadInt16();
+ }
+ else if(type == PrimitiveMap.BYTE_TYPE)
+ {
+ return this.dataIn.ReadByte();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return Int64.Parse(this.dataIn.ReadString16());
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new NMSException("Cannot convert Null type to a long");
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a Int64 type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public float ReadSingle()
+ {
+ InitializeReading();
+
+ try
+ {
+ long startingPos = this.byteBuffer.Position;
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.FLOAT_TYPE)
+ {
+ return this.dataIn.ReadSingle();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return Single.Parse(this.dataIn.ReadString16());
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new NMSException("Cannot convert Null type to a float");
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a Single type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public double ReadDouble()
+ {
+ InitializeReading();
+
+ try
+ {
+ long startingPos = this.byteBuffer.Position;
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.DOUBLE_TYPE)
+ {
+ return this.dataIn.ReadDouble();
+ }
+ else if(type == PrimitiveMap.FLOAT_TYPE)
+ {
+ return this.dataIn.ReadSingle();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return Single.Parse(this.dataIn.ReadString16());
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new NMSException("Cannot convert Null type to a double");
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a Double type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public string ReadString()
+ {
+ InitializeReading();
+
+ long startingPos = this.byteBuffer.Position;
+
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.BIG_STRING_TYPE)
+ {
+ return this.dataIn.ReadString32();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return this.dataIn.ReadString16();
+ }
+ else if(type == PrimitiveMap.LONG_TYPE)
+ {
+ return this.dataIn.ReadInt64().ToString();
+ }
+ else if(type == PrimitiveMap.INTEGER_TYPE)
+ {
+ return this.dataIn.ReadInt32().ToString();
+ }
+ else if(type == PrimitiveMap.SHORT_TYPE)
+ {
+ return this.dataIn.ReadInt16().ToString();
+ }
+ else if(type == PrimitiveMap.FLOAT_TYPE)
+ {
+ return this.dataIn.ReadSingle().ToString();
+ }
+ else if(type == PrimitiveMap.DOUBLE_TYPE)
+ {
+ return this.dataIn.ReadDouble().ToString();
+ }
+ else if(type == PrimitiveMap.CHAR_TYPE)
+ {
+ return this.dataIn.ReadChar().ToString();
+ }
+ else if(type == PrimitiveMap.BYTE_TYPE)
+ {
+ return this.dataIn.ReadByte().ToString();
+ }
+ else if(type == PrimitiveMap.BOOLEAN_TYPE)
+ {
+ return this.dataIn.ReadBoolean().ToString();
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ return null;
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a known type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public int ReadBytes(byte[] value)
+ {
+ InitializeReading();
+
+ if(value == null)
+ {
+ throw new NullReferenceException("Passed Byte Array is null");
+ }
+
+ try
+ {
+ if(this.bytesRemaining == -1)
+ {
+ long startingPos = this.byteBuffer.Position;
+ byte type = this.dataIn.ReadByte();
+
+ if(type != PrimitiveMap.BYTE_ARRAY_TYPE)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Not a byte array");
+ }
+
+ this.bytesRemaining = this.dataIn.ReadInt32();
+ }
+ else if(this.bytesRemaining == 0)
+ {
+ this.bytesRemaining = -1;
+ return -1;
+ }
+
+ if(value.Length <= this.bytesRemaining)
+ {
+ // small buffer
+ this.bytesRemaining -= value.Length;
+ this.dataIn.Read(value, 0, value.Length);
+ return value.Length;
+ }
+ else
+ {
+ // big buffer
+ int rc = this.dataIn.Read(value, 0, this.bytesRemaining);
+ this.bytesRemaining = 0;
+ return rc;
+ }
+ }
+ catch(EndOfStreamException ex)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(ex);
+ }
+ catch(IOException ex)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(ex);
+ }
+ }
+
+ public Object ReadObject()
+ {
+ InitializeReading();
+
+ long startingPos = this.byteBuffer.Position;
+
+ try
+ {
+ int type = this.dataIn.ReadByte();
+
+ if(type == PrimitiveMap.BIG_STRING_TYPE)
+ {
+ return this.dataIn.ReadString32();
+ }
+ else if(type == PrimitiveMap.STRING_TYPE)
+ {
+ return this.dataIn.ReadString16();
+ }
+ else if(type == PrimitiveMap.LONG_TYPE)
+ {
+ return this.dataIn.ReadInt64();
+ }
+ else if(type == PrimitiveMap.INTEGER_TYPE)
+ {
+ return this.dataIn.ReadInt32();
+ }
+ else if(type == PrimitiveMap.SHORT_TYPE)
+ {
+ return this.dataIn.ReadInt16();
+ }
+ else if(type == PrimitiveMap.FLOAT_TYPE)
+ {
+ return this.dataIn.ReadSingle();
+ }
+ else if(type == PrimitiveMap.DOUBLE_TYPE)
+ {
+ return this.dataIn.ReadDouble();
+ }
+ else if(type == PrimitiveMap.CHAR_TYPE)
+ {
+ return this.dataIn.ReadChar();
+ }
+ else if(type == PrimitiveMap.BYTE_TYPE)
+ {
+ return this.dataIn.ReadByte();
+ }
+ else if(type == PrimitiveMap.BOOLEAN_TYPE)
+ {
+ return this.dataIn.ReadBoolean();
+ }
+ else if(type == PrimitiveMap.BYTE_ARRAY_TYPE)
+ {
+ int length = this.dataIn.ReadInt32();
+ byte[] data = new byte[length];
+ this.dataIn.Read(data, 0, length);
+ return data;
+ }
+ else if(type == PrimitiveMap.NULL)
+ {
+ return null;
+ }
+ else
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw new MessageFormatException("Value is not a known type.");
+ }
+ }
+ catch(FormatException e)
+ {
+ this.byteBuffer.Seek(startingPos, SeekOrigin.Begin);
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteBoolean(bool value)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.BOOLEAN_TYPE);
+ this.dataOut.Write(value);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteByte(byte value)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.BYTE_TYPE);
+ this.dataOut.Write(value);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteBytes(byte[] value)
+ {
+ InitializeWriting();
+ this.WriteBytes(value, 0, value.Length);
+ }
+
+ public void WriteBytes(byte[] value, int offset, int length)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.BYTE_ARRAY_TYPE);
+ this.dataOut.Write((int) length);
+ this.dataOut.Write(value, offset, length);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteChar(char value)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.CHAR_TYPE);
+ this.dataOut.Write(value);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteInt16(short value)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.SHORT_TYPE);
+ this.dataOut.Write(value);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteInt32(int value)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.INTEGER_TYPE);
+ this.dataOut.Write(value);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteInt64(long value)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.LONG_TYPE);
+ this.dataOut.Write(value);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteSingle(float value)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.FLOAT_TYPE);
+ this.dataOut.Write(value);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteDouble(double value)
+ {
+ InitializeWriting();
+ try
+ {
+ this.dataOut.Write(PrimitiveMap.DOUBLE_TYPE);
+ this.dataOut.Write(value);
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteString(string value)
+ {
+ InitializeWriting();
+ try
+ {
+ if(value.Length > 8192)
+ {
+ this.dataOut.Write(PrimitiveMap.BIG_STRING_TYPE);
+ this.dataOut.WriteString32(value);
+ }
+ else
+ {
+ this.dataOut.Write(PrimitiveMap.STRING_TYPE);
+ this.dataOut.WriteString16(value);
+ }
+ }
+ catch(IOException e)
+ {
+ NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteObject(Object value)
+ {
+ InitializeWriting();
+ if(value is System.Byte)
+ {
+ this.WriteByte((byte) value);
+ }
+ else if(value is Char)
+ {
+ this.WriteChar((char) value);
+ }
+ else if(value is Boolean)
+ {
+ this.WriteBoolean((bool) value);
+ }
+ else if(value is Int16)
+ {
+ this.WriteInt16((short) value);
+ }
+ else if(value is Int32)
+ {
+ this.WriteInt32((int) value);
+ }
+ else if(value is Int64)
+ {
+ this.WriteInt64((long) value);
+ }
+ else if(value is Single)
+ {
+ this.WriteSingle((float) value);
+ }
+ else if(value is Double)
+ {
+ this.WriteDouble((double) value);
+ }
+ else if(value is byte[])
+ {
+ this.WriteBytes((byte[]) value);
+ }
+ else if(value is String)
+ {
+ this.WriteString((string) value);
+ }
+ else
+ {
+ throw new MessageFormatException("Cannot write non-primitive type:" + value.GetType());
+ }
+ }
+
+ public override void ClearBody()
+ {
+ base.ClearBody();
+ this.byteBuffer = null;
+ this.dataIn = null;
+ this.dataOut = null;
+ this.bytesRemaining = -1;
+ }
+
+ public void Reset()
+ {
+ StoreContent();
+ this.dataIn = null;
+ this.dataOut = null;
+ this.byteBuffer = null;
+ this.bytesRemaining = -1;
+ this.ReadOnlyBody = true;
+ }
+
+ private void InitializeReading()
+ {
+ FailIfWriteOnlyBody();
+ if(this.dataIn == null)
+ {
+ // TODO - Add support for Message Compression.
+ this.byteBuffer = new MemoryStream(this.Content, false);
+ dataIn = new EndianBinaryReader(byteBuffer);
+ }
+ }
+
+ private void InitializeWriting()
+ {
+ FailIfReadOnlyBody();
+ if(this.dataOut == null)
+ {
+ // TODO - Add support for Message Compression.
+ this.byteBuffer = new MemoryStream();
+ this.dataOut = new EndianBinaryWriter(byteBuffer);
+ }
+ }
+
+ private void StoreContent()
+ {
+ if(dataOut != null)
+ {
+ dataOut.Close();
+ // TODO - Add support for Message Compression.
+
+ this.Content = byteBuffer.ToArray();
+ this.dataOut = null;
+ this.byteBuffer = null;
+ }
+ }
+ }
}
Modified: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/TextMessage.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/TextMessage.cs?rev=1561226&r1=1561225&r2=1561226&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/TextMessage.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/TextMessage.cs Fri Jan 24 23:25:34 2014
@@ -19,83 +19,83 @@ using System;
namespace Apache.NMS.Amqp
{
- public class TextMessage : BaseMessage, ITextMessage
- {
- public const int SIZE_OF_INT = 4; // sizeof(int) - though causes unsafe issues with net 1.1
-
- private String text;
-
- public TextMessage()
- {
- }
-
- public TextMessage(String text)
- {
- this.Text = text;
- }
-
-
- // Properties
-
- public string Text
- {
- get
- {
- if(text == null)
- {
- // now lets read the content
- byte[] data = this.Content;
- if(data != null)
- {
- // TODO assume that the text is ASCII
- char[] chars = new char[data.Length - SIZE_OF_INT];
- for(int i = 0; i < chars.Length; i++)
- {
- chars[i] = (char) data[i + SIZE_OF_INT];
- }
- text = new String(chars);
- }
- }
- return text;
- }
-
- set
- {
- this.text = value;
- byte[] data = null;
- if(text != null)
- {
- // TODO assume that the text is ASCII
-
- byte[] sizePrefix = System.BitConverter.GetBytes(text.Length);
- data = new byte[text.Length + sizePrefix.Length]; //int at the front of it
-
- // add the size prefix
- for(int j = 0; j < sizePrefix.Length; j++)
- {
- // The bytes need to be encoded in big endian
- if(BitConverter.IsLittleEndian)
- {
- data[j] = sizePrefix[sizePrefix.Length - j - 1];
- }
- else
- {
- data[j] = sizePrefix[j];
- }
- }
-
- // Add the data.
- char[] chars = text.ToCharArray();
- for(int i = 0; i < chars.Length; i++)
- {
- data[i + sizePrefix.Length] = (byte) chars[i];
- }
- }
- this.Content = data;
+ public class TextMessage : BaseMessage, ITextMessage
+ {
+ public const int SIZE_OF_INT = 4; // sizeof(int) - though causes unsafe issues with net 1.1
+
+ private String text;
+
+ public TextMessage()
+ {
+ }
+
+ public TextMessage(String text)
+ {
+ this.Text = text;
+ }
+
+
+ // Properties
+
+ public string Text
+ {
+ get
+ {
+ if(text == null)
+ {
+ // now lets read the content
+ byte[] data = this.Content;
+ if(data != null)
+ {
+ // TODO assume that the text is ASCII
+ char[] chars = new char[data.Length - SIZE_OF_INT];
+ for(int i = 0; i < chars.Length; i++)
+ {
+ chars[i] = (char) data[i + SIZE_OF_INT];
+ }
+ text = new String(chars);
+ }
+ }
+ return text;
+ }
+
+ set
+ {
+ this.text = value;
+ byte[] data = null;
+ if(text != null)
+ {
+ // TODO assume that the text is ASCII
+
+ byte[] sizePrefix = System.BitConverter.GetBytes(text.Length);
+ data = new byte[text.Length + sizePrefix.Length]; //int at the front of it
+
+ // add the size prefix
+ for(int j = 0; j < sizePrefix.Length; j++)
+ {
+ // The bytes need to be encoded in big endian
+ if(BitConverter.IsLittleEndian)
+ {
+ data[j] = sizePrefix[sizePrefix.Length - j - 1];
+ }
+ else
+ {
+ data[j] = sizePrefix[j];
+ }
+ }
+
+ // Add the data.
+ char[] chars = text.ToCharArray();
+ for(int i = 0; i < chars.Length; i++)
+ {
+ data[i + sizePrefix.Length] = (byte) chars[i];
+ }
+ }
+ this.Content = data;
- }
- }
+ }
+ }
- }
+ }
}
Modified: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Topic.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Topic.cs?rev=1561226&r1=1561225&r2=1561226&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Topic.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Topic.cs Fri Jan 24 23:25:34 2014
@@ -16,45 +16,57 @@
*/
using System;
+// Typedef for options map
+using OptionsMap = System.Collections.Generic.Dictionary<System.String, System.Object>;
+
namespace Apache.NMS.Amqp
{
- /// <summary>
- /// Summary description for Topic.
- /// </summary>
- public class Topic : Destination, ITopic
- {
-
- public Topic()
- : base()
- {
- }
-
- public Topic(String name)
- : base(name)
- {
- }
-
- override public DestinationType DestinationType
- {
- get
- {
- return DestinationType.Topic;
- }
- }
-
- public String TopicName
- {
- get { return Path; }
- }
-
-
- public override Destination CreateDestination(String name)
- {
- return new Topic(name);
- }
-
-
- }
+ /// <summary>
+ /// Summary description for Topic.
+ /// </summary>
+ public class Topic : Destination, ITopic
+ {
+
+ public Topic()
+ : base()
+ {
+ }
+
+ public Topic(String name)
+ : base(name)
+ {
+ }
+
+ public Topic(String name, string subject, OptionsMap options)
+ : base(name, subject, options, "topic")
+ {
+ }
+
+ override public DestinationType DestinationType
+ {
+ get
+ {
+ return DestinationType.Topic;
+ }
+ }
+
+ public String TopicName
+ {
+ get { return Path; }
+ }
+
+
+ public override Destination CreateDestination(String name)
+ {
+ return new Topic(name);
+ }
+
+
+ public override Destination CreateDestination(String name, string subject, OptionsMap options)
+ {
+ return new Topic(name, subject, options);
+ }
+ }
}