summaryrefslogtreecommitdiffstats
path: root/mono
diff options
context:
space:
mode:
authorJon Trowbridge <trow@ximian.com>2004-08-31 03:59:14 +0000
committerJon Trowbridge <trow@ximian.com>2004-08-31 03:59:14 +0000
commit4a77a2dd972e817a08a4571220c8406709af8c48 (patch)
tree9a4ce9513836303b870b0f266f18b76900caa186 /mono
parent3a78ce17957de8f56b33bd0d25c2974c740a3b8b (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.
Diffstat (limited to 'mono')
-rw-r--r--mono/BusDriver.cs39
-rw-r--r--mono/Connection.cs11
-rw-r--r--mono/Handler.cs4
-rw-r--r--mono/Makefile.am1
-rw-r--r--mono/Message.cs38
-rw-r--r--mono/Service.cs2
6 files changed, 95 insertions, 0 deletions
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 ();
}
}