Re: Input handling



On Thu, 2007-08-16 at 20:38 +0300, Tadas Dailyda wrote:
> My recommendation would be not to mess with vala when doing D-Bus
> service. It was quiet some pain to do it in C for me and there were
> many
> odd things to figure out about DBus glib bindings. Personally I
> wouldn't
> try doing it with Vala.
I know, writing DBus services using C isn't easy with any existing
binding, sadly enough.
That's why it would be a great addition to Vala, to be able to write
your service/objects in some more "high level" language, which is
compiled to plain C code, using dbus-glib, libdbus or even something
completely else, not sorted out yet. Just like now it's very easy to in
Vala to use an existing object.

It will become something like this:
using DBus;
using Glib;

namespace Foo {
	[DBusInterface (name = "org.gnome.Foo.Bar")]
	interface Bar {
		int GetId();
	}

	class MyBar : Bar {
		public int GetId() {
			return 1;
		}

		public static int main(string[] args) {
			var loop = new MainLoop();
			var b = new Bar();
			var conn = DBus.Bus.get(DBus.BusType.SESSION);
			// This registers a new service to the bus
			var n = conn.register_service("org.gnome.Foo");
			// This registers a new object on the bus on service n
			// All interface stuff will be automaticly handled:
			// for each DBusInterface the object implements,
			// or its parent.
			n.register_object(b, "/org/gnome/FooBar");
			loop.run();
			return 0;
		}
	}
}

Here's a sample client:
using Foo;

class FooClient {
	public static int main(string[] args) {
		var conn = DBus.Bus.get(DBus.BusType.SESSION);
		var foobar = conn.get_object<Bar>("org.gnome.Foo",
"/org/gnome/FooBar");
		try {
			return foobar.GetId();
		}
		catch(DBusError e) {
			stdout.print(e.message);
			return 1;
		}
	}
}


So, the goal is not to use dbus-glib from Vala (that's how I started,
but because of bugs like #464988 to include the dbus-binding-tool
generated files, it's not possible now). Vala would get in-language
functionality for DBus services.

Nicolas

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]