From 9ed0a8dbad121b64ca8baca78f28ca58602c47ca Mon Sep 17 00:00:00 2001
From: MW
Date: Wed, 25 Apr 2007 18:12:06 +0000
Subject: updated to use lastest version of libsl but is currently broke when
using SL viewer 1.15.02, due to big changes in the message templates.
---
XmlRpcCS/XmlRpcClientProxy.cs | 61 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
create mode 100644 XmlRpcCS/XmlRpcClientProxy.cs
(limited to 'XmlRpcCS/XmlRpcClientProxy.cs')
diff --git a/XmlRpcCS/XmlRpcClientProxy.cs b/XmlRpcCS/XmlRpcClientProxy.cs
new file mode 100644
index 0000000..f52273a
--- /dev/null
+++ b/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