From f95b6081cba084d1b067acea99c0effa2b3bf42c Mon Sep 17 00:00:00 2001
From: MW
Date: Thu, 24 May 2007 12:35:32 +0000
Subject: Renamed the new Directories. (removed the "-Source" from the end of
them)
---
Common/XmlRpcCS/XmlRpcClientProxy.cs | 61 ++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
create mode 100644 Common/XmlRpcCS/XmlRpcClientProxy.cs
(limited to 'Common/XmlRpcCS/XmlRpcClientProxy.cs')
diff --git a/Common/XmlRpcCS/XmlRpcClientProxy.cs b/Common/XmlRpcCS/XmlRpcClientProxy.cs
new file mode 100644
index 0000000..f52273a
--- /dev/null
+++ b/Common/XmlRpcCS/XmlRpcClientProxy.cs
@@ -0,0 +1,61 @@
+namespace Nwc.XmlRpc
+{
+ using System;
+ using System.Runtime.Remoting.Proxies;
+ using System.Runtime.Remoting.Messaging;
+
+ /// This class provides support for creating local proxies of XML-RPC remote objects
+ ///
+ /// To create a local proxy you need to create a local C# interface and then, via createProxy
+ /// associate that interface with a remote object at a given URL.
+ ///
+public class XmlRpcClientProxy : RealProxy
+{
+ private String _remoteObjectName;
+ private String _url;
+ private XmlRpcRequest _client = new XmlRpcRequest();
+
+ /// Factory method to create proxies.
+ ///
+ /// To create a local proxy you need to create a local C# interface with methods that mirror those of the server object.
+ /// Next, pass that interface into createProxy along with the object name and URL of the remote object and
+ /// cast the resulting object to the specifice interface.
+ ///
+ /// String The name of the remote object.
+ /// String The URL of the remote object.
+ /// Type The typeof() of a C# interface.
+ /// Object A proxy for your specified interface. Cast to appropriate type.
+ public static Object createProxy(String remoteObjectName, String url, Type anInterface)
+ {
+ return new XmlRpcClientProxy(remoteObjectName, url, anInterface).GetTransparentProxy();
+ }
+
+ private XmlRpcClientProxy(String remoteObjectName, String url, Type t) : base(t)
+ {
+ _remoteObjectName = remoteObjectName;
+ _url = url;
+ }
+
+ /// The local method dispatcher - do not invoke.
+ override public IMessage Invoke(IMessage msg)
+ {
+ IMethodCallMessage methodMessage = (IMethodCallMessage)msg;
+
+ _client.MethodName = _remoteObjectName + "." + methodMessage.MethodName;
+ _client.Params.Clear();
+ foreach (Object o in methodMessage.Args)
+ _client.Params.Add(o);
+
+ try
+ {
+ Object ret = _client.Invoke(_url);
+ return new ReturnMessage(ret,null,0,
+ methodMessage.LogicalCallContext, methodMessage);
+ }
+ catch (Exception e)
+ {
+ return new ReturnMessage(e, methodMessage);
+ }
+ }
+}
+}
--
cgit v1.1