1 #include <dbus/dbus-glib.h>
5 static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
6 static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
9 lose (const char *str, ...)
15 vfprintf (stderr, str, args);
24 lose_gerror (const char *prefix, GError *error)
26 lose ("%s: %s", prefix, error->message);
29 typedef struct SomeObject SomeObject;
30 typedef struct SomeObjectClass SomeObjectClass;
32 GType some_object_get_type (void);
39 struct SomeObjectClass
44 #define SOME_TYPE_OBJECT (some_object_get_type ())
45 #define SOME_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SOME_TYPE_OBJECT, SomeObject))
46 #define SOME_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOME_TYPE_OBJECT, SomeObjectClass))
47 #define SOME_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SOME_TYPE_OBJECT))
48 #define SOME_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SOME_TYPE_OBJECT))
49 #define SOME_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SOME_TYPE_OBJECT, SomeObjectClass))
51 G_DEFINE_TYPE(SomeObject, some_object, G_TYPE_OBJECT)
53 gboolean some_object_hello_world (SomeObject *obj, const char *hello_message, char ***ret, GError **error);
54 gboolean some_object_get_tuple (SomeObject *obj, GValueArray **ret, GError **error);
55 gboolean some_object_get_dict (SomeObject *obj, GHashTable **ret, GError **error);
57 #include "example-service-glue.h"
60 some_object_init (SomeObject *obj)
65 some_object_class_init (SomeObjectClass *klass)
70 some_object_hello_world (SomeObject *obj, const char *hello_message, char ***ret, GError **error)
72 printf ("%s\n", hello_message);
73 *ret = g_new (char *, 3);
74 (*ret)[0] = g_strdup ("Hello");
75 (*ret)[1] = g_strdup (" from example-service.c");
82 some_object_get_tuple (SomeObject *obj, GValueArray **ret, GError **error)
84 *ret = g_value_array_new (6);
85 g_value_array_prepend (*ret, NULL);
86 g_value_init (g_value_array_get_nth (*ret, 0), G_TYPE_STRING);
87 g_value_set_string (g_value_array_get_nth (*ret, 0), "hello");
88 g_value_array_prepend (*ret, NULL);
89 g_value_init (g_value_array_get_nth (*ret, 0), G_TYPE_UINT);
90 g_value_set_uint (g_value_array_get_nth (*ret, 0), 42);
96 some_object_get_dict (SomeObject *obj, GHashTable **ret, GError **error)
98 *ret = g_hash_table_new (g_str_hash, g_str_equal);
99 g_hash_table_insert (*ret, "first", "Hello Dict");
100 g_hash_table_insert (*ret, "second", " from example-service.c");
105 main (int argc, char **argv)
107 DBusGConnection *bus;
108 DBusGProxy *bus_proxy;
109 GError *error = NULL;
112 guint request_name_result;
117 GLogLevelFlags fatal_mask;
119 fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
120 fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
121 g_log_set_always_fatal (fatal_mask);
124 dbus_g_object_type_install_info (SOME_TYPE_OBJECT, &dbus_glib_some_object_object_info);
126 mainloop = g_main_loop_new (NULL, FALSE);
128 bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
130 lose_gerror ("Couldn't connect to session bus", error);
132 bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus",
133 "/org/freedesktop/DBus",
134 "org.freedesktop.DBus");
136 if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,
137 G_TYPE_STRING, "org.designfu.SampleService",
140 G_TYPE_UINT, &request_name_result,
142 lose_gerror ("Failed to acquire org.designfu.SampleService", error);
144 obj = g_object_new (SOME_TYPE_OBJECT, NULL);
146 dbus_g_connection_register_g_object (bus, "/SomeObject", G_OBJECT (obj));
148 printf ("service running\n");
150 g_main_loop_run (mainloop);