* configure.in: Add test/name-test/Makefile to the generated
[platform/upstream/dbus.git] / glib / examples / example-service.c
1 #include <dbus/dbus-glib.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
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;
7
8 static void
9 lose (const char *str, ...)
10 {
11   va_list args;
12
13   va_start (args, str);
14
15   vfprintf (stderr, str, args);
16   fputc ('\n', stderr);
17
18   va_end (args);
19
20   exit (1);
21 }
22
23 static void
24 lose_gerror (const char *prefix, GError *error) 
25 {
26   lose ("%s: %s", prefix, error->message);
27 }
28
29 typedef struct SomeObject SomeObject;
30 typedef struct SomeObjectClass SomeObjectClass;
31
32 GType some_object_get_type (void);
33
34 struct SomeObject
35 {
36   GObject parent;
37 };
38
39 struct SomeObjectClass
40 {
41   GObjectClass parent;
42 };
43
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))
50
51 G_DEFINE_TYPE(SomeObject, some_object, G_TYPE_OBJECT)
52
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);
56
57 #include "example-service-glue.h"
58
59 static void
60 some_object_init (SomeObject *obj)
61 {
62 }
63
64 static void
65 some_object_class_init (SomeObjectClass *klass)
66 {
67 }
68
69 gboolean
70 some_object_hello_world (SomeObject *obj, const char *hello_message, char ***ret, GError **error)
71 {
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");
76   (*ret)[2] = NULL;
77
78   return TRUE;
79 }
80
81 gboolean
82 some_object_get_tuple (SomeObject *obj, GValueArray **ret, GError **error)
83 {
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);
91   
92   return TRUE;
93 }
94
95 gboolean
96 some_object_get_dict (SomeObject *obj, GHashTable **ret, GError **error)
97 {
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");
101   return TRUE;
102 }
103
104 int
105 main (int argc, char **argv)
106 {
107   DBusGConnection *bus;
108   DBusGProxy *bus_proxy;
109   GError *error = NULL;
110   SomeObject *obj;
111   GMainLoop *mainloop;
112   guint request_name_result;
113
114   g_type_init ();
115
116   {
117     GLogLevelFlags fatal_mask;
118     
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);
122   }
123   
124   dbus_g_object_type_install_info (SOME_TYPE_OBJECT, &dbus_glib_some_object_object_info);
125
126   mainloop = g_main_loop_new (NULL, FALSE);
127
128   bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
129   if (!bus)
130     lose_gerror ("Couldn't connect to session bus", error);
131
132   bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus",
133                                          "/org/freedesktop/DBus",
134                                          "org.freedesktop.DBus");
135
136   if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,
137                           G_TYPE_STRING, "org.designfu.SampleService",
138                           G_TYPE_UINT, 0,
139                           G_TYPE_INVALID,
140                           G_TYPE_UINT, &request_name_result,
141                           G_TYPE_INVALID))
142     lose_gerror ("Failed to acquire org.designfu.SampleService", error);
143
144   obj = g_object_new (SOME_TYPE_OBJECT, NULL);
145
146   dbus_g_connection_register_g_object (bus, "/SomeObject", G_OBJECT (obj));
147
148   printf ("service running\n");
149
150   g_main_loop_run (mainloop);
151
152   exit (0);
153 }