diff options
| author | Jon Trowbridge <trow@ximian.com> | 2004-08-31 03:59:14 +0000 | 
|---|---|---|
| committer | Jon Trowbridge <trow@ximian.com> | 2004-08-31 03:59:14 +0000 | 
| commit | 4a77a2dd972e817a08a4571220c8406709af8c48 (patch) | |
| tree | 9a4ce9513836303b870b0f266f18b76900caa186 | |
| parent | 3a78ce17957de8f56b33bd0d25c2974c740a3b8b (diff) | |
2004-08-30  Jon Trowbridge  <trow@ximian.com>
	    * mono/BusDriver.cs: Added.  This is a class for interacting with
	    the org.freedesktop.DBus service.
	    * mono/Message.cs: Added a mechanism to expose the message that is
	    currently being dispatched via the static Message.Current
	    property.  Added Message.Sender and Message.Destination
	    properties.
	    * mono/Handler.cs: Expose the dispatched message via
	    Message.Current when handling method calls.
	    * mono/Service.cs: Expose the dispatched message via
	    Message.Current when handling signal emissions.
	    * mono/Connection.cs: Bind dbus_bus_get_base_service via the
	    Connection.BaseService property.
| -rw-r--r-- | ChangeLog | 19 | ||||
| -rw-r--r-- | mono/BusDriver.cs | 39 | ||||
| -rw-r--r-- | mono/Connection.cs | 11 | ||||
| -rw-r--r-- | mono/Handler.cs | 4 | ||||
| -rw-r--r-- | mono/Makefile.am | 1 | ||||
| -rw-r--r-- | mono/Message.cs | 38 | ||||
| -rw-r--r-- | mono/Service.cs | 2 | 
7 files changed, 114 insertions, 0 deletions
@@ -1,3 +1,22 @@ +2004-08-30  Jon Trowbridge  <trow@ximian.com> + +	* mono/BusDriver.cs: Added.  This is a class for interacting with +	the org.freedesktop.DBus service. + +	* mono/Message.cs: Added a mechanism to expose the message that is +	currently being dispatched via the static Message.Current +	property.  Added Message.Sender and Message.Destination +	properties. + +	* mono/Handler.cs: Expose the dispatched message via +	Message.Current when handling method calls. + +	* mono/Service.cs: Expose the dispatched message via +	Message.Current when handling signal emissions. +	 +	* mono/Connection.cs: Bind dbus_bus_get_base_service via the +	Connection.BaseService property. +  2004-08-28  Havoc Pennington  <hp@redhat.com>  	* dbus/dbus-userdb.c (_dbus_is_console_user): remove unused variable diff --git a/mono/BusDriver.cs b/mono/BusDriver.cs new file mode 100644 index 00000000..8b1fc680 --- /dev/null +++ b/mono/BusDriver.cs @@ -0,0 +1,39 @@ +namespace DBus +{ + +  using System; + +  public delegate void ServiceEventHandler (string serviceName); + +  [Interface ("org.freedesktop.DBus")] +  public abstract class BusDriver +  { +    [Method] +    public abstract string[] ListServices (); + +    [Method] +    public abstract string GetServiceOwner (string serviceName); + +    [Method] +    public abstract UInt32 GetConnectionUnixUser (string connectionName); + + +    [Signal] +    public virtual event ServiceEventHandler ServiceCreated; + +    [Signal] +    public virtual event ServiceEventHandler ServiceDeleted; + + +    static public BusDriver New (Connection connection) +    { +      Service service; +      service = Service.Get (connection, "org.freedesktop.DBus"); + +      BusDriver driver; +      driver = (BusDriver) service.GetObject (typeof (BusDriver), "/org/freedesktop/DBus"); +       +      return driver; +    } +  } +} diff --git a/mono/Connection.cs b/mono/Connection.cs index fad0dc56..acc6ef6d 100644 --- a/mono/Connection.cs +++ b/mono/Connection.cs @@ -76,6 +76,14 @@ namespace DBus        return new Connection(rawConnection);      } +    public string BaseService +    { +      get +	{ +	  return Marshal.PtrToStringAnsi (dbus_bus_get_base_service (RawConnection)); +	} +    } +      public int Timeout      {        get @@ -182,5 +190,8 @@ namespace DBus      [DllImport ("dbus-1")]      private extern static void dbus_connection_disconnect (IntPtr ptr); + +    [DllImport ("dbus-1")] +    private extern static IntPtr dbus_bus_get_base_service (IntPtr ptr);    }  } diff --git a/mono/Handler.cs b/mono/Handler.cs index 91569e94..9696a4d3 100644 --- a/mono/Handler.cs +++ b/mono/Handler.cs @@ -177,11 +177,15 @@ namespace DBus        }        MethodInfo method = interfaceProxy.GetMethod(methodCall.Key); +       +      Message.Push (methodCall);        // Now call the method. FIXME: Error handling        object [] args = methodCall.Arguments.GetParameters(method);        object retVal = method.Invoke(this.handledObject, args); +      Message.Pop (); +        // Create the reply and send it        MethodReturn methodReturn = new MethodReturn(methodCall);        methodReturn.Arguments.AppendResults(method, retVal, args); diff --git a/mono/Makefile.am b/mono/Makefile.am index 8bb25f59..1d19ec01 100644 --- a/mono/Makefile.am +++ b/mono/Makefile.am @@ -9,6 +9,7 @@ ASSEMBLY_NAME=dbus-sharp  DBUS_SHARP_FILES= 		\  	Arguments.cs		\  	Bus.cs			\ +	BusDriver.cs		\  	Connection.cs		\  	Custom.cs		\  	DBusException.cs	\ diff --git a/mono/Message.cs b/mono/Message.cs index 54472d1e..5aa3542f 100644 --- a/mono/Message.cs +++ b/mono/Message.cs @@ -8,6 +8,25 @@ namespace DBus    public class Message     { +    private static Stack stack = new Stack (); +	   +    static public Message Current { +      get  +	{ +	  return stack.Count > 0 ? (Message) stack.Peek () : null; +	} +    } + +    static internal void Push (Message message) +    { +      stack.Push (message); +    } + +    static internal void Pop () +    { +      stack.Pop (); +    } +	        /// <summary>      /// A pointer to the underlying Message structure @@ -294,6 +313,22 @@ namespace DBus  	}      } +    public string Sender  +    { +      get +	{ +	  return Marshal.PtrToStringAnsi(dbus_message_get_sender(RawMessage)); +	} +    } + +    public string Destination +    { +      get +	{ +	  return Marshal.PtrToStringAnsi(dbus_message_get_destination(RawMessage)); +	} +    } +	          protected int Slot      {        get  @@ -373,5 +408,8 @@ namespace DBus      [DllImport("dbus-1")]      private extern static IntPtr dbus_message_get_destination(IntPtr rawMessage); + +    [DllImport("dbus-1")] +    private extern static IntPtr dbus_message_get_sender(IntPtr rawMessage);    }  } diff --git a/mono/Service.cs b/mono/Service.cs index 167cfc4c..35a25844 100644 --- a/mono/Service.cs +++ b/mono/Service.cs @@ -128,7 +128,9 @@ namespace DBus  	// We're only interested in signals  	Signal signal = (Signal) message;  	if (SignalCalled != null) { +	  Message.Push (message);  	  SignalCalled(signal); +	  Message.Pop ();  	}        }  | 
