example-signal-emitter.c

00001 #include <dbus/dbus-glib.h>
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 
00005 static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
00006 static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
00007 
00008 static void
00009 lose (const char *str, ...)
00010 {
00011   va_list args;
00012 
00013   va_start (args, str);
00014 
00015   vfprintf (stderr, str, args);
00016   fputc ('\n', stderr);
00017 
00018   va_end (args);
00019 
00020   exit (1);
00021 }
00022 
00023 static void
00024 lose_gerror (const char *prefix, GError *error) 
00025 {
00026   lose ("%s: %s", prefix, error->message);
00027 }
00028 
00029 typedef struct TestObject TestObject;
00030 typedef struct TestObjectClass TestObjectClass;
00031 
00032 GType test_object_get_type (void);
00033 
00034 struct TestObject
00035 {
00036   GObject parent;
00037 };
00038 
00039 struct TestObjectClass
00040 {
00041   GObjectClass parent;
00042 };
00043 
00044 enum
00045 {
00046   HELLO_SIGNAL,
00047   LAST_SIGNAL
00048 };
00049 
00050 static guint signals[LAST_SIGNAL] = { 0 };
00051 
00052 #define TEST_TYPE_OBJECT              (test_object_get_type ())
00053 #define TEST_OBJECT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), TEST_TYPE_OBJECT, TestObject))
00054 #define TEST_OBJECT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass))
00055 #define TEST_IS_OBJECT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), TEST_TYPE_OBJECT))
00056 #define TEST_IS_OBJECT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT))
00057 #define TEST_OBJECT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass))
00058 
00059 G_DEFINE_TYPE(TestObject, test_object, G_TYPE_OBJECT)
00060 
00061 gboolean test_object_emit_hello_signal (TestObject *obj, GError **error);
00062 
00063 #include "example-signal-emitter-glue.h"
00064 
00065 static void
00066 test_object_init (TestObject *obj)
00067 {
00068 }
00069 
00070 static void
00071 test_object_class_init (TestObjectClass *klass)
00072 {
00073   signals[HELLO_SIGNAL] =
00074     g_signal_new ("hello_signal",
00075                   G_OBJECT_CLASS_TYPE (klass),
00076                   G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
00077                   0,
00078                   NULL, NULL,
00079                   g_cclosure_marshal_VOID__STRING,
00080                   G_TYPE_NONE, 1, G_TYPE_STRING);
00081 }
00082 
00083 gboolean
00084 test_object_emit_hello_signal (TestObject *obj, GError **error)
00085 {
00086   g_signal_emit (obj, signals[HELLO_SIGNAL], 0, "Hello");
00087   return TRUE;
00088 }
00089 
00090 
00091 int
00092 main (int argc, char **argv)
00093 {
00094   DBusGConnection *bus;
00095   DBusGProxy *bus_proxy;
00096   GError *error = NULL;
00097   TestObject *obj;
00098   GMainLoop *mainloop;
00099   guint request_name_result;
00100 
00101   g_type_init ();
00102 
00103   dbus_g_object_type_install_info (TEST_TYPE_OBJECT, &dbus_glib_test_object_object_info);
00104   
00105   mainloop = g_main_loop_new (NULL, FALSE);
00106 
00107   bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
00108   if (!bus)
00109     lose_gerror ("Couldn't connect to session bus", error);
00110 
00111   bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus",
00112                                          "/org/freedesktop/DBus",
00113                                          "org.freedesktop.DBus");
00114 
00115   if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,
00116                           G_TYPE_STRING, "org.designfu.TestService",
00117                           G_TYPE_UINT, 0,
00118                           G_TYPE_INVALID,
00119                           G_TYPE_UINT, &request_name_result,
00120                           G_TYPE_INVALID))
00121     lose_gerror ("Failed to acquire org.designfu.TestService", error);
00122 
00123   obj = g_object_new (TEST_TYPE_OBJECT, NULL);
00124 
00125   dbus_g_connection_register_g_object (bus, "/org/designfu/TestService/object", G_OBJECT (obj));
00126 
00127   printf ("test service running\n");
00128 
00129   g_main_loop_run (mainloop);
00130 
00131   exit (0);
00132 }

Generated on Tue Feb 24 16:47:59 2009 for D-BUSGLibBindings by  doxygen 1.5.1