Add basic dbus implementation
authorJavier Jardón <javier.jardon@codethink.co.uk>
Fri, 6 May 2011 14:34:21 +0000 (15:34 +0100)
committerJavier Jardón <javier.jardon@codethink.co.uk>
Fri, 6 May 2011 17:48:29 +0000 (18:48 +0100)
We are using the dbus-glib deprecated bindings as we can not depend
on glib 2.26 for now

Makefile.am
configure.ac
src/dbus-client.vala [new file with mode: 0644]
src/moonshot-dbus-server.vala [new file with mode: 0644]
src/moonshot-window.vala

index 48c287e..c50e3d2 100644 (file)
@@ -2,7 +2,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
 
 SUBDIRS = po
 
-bin_PROGRAMS = src/moonshot
+bin_PROGRAMS = src/moonshot src/dbus-client
 
 
 AM_CPPFLAGS = \
@@ -12,7 +12,7 @@ AM_CPPFLAGS = \
 
 AM_VALAFLAGS = \
        config.vapi \
-       --pkg gtk+-2.0
+       --pkg gtk+-2.0 --pkg dbus-glib-1
 
 src_moonshot_SOURCES = \
         src/moonshot-id.vala \
@@ -20,7 +20,14 @@ src_moonshot_SOURCES = \
         src/moonshot-idcard-widget.vala \
         src/moonshot-custom-vbox.vala \
        src/moonshot-identities-manager.vala \
+        src/moonshot-dbus-server.vala \
         src/moonshot-window.vala
 
+src_dbus_client_SOURCES = \
+        src/dbus-client.vala
+
 src_moonshot_LDADD = \
         $(moonshot_LIBS)
+
+src_dbus_client_LDADD = \
+        $(moonshot_LIBS)
index b95bad1..6f361e4 100644 (file)
@@ -23,6 +23,7 @@ PKG_CHECK_MODULES(moonshot,[
         glib-2.0 >= 2.24
         gobject-2.0 >= 2.24
         gtk+-2.0 >= 2.20
+        dbus-glib-1
 ])
 
 # i18n stuff
diff --git a/src/dbus-client.vala b/src/dbus-client.vala
new file mode 100644 (file)
index 0000000..9b24f73
--- /dev/null
@@ -0,0 +1,22 @@
+[DBus (name = "org.janet.Moonshot")]
+interface Moonshot : Object {
+    public abstract int ping (string msg) throws DBus.Error;
+    public abstract string[] get_identity (string identity, string username, string password) throws DBus.Error;
+}
+
+void main () {
+    try {
+        var conn = DBus.Bus.get (DBus.BusType.SESSION);
+        var demo = (Moonshot) conn.get_object ("org.janet.Moonshot",
+                                               "/org/janet/moonshot");
+
+        int pong = demo.ping ("Hello from Vala");
+        stdout.printf ("%d\n", pong);
+
+        var text = demo.get_identity ("identity", "username", "pass");
+        stdout.printf ("%s %s %s\n", text[0], text[1], text[2]);
+
+    } catch (DBus.Error e) {
+        stderr.printf ("%s\n", e.message);
+    }
+}
diff --git a/src/moonshot-dbus-server.vala b/src/moonshot-dbus-server.vala
new file mode 100644 (file)
index 0000000..038d1dd
--- /dev/null
@@ -0,0 +1,19 @@
+[DBus (name = "org.janet.Moonshot")]
+public class MoonshotServer : Object {
+    private int counter;
+
+    public int ping (string msg)
+    {
+        stdout.printf ("%s\n", msg);
+        return counter++;
+    }
+
+    public string[] get_identity (string identity,
+                                  string password,
+                                  string service)
+    {
+        string[3] information = {"identity", "password", "certificate"};
+
+        return information;
+    }
+}
index c2e3678..7164c0a 100644 (file)
@@ -17,6 +17,8 @@ class MainWindow : Window
 
     private IdentitiesManager identities_manager;
 
+    private MoonshotServer dbus_server;
+
     private enum Columns
     {
         IDCARD_COL,
@@ -38,6 +40,7 @@ class MainWindow : Window
         load_gss_eap_id_file();
         //load_id_cards();
         connect_signals();
+        init_dbus_server();
     }
 
     private bool visible_func (TreeModel model, TreeIter iter)
@@ -465,6 +468,28 @@ class MainWindow : Window
         this.destroy.connect (Gtk.main_quit);
     }
 
+    private void init_dbus_server ()
+    {
+        try {
+            var conn = DBus.Bus.get (DBus.BusType.SESSION);
+            dynamic DBus.Object bus = conn.get_object ("org.freedesktop.DBus",
+                                                       "/org/freedesktop/DBus",
+                                                       "org.freedesktop.DBus");
+
+            // try to register service in session bus
+            uint reply = bus.request_name ("org.janet.Moonshot", (uint) 0);
+            assert (reply == DBus.RequestNameReply.PRIMARY_OWNER);
+
+            this.dbus_server = new MoonshotServer ();
+            conn.register_object ("/org/janet/moonshot", dbus_server);
+
+        }
+        catch (DBus.Error e)
+        {
+            stderr.printf ("%s\n", e.message);
+        }
+    }
+
     public static int main(string[] args)
     {
         Gtk.init(ref args);