diff options
author | Colin Walters <walters@verbum.org> | 2005-06-21 01:18:25 +0000 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2005-06-21 01:18:25 +0000 |
commit | 21a73df1b5a7e2ace06a1e252ab019392692d21b (patch) | |
tree | 961cb03c39c22b9339379fb44ebb4a4b97fca3a4 /glib/examples/example-client.c | |
parent | 778579ec214548f4e0daeb7aff7894948bdbf990 (diff) |
2005-06-20 Colin Walters <walters@verbum.org>
* configure.in: Add glib/examples.
* glib/Makefile.am: Add examples/
* glib/examples/.cvsignore
* glib/examples/Makefile.am
* glib/examples/example-client.c
* glib/examples/example-service.c
* glib/examples/example-service.xml
* glib/examples/example-signal-emitter.c
* glib/examples/example-signal-emitter.xml
* glib/examples/example-signal-recipient.c:
New files; GLib binding examples, ported from
python/examples.
Diffstat (limited to 'glib/examples/example-client.c')
-rw-r--r-- | glib/examples/example-client.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/glib/examples/example-client.c b/glib/examples/example-client.c new file mode 100644 index 00000000..fb157a75 --- /dev/null +++ b/glib/examples/example-client.c @@ -0,0 +1,107 @@ +#include <dbus/dbus-glib.h> +#include <stdio.h> +#include <stdlib.h> + +static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2); +static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN; + +static void +lose (const char *str, ...) +{ + va_list args; + + va_start (args, str); + + vfprintf (stderr, str, args); + fputc ('\n', stderr); + + va_end (args); + + exit (1); +} + +static void +lose_gerror (const char *prefix, GError *error) +{ + lose ("%s: %s", prefix, error->message); +} + +static void +print_hash_value (gpointer key, gpointer val, gpointer data) +{ + printf ("%s -> %s\n", (char *) key, (char *) val); +} + +int +main (int argc, char **argv) +{ + DBusGConnection *bus; + DBusGProxy *remote_object; + DBusGProxy *remote_object_introspectable; + GError *error = NULL; + char **reply_list; + char **reply_ptr; + DBusGValue *hello_reply_struct; + GHashTable *hello_reply_dict; + char *introspect_data; + + g_type_init (); + + bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); + if (!bus) + lose_gerror ("Couldn't connect to session bus", error); + + remote_object = dbus_g_proxy_new_for_name (bus, + "org.designfu.SampleService", + "/SomeObject", + "org.designfu.SampleInterface"); + + if (!dbus_g_proxy_call (remote_object, "HelloWorld", &error, + G_TYPE_STRING, "Hello from example-client.c!", G_TYPE_INVALID, + G_TYPE_STRV, &reply_list, G_TYPE_INVALID)) + lose_gerror ("Failed to complete HelloWorld", error); + + + /* FIXME - we don't support recursive values yet */ +#if 0 + if (!dbus_g_proxy_call (remote_object, "GetTuple", &error, + DBUS_TYPE_G_VALUE, &hello_reply_struct, G_TYPE_INVALID)) + lose_gerror ("Failed to complete GetTuple", error); +#endif + + if (!dbus_g_proxy_call (remote_object, "GetDict", &error, + G_TYPE_INVALID, + DBUS_TYPE_G_STRING_STRING_HASHTABLE, &hello_reply_dict, G_TYPE_INVALID)) + lose_gerror ("Failed to complete GetDict", error); + + printf ("reply_list: "); + for (reply_ptr = reply_list; *reply_ptr; reply_ptr++) + printf ("\"%s\" ", *reply_ptr); + printf ("\n"); + g_strfreev (reply_list); + + /* FIXME; do something with hello_reply_struct */ +#if 0 + dbus_g_value_free (hello_reply_struct); + printf ("\n"); +#endif + + g_hash_table_foreach (hello_reply_dict, print_hash_value, NULL); + g_hash_table_destroy (hello_reply_dict); + + remote_object_introspectable = dbus_g_proxy_new_for_name (bus, + "org.designfu.SampleService", + "/SomeObject", + "org.freedesktop.DBus.Introspectable"); + if (!dbus_g_proxy_call (remote_object_introspectable, "Introspect", &error, + G_TYPE_INVALID, + G_TYPE_STRING, &introspect_data, G_TYPE_INVALID)) + lose_gerror ("Failed to complete Introspect", error); + printf ("%s", introspect_data); + g_free (introspect_data); + + g_object_unref (G_OBJECT (remote_object_introspectable)); + g_object_unref (G_OBJECT (remote_object)); + + exit(0); +} |