1 // This source code is dual-licensed under the Apache License, version 2 // 2.0, and the Mozilla Public License, version 1.1. 3 // 4 // The APL v2.0: 5 // 6 //--------------------------------------------------------------------------- 7 // Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial 8 // Technologies LLC., and Rabbit Technologies Ltd. 9 // 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 13 // 14 // http://www.apache.org/licenses/LICENSE-2.0 15 // 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 //--------------------------------------------------------------------------- 22 // 23 // The MPL v1.1: 24 // 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 30 // 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 34 // under the License. 35 // 36 // The Original Code is The RabbitMQ .NET Client. 37 // 38 // The Initial Developers of the Original Code are LShift Ltd, 39 // Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd. 40 // 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. 45 // 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. 51 // 52 // All Rights Reserved. 53 // 54 // Contributor(s): ______________________________________. 55 // 56 //--------------------------------------------------------------------------- 57 using System; 58 using System.IO; 59 using System.Collections; 60 61 using RabbitMQ.Client; 62 63 namespace RabbitMQ.Client.Content { 64 ///<summary>Constructs AMQP Basic-class messages binary-compatible 65 ///with QPid's "MapMessage" wire encoding.</summary> 66 public class MapMessageBuilder: BasicMessageBuilder, IMapMessageBuilder { 67 ///<summary>MIME type associated with QPid MapMessages.</summary> 68 public readonly static string MimeType = "jms/map-message"; 69 70 protected IDictionary m_table = new Hashtable(); 71 72 ///<summary>Implement IMapMessageBuilder.Body</summary> 73 public IDictionary Body { 74 get { 75 return m_table; 76 } 77 } 78 79 ///<summary>Construct an instance for writing. See superclass.</summary> MapMessageBuilder(IModel model)80 public MapMessageBuilder(IModel model) 81 : base(model) 82 {} 83 84 ///<summary>Construct an instance for writing. See superclass.</summary> MapMessageBuilder(IModel model, int initialAccumulatorSize)85 public MapMessageBuilder(IModel model, int initialAccumulatorSize) 86 : base(model, initialAccumulatorSize) 87 {} 88 89 ///<summary>Override superclass method to answer our characteristic MIME type.</summary> GetDefaultContentType()90 public override string GetDefaultContentType() { 91 return MimeType; 92 } 93 94 ///<summary>Override superclass method to write Body out into 95 ///the message BodyStream before retrieving the final byte 96 ///array.</summary> 97 ///<remarks> 98 /// Calling this message clears Body to null. Subsequent calls 99 /// will fault. 100 ///</remarks> GetContentBody()101 public override byte[] GetContentBody() { 102 MapWireFormatting.WriteMap(Writer, m_table); 103 m_table = null; 104 return base.GetContentBody(); 105 } 106 } 107 } 108