/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; namespace Apache.NMS.MSMQ { 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; } } } }