[Gambas-user] Support for DBus in Gambas 3

Benoît Minisini gambas at ...1...
Mon Jul 19 15:53:09 CEST 2010


Hi,

The DBus system is now (almost) fully supported in Gambas 3, by the gb.dbus 
component.

What is DBus ? It is a "message bus system", i.e. a little program that can 
pass different kinds of messages between applications. It's like the old KDE 3 
DCOP system. For more information, see http://dbus.freedesktop.org.

There are normally two kind of bus running on your machine: the "system bus", 
that is global and unique, and the "session bus", that is launched for each 
connected user.

gb.dbus allows you to:

(1) Call any method or property exported by any application that is connected 
with the bus.

Example: 

	DBus["org.kde.kmail"]["/kmail/kmail_mainwindow_1"].geometry = 
		[0, 24, 1024, 768]

The syntax is:

- DBus[<Application>][<Object path>].<Method>(<Arguments>)
- DBus[<Application>][<Object path>].<Property>

<Application> can begin with "system://" or "session://" to define which bus 
you want to connect with. By default you connect with the session bus.

(2) Catch any signal raised by any interface.

Example:

	MySignal = New DBusSignal(DBus.System, "org.freedesktop.Hal.Manager",
		"DeviceAdded") As "DBusSignal"
	...
	Public Sub DBusSignal_Signal(Signal As String, Arguments As Variant[])
	  ...
	End

(3) Export any Gambas object to DBus, provided that the object inherits 
DBusObject.

Example:

	Dim hObject As MyClass ' MyClass inherits DBusObject

	DBus.Register(hObject, "/object/path")

The Gambas object is attached to an "object path", because all objects exposed 
to the DBus by your application is like a hierarchical file system.

What is exported?

- Public methods whose name has no underscore inside, and whose arguments and 
return type can be converted to a DBus datatype.

- Public properties whose name has no underscore inside, and whose type can be 
converted to a DBus datatype.

As soon as you register at least one object, your application appears on the 
bus with the name "org.gambas.<application name>".

All these methods and properties are exported with an interface name named 
"org.gambas.<application name>.<class name>".

You can test that with the DBus explorer example, or the qdbusviewer Qt4 
program.

What is not done yet ?

- You cannot raise DBus signals yet.

- You cannot use Collections yet.

Note that the gb.dbus component has a part written in C and a part written in 
Gambas. The part written in C provide hidden classes (whose name begins with 
"_") that the part written in Gambas uses to provided the full (and easy!) 
component interface.

Now just play with it and tell me what you think!

Regards,

-- 
Benoît Minisini




More information about the User mailing list