Vala DBus Example

Requires Vala 0.3.1

/* DBus in Vala sample code */

using GLib;
using DBus;

public class DBusSample : GLib.Object {

    private DBus.Connection conn;
    private dynamic DBus.Object purple;

    public void run () throws DBus.Error, GLib.Error {
        // remove the space before SESSION, it is only required for this wiki
        conn = DBus.Bus.get (DBus.BusType. SESSION);

        purple = conn.get_object ("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject", "im.pidgin.purple.PurpleInterface");

        // async dbus call
        purple.PurpleAccountsGetAllActive (getall_reply);

        // dbus signals
        purple.ReceivedImMsg += msg_received;
    }

    private void msg_received (dynamic DBus.Object purple, int dummy1, string sender, string message_, int dummy2, uint dummy3) {
        // dbus signal handler

        message ("Message received %s %s", sender, message_);
    }

    private void getall_reply (int[] ids, GLib.Error e) {
        // callback for async dbus call
        if (e != null) {
            critical (e.message);
            return;
        }
        try {
            foreach (int id in ids) {
                // sync dbus call
                string s = purple.PurpleAccountGetUsername (id);
                message ("Account %s", s);
            }
        } catch (DBus.Error dbus_error) {
            critical (dbus_error.message);
        }
    }

    static int main (string[] args) {
        var loop = new MainLoop (null, false);

        var test = new DBusSample ();
        try {
            test.run ();
        } catch (DBus.Error e) {
            stderr.printf ("Failed to initialise");
            return 1;
        } catch {
            stderr.printf ("Dynamic method failure");
            return 1;
        }

        loop.run ();

        return 0;
    }
}

Compile and Run

$ valac --pkg dbus-glib-1 -o dbussample DBusSample.vala
$ ./dbussample

Vala/DBusSample (last edited 2008-06-02 11:50:53 by PhilHousley)