// $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
{
/// 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.
public sealed class Message : StructValue
{
///Constructs the Message.
///type of the message (command).
/// vf the value factory.
public Message(XType type, ValueFactory vf)
: this(type, vf, 0)
{
// nothing to do.
}
///Constructs the Message.
///type of the message (command).
///vf the value factory.
/// the expected number of name/value pairs
public Message(XType type, ValueFactory vf, int length)
: base(type, vf, length)
{
this.vf = vf;
}
private readonly ValueFactory vf;
///the value factory.
public ValueFactory Vf
{
get
{
return vf;
}
}
/// 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.
/// rType the type of the reply.
/// a reply message.
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;
}
/// the connection specific unique identifier of this message, or null if there was no
/// such identifier.
public long? MessageId
{
get
{
return vf.GetMessageId(this);
}
set
{
vf.SetMessageId(this, value);
}
}
/// 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.
public long? InReplyTo
{
get
{
return vf.GetInReplyTo(this);
}
set
{
vf.SetInReplyTo(this, value);
}
}
}
}