mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2025-12-22 14:50:11 +01:00
115 lines
2.6 KiB
C#
115 lines
2.6 KiB
C#
namespace DBus
|
|
{
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Diagnostics;
|
|
using System.Collections;
|
|
using System.Reflection;
|
|
using System.Reflection.Emit;
|
|
|
|
public class Service
|
|
{
|
|
private Connection connection;
|
|
private string name;
|
|
private bool local = false;
|
|
private Hashtable registeredHandlers = new Hashtable();
|
|
internal ModuleBuilder module = null;
|
|
|
|
internal Service(string name, Connection connection)
|
|
{
|
|
this.name = name;
|
|
this.connection = connection;
|
|
}
|
|
|
|
public Service(Connection connection, string name)
|
|
{
|
|
Error error = new Error();
|
|
error.Init();
|
|
|
|
// This isn't used for now
|
|
uint flags = 0;
|
|
|
|
if (dbus_bus_acquire_service(connection.RawConnection, name, flags, ref error) == -1) {
|
|
throw new DBusException(error);
|
|
}
|
|
|
|
this.connection = connection;
|
|
this.name = name;
|
|
this.local = true;
|
|
}
|
|
|
|
public static bool Exists(Connection connection, string name)
|
|
{
|
|
Error error = new Error();
|
|
error.Init();
|
|
|
|
if (dbus_bus_service_exists(connection.RawConnection,
|
|
name,
|
|
ref error)) {
|
|
return true;
|
|
} else {
|
|
if (error.IsSet) {
|
|
throw new DBusException(error);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static Service Get(Connection connection, string name)
|
|
{
|
|
if (Exists(connection, name)) {
|
|
return new Service(name, connection);
|
|
} else {
|
|
throw new ApplicationException("Service '" + name + "' does not exist.");
|
|
}
|
|
}
|
|
|
|
public void RegisterObject(object handledObject,
|
|
string pathName)
|
|
{
|
|
Handler handler = new Handler(handledObject,
|
|
pathName,
|
|
this);
|
|
registeredHandlers.Add(handledObject, handler);
|
|
}
|
|
|
|
internal Handler GetHandler(object handledObject)
|
|
{
|
|
return (Handler) registeredHandlers[handledObject];
|
|
}
|
|
|
|
public object GetObject(Type type, string pathName)
|
|
{
|
|
ProxyBuilder builder = new ProxyBuilder(this, type, pathName);
|
|
object proxy = builder.GetProxy();
|
|
return proxy;
|
|
}
|
|
|
|
public string Name
|
|
{
|
|
get
|
|
{
|
|
return this.name;
|
|
}
|
|
}
|
|
|
|
public Connection Connection
|
|
{
|
|
get
|
|
{
|
|
return connection;
|
|
}
|
|
|
|
set
|
|
{
|
|
this.connection = value;
|
|
}
|
|
}
|
|
|
|
[DllImport ("dbus-1")]
|
|
private extern static int dbus_bus_acquire_service (IntPtr rawConnection, string serviceName, uint flags, ref Error error);
|
|
|
|
[DllImport ("dbus-1")]
|
|
private extern static bool dbus_bus_service_exists (IntPtr rawConnection, string serviceName, ref Error error);
|
|
}
|
|
}
|