* RemotingProxy.cs: Added support for Async and OneWay messages.
authorLluis Sanchez <lluis@novell.com>
Thu, 10 Apr 2003 16:31:02 +0000 (16:31 -0000)
committerLluis Sanchez <lluis@novell.com>
Thu, 10 Apr 2003 16:31:02 +0000 (16:31 -0000)
svn path=/trunk/mcs/; revision=13480

mcs/class/corlib/System.Runtime.Remoting.Proxies/ChangeLog
mcs/class/corlib/System.Runtime.Remoting.Proxies/RemotingProxy.cs

index 4363f7fffd90461f8701ff78ebf99ea26e8c21bb..b2b3de0d2e3b7f88b0862f5764df081b58aa670a 100644 (file)
@@ -1,3 +1,7 @@
+2003-04-10  Lluis Sanchez Gual <lluis@ideary.com>
+
+       * RemotingProxy.cs: Added support for Async and OneWay messages.
+
 2003-03-20  Lluis Sanchez Gual <lluis@ideary.com>
 
        * RealProxy.cs: added variables to support proxy bypass when the called CBO is
index 46f5b95811b25986c9f5da951204fdbf799ec883..84ceaf08e9dc2c04809ff26bdad2a813fa03e44b 100644 (file)
@@ -61,12 +61,23 @@ namespace System.Runtime.Remoting.Proxies
                        _objectIdentity.NotifyClientDynamicSinks (true, request, true, false);
 
                        IMessage response;
+                       IMessageSink sink;
 
                        // Needs to go through the client context sink?
                        if (Thread.CurrentContext.HasExitSinks && !_hasEnvoySink)
-                               response = Thread.CurrentContext.GetClientContextSinkChain ().SyncProcessMessage (request);
+                               sink = Thread.CurrentContext.GetClientContextSinkChain ();
                        else
-                               response = _sink.SyncProcessMessage (request);
+                               sink = _sink;
+
+                       if (RemotingServices.IsAsyncMessage (request))
+                       {
+                               AsyncResult ares = ((MonoMethodMessage)request).AsyncResult;
+                               IMessageCtrl mctrl = sink.AsyncProcessMessage (request, ares);
+                               if (ares != null) ares.SetMessageCtrl (mctrl);
+                               response = new ReturnMessage (null, new object[0], 0, null, mMsg);
+                       }
+                       else
+                               response = sink.SyncProcessMessage (request);
 
                        _objectIdentity.NotifyClientDynamicSinks (false, request, true, false);