1 // This source code is dual-licensed under the Apache License, version
2 // 2.0, and the Mozilla Public License, version 1.1.
6 //---------------------------------------------------------------------------
7 // Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial
8 // Technologies LLC., and Rabbit Technologies Ltd.
10 // Licensed under the Apache License, Version 2.0 (the "License");
11 // you may not use this file except in compliance with the License.
12 // You may obtain a copy of the License at
14 // http://www.apache.org/licenses/LICENSE-2.0
16 // Unless required by applicable law or agreed to in writing, software
17 // distributed under the License is distributed on an "AS IS" BASIS,
18 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 // See the License for the specific language governing permissions and
20 // limitations under the License.
21 //---------------------------------------------------------------------------
25 //---------------------------------------------------------------------------
26 // The contents of this file are subject to the Mozilla Public License
27 // Version 1.1 (the "License"); you may not use this file except in
28 // compliance with the License. You may obtain a copy of the License at
29 // http://www.rabbitmq.com/mpl.html
31 // Software distributed under the License is distributed on an "AS IS"
32 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
33 // License for the specific language governing rights and limitations
36 // The Original Code is The RabbitMQ .NET Client.
38 // The Initial Developers of the Original Code are LShift Ltd,
39 // Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd.
41 // Portions created before 22-Nov-2008 00:00:00 GMT by LShift Ltd,
42 // Cohesive Financial Technologies LLC, or Rabbit Technologies Ltd
43 // are Copyright (C) 2007-2008 LShift Ltd, Cohesive Financial
44 // Technologies LLC, and Rabbit Technologies Ltd.
46 // Portions created by LShift Ltd are Copyright (C) 2007-2010 LShift
47 // Ltd. Portions created by Cohesive Financial Technologies LLC are
48 // Copyright (C) 2007-2010 Cohesive Financial Technologies
49 // LLC. Portions created by Rabbit Technologies Ltd are Copyright
50 // (C) 2007-2010 Rabbit Technologies Ltd.
52 // All Rights Reserved.
54 // Contributor(s): ______________________________________.
56 //---------------------------------------------------------------------------
60 using RabbitMQ.Client;
62 namespace RabbitMQ.Client.Content {
63 ///<summary>Constructs AMQP Basic-class messages binary-compatible
64 ///with QPid's "StreamMessage" wire encoding.</summary>
65 public class StreamMessageBuilder: BasicMessageBuilder, IStreamMessageBuilder {
66 ///<summary>MIME type associated with QPid StreamMessages.</summary>
67 public readonly static string MimeType = "jms/stream-message";
69 ///<summary>Construct an instance for writing. See superclass.</summary>
70 public StreamMessageBuilder(IModel model)
74 ///<summary>Construct an instance for writing. See superclass.</summary>
75 public StreamMessageBuilder(IModel model, int initialAccumulatorSize)
76 : base(model, initialAccumulatorSize)
79 ///<summary>Override superclass method to answer our characteristic MIME type.</summary>
80 public override string GetDefaultContentType() {
84 ///<summary>Writes a bool value into the message body being assembled.</summary>
85 public IStreamMessageBuilder WriteBool(bool value) {
86 StreamWireFormatting.WriteBool(Writer, value);
90 ///<summary>Writes an int value into the message body being assembled.</summary>
91 public IStreamMessageBuilder WriteInt32(int value) {
92 StreamWireFormatting.WriteInt32(Writer, value);
96 ///<summary>Writes a short value into the message body being assembled.</summary>
97 public IStreamMessageBuilder WriteInt16(short value) {
98 StreamWireFormatting.WriteInt16(Writer, value);
102 ///<summary>Writes a byte value into the message body being assembled.</summary>
103 public IStreamMessageBuilder WriteByte(byte value) {
104 StreamWireFormatting.WriteByte(Writer, value);
108 ///<summary>Writes a char value into the message body being assembled.</summary>
109 public IStreamMessageBuilder WriteChar(char value) {
110 StreamWireFormatting.WriteChar(Writer, value);
114 ///<summary>Writes a long value into the message body being assembled.</summary>
115 public IStreamMessageBuilder WriteInt64(long value) {
116 StreamWireFormatting.WriteInt64(Writer, value);
120 ///<summary>Writes a float value into the message body being assembled.</summary>
121 public IStreamMessageBuilder WriteSingle(float value) {
122 StreamWireFormatting.WriteSingle(Writer, value);
126 ///<summary>Writes a double value into the message body being assembled.</summary>
127 public IStreamMessageBuilder WriteDouble(double value) {
128 StreamWireFormatting.WriteDouble(Writer, value);
132 ///<summary>Writes a section of a byte array into the message body being assembled.</summary>
133 public IStreamMessageBuilder WriteBytes(byte[] source, int offset, int count) {
134 StreamWireFormatting.WriteBytes(Writer, source, offset, count);
138 ///<summary>Writes a byte array into the message body being assembled.</summary>
139 public IStreamMessageBuilder WriteBytes(byte[] source) {
140 StreamWireFormatting.WriteBytes(Writer, source);
144 ///<summary>Writes a string value into the message body being assembled.</summary>
145 public IStreamMessageBuilder WriteString(string value) {
146 StreamWireFormatting.WriteString(Writer, value);
150 ///<summary>Writes an object value into the message body being assembled.</summary>
152 /// The only permitted types are bool, int, short, byte, char,
153 /// long, float, double, byte[] and string.
155 public IStreamMessageBuilder WriteObject(object value) {
156 StreamWireFormatting.WriteObject(Writer, value);
160 ///<summary>Writes objects using WriteObject(), one after the
161 ///other. No length indicator is written. See also
162 ///IStreamMessageReader.ReadObjects().</summary>
163 public IStreamMessageBuilder WriteObjects(params object[] values) {
164 foreach (object val in values) {