object with multiple interfaces in ndesk-dbus (C#)?
Alp Toker
alp at atoker.com
Wed Oct 17 08:17:55 PDT 2007
Enric Jaen wrote:
> Hi, is there any example of an object implementing
> mutiple interfaces in ndesk-dbus? I mean, that when
> introspecting the object the XML shows more than one
> <interface>. The spec says this is valid.
>
> In python I think this is done by placing above each
> method definition an @ annotation indicating the
> interface name. Is this feature implemented in
> ndesk-dbus?
Multiple D-Bus interfaces can be provided simply by implementing them as
multiple C# interfaces. They are automatically mapped back and forth
both when implemented in managed code and when they are retrieved as a
proxy.
http://git.ndesk.org/?p=dbus-sharp;a=blob;f=examples/TestExportInterface.cs;h=10ba5bfb13813d110dbc88105b544e138e48f574;hb=HEAD
I've written up here a hypothetical application scenario "PhotoSpot"
which is conceptually an application that can also be run as a
screensaver. In particular, see how we deal with two methods that have
the same name but exist on different interfaces. (Note that I haven't
tried to compile this, should be fine though.)
[Interface ("org.ndesk.Application")]
public interface IApplication
{
string GetVersion ();
void Activate ();
}
[Interface ("org.ndesk.Screensaver")]
public interface IScreensaver
{
void Activate ();
}
public class PhotoSpot : IApplication, IScreensaver
{
public static void Main ()
{
if (bus.RequestName ("org.ndesk.PhotoSpot") !=
RequestNameReply.PrimaryOwner)
throw new Exception ("Failed to acquire bus name");
Bus.Session.Register (new ObjectPath ("/apps/PhotoSpot", new PhotoSpot
());
//run your main loop here
}
public string GetVersion ()
{
return "1.0";
}
public void Activate ()
{
showMainUI ();
}
void IScreensaver.Activate ()
{
showScreenSaver ();
}
}
More information about the dbus
mailing list