2 #include "gdbus-example-objectmanager-generated.h"
4 /* ---------------------------------------------------------------------------------------------------- */
6 static GDBusObjectManagerServer *manager = NULL;
9 on_animal_poke (ExampleAnimal *animal,
10 GDBusMethodInvocation *invocation,
16 if ((make_sad && make_happy) || (!make_sad && !make_happy))
18 g_dbus_method_invocation_return_dbus_error (invocation,
19 "org.gtk.GDBus.Examples.ObjectManager.Error.Failed",
20 "Exactly one of make_sad or make_happy must be TRUE");
26 if (g_strcmp0 (example_animal_get_mood (animal), "Sad") == 0)
28 g_dbus_method_invocation_return_dbus_error (invocation,
29 "org.gtk.GDBus.Examples.ObjectManager.Error.SadAnimalIsSad",
30 "Sad animal is already sad");
34 example_animal_set_mood (animal, "Sad");
35 example_animal_complete_poke (animal, invocation);
41 if (g_strcmp0 (example_animal_get_mood (animal), "Happy") == 0)
43 g_dbus_method_invocation_return_dbus_error (invocation,
44 "org.gtk.GDBus.Examples.ObjectManager.Error.HappyAnimalIsHappy",
45 "Happy animal is already happy");
49 example_animal_set_mood (animal, "Happy");
50 example_animal_complete_poke (animal, invocation);
54 g_assert_not_reached ();
57 return TRUE; /* to indicate that the method was handled */
62 on_bus_acquired (GDBusConnection *connection,
66 GDBusObjectStub *object;
69 g_debug ("bus acquired");
71 manager = g_dbus_object_manager_server_new (connection, "/example/Animals");
72 for (n = 0; n < 10; n++)
75 ExampleAnimal *animal;
77 s = g_strdup_printf ("/example/Animals/%03d", n);
78 object = g_dbus_object_stub_new (s);
81 animal = example_animal_stub_new ();
82 example_animal_set_mood (animal, "Happy");
84 /* Handle Poke() method invocations */
85 g_signal_connect (animal,
87 G_CALLBACK (on_animal_poke),
88 NULL); /* user_data */
90 g_dbus_object_stub_add_interface (object, G_DBUS_INTERFACE_STUB (animal));
91 g_object_unref (animal);
93 g_dbus_object_manager_server_export (manager, object);
94 g_object_unref (object);
99 on_name_acquired (GDBusConnection *connection,
103 g_debug ("name acquired");
107 on_name_lost (GDBusConnection *connection,
111 g_debug ("name lost");
116 main (gint argc, gchar *argv[])
123 loop = g_main_loop_new (NULL, FALSE);
125 id = g_bus_own_name (G_BUS_TYPE_SESSION,
126 "org.gtk.GDBus.Examples.ObjectManager",
127 G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
128 G_BUS_NAME_OWNER_FLAGS_REPLACE,
135 g_main_loop_run (loop);
137 g_bus_unown_name (id);
138 g_main_loop_unref (loop);