blob: 4525b9afeeb31d6c0bbf300d40d2092072a3654c [file] [log] [blame]
// $Id$
//
// 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 Org.Apache.Etch.Bindings.Csharp.Msg
{
///<summary> A message is modeled as a command and some argments. The command is an arbitrary
/// integer value, and the arguments are key / value pairs, where the key is an arbitrary integer
/// value and the value is any one of the standard C# objects, an ArrayValue, a StructValue, or any type
/// which may be serialized by the ValueFactory.</summary>
public sealed class Message : StructValue
{
///<summary>Constructs the Message.</summary>
///<param name="type">type of the message (command).</param>
///<param name="vf"> vf the value factory.</param>
public Message(XType type, ValueFactory vf)
: this(type, vf, 0)
{
// nothing to do.
}
///<summary>Constructs the Message.</summary>
///<param name="type">type of the message (command).</param>
///<param name="vf">vf the value factory.</param>
///<param name="length"> the expected number of name/value pairs</param>
public Message(XType type, ValueFactory vf, int length)
: base(type, vf, length)
{
this.vf = vf;
}
private readonly ValueFactory vf;
///<returns>the value factory.</returns>
public ValueFactory Vf
{
get
{
return vf;
}
}
/// <summary>Creates a message which is a reply to the current message. The current message's value
/// factory is copied to the new message. The message-id of the current message (if any) is copied into
/// the in-reply-to field of the new message.</summary>
/// <param name="rType"> rType the type of the reply.</param>
/// <returns> a reply message.</returns>
public Message Reply( XType rType )
{
Message rmsg = new Message( rType, vf );
rmsg.InReplyTo = MessageId; //rmsg.InReplyTo(GetMessageId()); changed
return rmsg;
}
public Message Reply()
{
Message rmsg = new Message( GetXType.GetResult(), vf );
rmsg.InReplyTo = MessageId;
return rmsg;
}
/// <returns>the connection specific unique identifier of this message, or null if there was no
/// such identifier.</returns>
public long? MessageId
{
get
{
return vf.GetMessageId(this);
}
set
{
vf.SetMessageId(this, value);
}
}
/// <returns>the message-id of the message that this is a response to. Null if this is an original message
/// or if the original message did not have a message-id.</returns>
public long? InReplyTo
{
get
{
return vf.GetInReplyTo(this);
}
set
{
vf.SetInReplyTo(this, value);
}
}
}
}