[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