StackBuilderSink.cs: Implemented AsyncProcessMessage().
authorLluis Sanchez <lluis@novell.com>
Mon, 17 Nov 2003 20:28:32 +0000 (20:28 -0000)
committerLluis Sanchez <lluis@novell.com>
Mon, 17 Nov 2003 20:28:32 +0000 (20:28 -0000)
svn path=/trunk/mcs/; revision=20132

mcs/class/corlib/System.Runtime.Remoting.Messaging/ChangeLog
mcs/class/corlib/System.Runtime.Remoting.Messaging/StackBuilderSink.cs

index f35f4d150351899ffff9b857be2c9b5def46c33c..6ef36aee556363d87768351538a71540367a8eb6 100644 (file)
@@ -1,3 +1,7 @@
+2003-11-17  Lluis Sanchez Gual <lluis@ximian.com>
+
+       * StackBuilderSink.cs: Implemented AsyncProcessMessage().
+       
 2003-11-16  Lluis Sanchez Gual <lluis@ximian.com>
 
        * CADMessages.cs: Added methods for setting and getting the logical call
index 96a4d2f2b3bf6d47fa708a6c1b37168949b5c5a3..4eefa77eb16b3bd2045bc1d199aab2311e59d66c 100644 (file)
@@ -7,6 +7,7 @@
 //
 
 using System;
+using System.Threading;
 using System.Reflection;
 
 namespace System.Runtime.Remoting.Messaging
@@ -30,10 +31,23 @@ namespace System.Runtime.Remoting.Messaging
                        return RemotingServices.InternalExecuteMessage (_target, (IMethodCallMessage)msg);
                }
 
-               [MonoTODO]
                public IMessageCtrl AsyncProcessMessage (IMessage msg, IMessageSink replySink)
                {
-                       throw new NotImplementedException ();
+                       object[] parms = new object[] {msg, replySink};
+                       ThreadPool.QueueUserWorkItem (new WaitCallback (ExecuteAsyncMessage), parms);
+                       return null;
+               }
+               
+               void ExecuteAsyncMessage (object ob)
+               {
+                       object[] parms = (object[]) ob;
+                       IMethodCallMessage msg = (IMethodCallMessage) parms[0];
+                       IMessageSink replySink = (IMessageSink)parms[1];
+                       
+                       CheckParameters (msg);
+                       IMessage res = RemotingServices.InternalExecuteMessage (_target, msg);
+                       
+                       replySink.SyncProcessMessage (res);
                }
 
                public IMessageSink NextSink