2 // System.Runtime.Remoting.Messaging.ReturnMessage.cs
5 // Dietmar Maurer (dietmar@ximian.com)
7 // (C) Ximian, Inc. http://www.ximian.com
11 using System.Collections;
12 using System.Reflection;
14 namespace System.Runtime.Remoting.Messaging {
17 public class ReturnMessage : IMethodReturnMessage, IMethodMessage
\r
19 MonoMethodMessage msg;
20 IMethodCallMessage request;
22 public ReturnMessage (object returnValue, object [] outArgs,
23 int outArgCount, LogicalCallContext callCtx,
24 IMethodCallMessage request)
26 // fixme: request can be null
27 // fixme: why do we need outArgCount?
28 msg = new MonoMethodMessage (request.MethodBase as MonoMethod, outArgs);
29 this.request = request;
30 msg.rval = returnValue;
32 msg.Uri = request.Uri;
35 public ReturnMessage (Exception exc, IMethodCallMessage request)
37 if (null != request) {
38 msg = new MonoMethodMessage (request.MethodBase as MonoMethod, null);
39 msg.ctx = request.LogicalCallContext;
42 msg = new MonoMethodMessage (null, null);
44 this.request = request;
54 public object [] Args {
60 public bool HasVarArgs {
62 return msg.HasVarArgs;
66 public LogicalCallContext LogicalCallContext {
74 public MethodBase MethodBase {
76 return msg.MethodBase;
80 public string MethodName {
82 return msg.MethodName;
86 public object MethodSignature {
88 return msg.MethodSignature;
92 public virtual IDictionary Properties {
94 return msg.Properties;
98 public string TypeName {
114 public object GetArg (int arg_num)
116 return msg.GetArg (arg_num);
119 public string GetArgName (int arg_num)
121 return msg.GetArgName (arg_num);
124 public Exception Exception {
130 public int OutArgCount {
132 return msg.OutArgCount;
136 public object [] OutArgs {
142 public virtual object ReturnValue {
148 public object GetOutArg (int arg_num)
150 return msg.GetOutArg (arg_num);
153 public string GetOutArgName (int arg_num)
155 return msg.GetOutArgName (arg_num);
159 class InternalDictionary : MethodReturnDictionary
\r
161 public InternalDictionary(ReturnMessage message) : base (message) { }
\r
163 protected override void SetMethodProperty (string key, object value)
165 if (key == "__Uri") ((ReturnMessage)_message).Uri = (string)value;
166 else base.SetMethodProperty (key, value);