blob: 3011ca23bd986c8b9ee75a5528475742946ddfac [file] [log] [blame]
/*
* 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.
*/
namespace Apache.NMS
{
/// <summary>
///
/// A BytesMessage object is used to send a message containing a stream of uninterpreted
/// bytes. It inherits from the Message interface and adds a bytes message body. The
/// receiver of the message supplies the interpretation of the bytes.
///
/// This message type is for client encoding of existing message formats. If possible,
/// one of the other self-defining message types should be used instead.
///
/// Although the NMS API allows the use of message properties with byte messages, they
/// are typically not used, since the inclusion of properties may affect the format.
///
/// When the message is first created, and when ClearBody is called, the body of the
/// message is in write-only mode. After the first call to Reset has been made, the
/// message body is in read-only mode. After a message has been sent, the client that
/// sent it can retain and modify it without affecting the message that has been sent.
/// The same message object can be sent multiple times. When a message has been received,
/// the provider has called Reset so that the message body is in read-only mode for the
/// client.
///
/// If ClearBody is called on a message in read-only mode, the message body is cleared and
/// the message is in write-only mode.
///
/// If a client attempts to read a message in write-only mode, a MessageNotReadableException
/// is thrown.
///
/// If a client attempts to write a message in read-only mode, a MessageNotWriteableException
/// is thrown.
/// </summary>
public interface IBytesMessage : IMessage
{
byte[] Content { get; set; }
/// <value>
/// Gets the number of bytes of the message body when the message is in read-only mode.
/// The value returned can be used to allocate a byte array. The value returned is the
/// entire length of the message body, regardless of where the pointer for reading the
/// message is currently located.
/// </value>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
long BodyLength { get; }
/// <summary>
/// Reads a byte from the Message Stream.
/// </summary>
/// <returns>
/// A <see cref="System.Byte"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
byte ReadByte();
/// <summary>
/// Writes a byte to the Message stream.
/// </summary>
/// <param name="value">
/// A <see cref="System.Byte"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteByte( byte value );
/// <summary>
/// Reads a boolean from the Message Stream.
/// </summary>
/// <returns>
/// A <see cref="System.Boolean"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
bool ReadBoolean();
/// <summary>
/// Write a one byte value to the message stream representing the boolean
/// value passed.
/// </summary>
/// <param name="value">
/// A <see cref="System.Boolean"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteBoolean( bool value );
/// <summary>
/// Reads a char from the Message Stream.
/// </summary>
/// <returns>
/// A <see cref="System.Char"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
char ReadChar();
/// <summary>
/// Write a two byte value to the message stream representing the character
/// value passed. High byte first.
/// </summary>
/// <param name="value">
/// A <see cref="System.Char"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteChar( char value );
/// <summary>
/// Reads a Short from the Message Stream.
/// </summary>
/// <returns>
/// A <see cref="System.Int16"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
short ReadInt16();
/// <summary>
/// Write a two byte value to the message stream representing the short
/// value passed. High byte first.
/// </summary>
/// <param name="value">
/// A <see cref="System.Int16"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteInt16( short value );
/// <summary>
/// Reads an int from the Message Stream.
/// </summary>
/// <returns>
/// A <see cref="System.Int32"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
int ReadInt32();
/// <summary>
/// Write a four byte value to the message stream representing the integer
/// value passed. High byte first.
/// </summary>
/// <param name="value">
/// A <see cref="System.Int32"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteInt32( int value );
/// <summary>
/// Reads a long from the Message Stream.
/// </summary>
/// <returns>
/// A <see cref="System.Int64"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
long ReadInt64();
/// <summary>
/// Write a eight byte value to the message stream representing the long
/// value passed. High byte first.
/// </summary>
/// <param name="value">
/// A <see cref="System.Int64"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteInt64( long value );
/// <summary>
/// Reads a float from the Message Stream.
/// </summary>
/// <returns>
/// A <see cref="System.Single"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
float ReadSingle();
/// <summary>
/// Write a four byte value to the message stream representing the float
/// value passed. High byte first.
/// </summary>
/// <param name="value">
/// A <see cref="System.Single"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteSingle( float value );
/// <summary>
/// Reads an double from the Message Stream.
/// </summary>
/// <returns>
/// A <see cref="System.Double"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
double ReadDouble();
/// <summary>
/// Write a eight byte value to the message stream representing the double
/// value passed. High byte first.
/// </summary>
/// <param name="value">
/// A <see cref="System.Double"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteDouble( double value );
/// <summary>
/// Reads a byte array from the bytes message stream.
///
/// If the length of array value is less than the number of bytes remaining to
/// be read from the stream, the array should be filled. A subsequent call reads
/// the next increment, and so on.
///
/// If the number of bytes remaining in the stream is less than the length of array
/// value, the bytes should be read into the array. The return value of the total number
/// of bytes read will be less than the length of the array, indicating that there are
/// no more bytes left to be read from the stream. The next read of the stream returns -1.
/// </summary>
/// <param name="value">
/// The byte array that will be used as a buffer to read into.
/// </param>
/// <returns>
/// A <see cref="System.Int32"/>
/// The number of bytes read into the passed byte array, or -1 if there are no more
/// bytes left to be read from the stream.
/// </returns>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
int ReadBytes( byte[] value );
/// <summary>
/// Reads a portion of the bytes message stream.
///
/// If the length of array value is less than the number of bytes remaining to be
/// read from the stream, the array should be filled. A subsequent call reads the
/// next increment, and so on.
///
/// If the number of bytes remaining in the stream is less than the length of array
/// value, the bytes should be read into the array. The return value of the total
/// number of bytes read will be less than the length of the array, indicating that
/// there are no more bytes left to be read from the stream. The next read of the
/// stream returns -1.
///
/// If length is negative, or length is greater than the length of the array value,
/// then an Exception is thrown. No bytes will be read from the stream for this
/// exception case.
/// </summary>
/// <param name="value">
/// The byte array that will be used as a buffer to read into.
/// </param>
/// <param name="length">
/// The amount of bytes to read into the buffer.
/// </param>
/// <returns>
/// A <see cref="System.Int32"/>
/// The number of bytes read into the passed byte array, or -1 if there are no more
/// bytes left to be read from the stream.
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
int ReadBytes( byte[] value, int length );
/// <summary>
/// Writes a byte array to the bytes message stream.
/// </summary>
/// <param name="value">
/// A <see cref="System.Byte"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteBytes( byte[] value );
/// <summary>
/// Writes a portion of a byte array to the bytes message stream.
/// </summary>
/// <param name="value">
/// A <see cref="System.Byte"/>
/// </param>
/// <param name="offset">
/// A <see cref="System.Int32"/>
/// </param>
/// <param name="length">
/// A <see cref="System.Int32"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteBytes( byte[] value, int offset, int length );
/// <summary>
/// Reads a string that has been encoded using a modified UTF-8 format from the bytes
/// message stream.
/// </summary>
/// <returns>
/// A <see cref="System.String"/>
/// </returns>
/// <exception cref="Apache.NMS.MessageNotReadableException">
/// Thrown when the Message is in write-only mode.
/// </exception>
/// <exception cref="Apache.NMS.MessageEOFException">
/// Thrown when an unexpected end of bytes has been reached.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
string ReadString();
/// <summary>
/// Writes a string to the bytes message stream using UTF-8 encoding in a
/// machine-independent manner.
/// </summary>
/// <param name="value">
/// A <see cref="System.String"/>
/// </param>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteString( string value );
/// <summary>
/// Writes an object to the bytes message stream.
///
/// This method works only for the objectified primitive object types
/// (Int32, Double, Boolean ...), String objects, and byte arrays.
/// </summary>
/// <param name="value">
/// A <see cref="System.Object"/>
/// the object in the .NET programming language to be written; it must not be null
/// </param>
/// <exception cref="Apache.NMS.MessageFormatException">
/// Thrown when the Message has an invalid format.
/// </exception>
/// <exception cref="Apache.NMS.MessageNotWriteableException">
/// Thrown when the Message is in read-only mode.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void WriteObject( System.Object value );
/// <summary>
/// Puts the message body in read-only mode and repositions the stream of bytes to the beginning.
/// </summary>
/// <exception cref="Apache.NMS.MessageFormatException">
/// Thrown when the Message has an invalid format.
/// </exception>
/// <exception cref="Apache.NMS.NMSException">
/// Thrown when there is an unhandled exception thrown from the provider.
/// </exception>
void Reset();
}
}