diff options
Diffstat (limited to 'glib/examples')
-rw-r--r-- | glib/examples/.cvsignore | 17 | ||||
-rw-r--r-- | glib/examples/Makefile.am | 38 | ||||
-rw-r--r-- | glib/examples/example-client.c | 121 | ||||
-rw-r--r-- | glib/examples/example-service.c | 153 | ||||
-rw-r--r-- | glib/examples/example-service.xml | 19 | ||||
-rw-r--r-- | glib/examples/example-signal-emitter.c | 132 | ||||
-rw-r--r-- | glib/examples/example-signal-emitter.xml | 13 | ||||
-rw-r--r-- | glib/examples/example-signal-recipient.c | 102 | ||||
-rw-r--r-- | glib/examples/statemachine/.cvsignore | 16 | ||||
-rw-r--r-- | glib/examples/statemachine/Makefile.am | 35 | ||||
-rw-r--r-- | glib/examples/statemachine/sm-marshal.list | 1 | ||||
-rw-r--r-- | glib/examples/statemachine/statemachine-client.c | 662 | ||||
-rw-r--r-- | glib/examples/statemachine/statemachine-server.c | 229 | ||||
-rw-r--r-- | glib/examples/statemachine/statemachine-server.h | 37 | ||||
-rw-r--r-- | glib/examples/statemachine/statemachine-server.xml | 14 | ||||
-rw-r--r-- | glib/examples/statemachine/statemachine.c | 353 | ||||
-rw-r--r-- | glib/examples/statemachine/statemachine.h | 77 | ||||
-rw-r--r-- | glib/examples/statemachine/statemachine.xml | 33 |
18 files changed, 0 insertions, 2052 deletions
diff --git a/glib/examples/.cvsignore b/glib/examples/.cvsignore deleted file mode 100644 index fc6a0634..00000000 --- a/glib/examples/.cvsignore +++ /dev/null @@ -1,17 +0,0 @@ -.deps -.libs -Makefile -Makefile.in -*.lo -*.la -example-client -example-service -example-service-glue.h -example-signal-recipient -example-signal-emitter -example-signal-emitter-glue.h -run-with-tmp-session-bus.conf -*.bb -*.bbg -*.da -*.gcov diff --git a/glib/examples/Makefile.am b/glib/examples/Makefile.am deleted file mode 100644 index 34b9cb8b..00000000 --- a/glib/examples/Makefile.am +++ /dev/null @@ -1,38 +0,0 @@ -SUBDIRS = . statemachine - -INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) -DDBUS_COMPILATION - -## Makefile.am bits for sample client/server pair - -noinst_PROGRAMS= example-client example-service - -example_client_SOURCES= example-client.c -example_client_LDADD= $(top_builddir)/glib/libdbus-glib-1.la - -example_service_SOURCES= example-service.c -example_service_LDADD= $(top_builddir)/glib/libdbus-glib-1.la - -BUILT_SOURCES = example-service-glue.h - -example-service-glue.h: example-service.xml - $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=some_object --mode=glib-server --output=example-service-glue.h $(srcdir)/example-service.xml - - -## Makefile.am bits for another client/server pair - -noinst_PROGRAMS += example-signal-recipient example-signal-emitter - -example_signal_recipient_SOURCES= example-signal-recipient.c -example_signal_recipient_LDADD= $(top_builddir)/glib/libdbus-glib-1.la - -example_signal_emitter_SOURCES= example-signal-emitter.c -example_signal_emitter_LDADD= $(top_builddir)/glib/libdbus-glib-1.la - -BUILT_SOURCES += example-signal-emitter-glue.h - -example-signal-emitter-glue.h: example-signal-emitter.xml - $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=test_object --mode=glib-server --output=example-signal-emitter-glue.h $(srcdir)/example-signal-emitter.xml - -CLEANFILES = $(BUILT_SOURCES) - -EXTRA_DIST = example-service.xml example-signal-emitter.xml diff --git a/glib/examples/example-client.c b/glib/examples/example-client.c deleted file mode 100644 index dac1f825..00000000 --- a/glib/examples/example-client.c +++ /dev/null @@ -1,121 +0,0 @@ -#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; - GValueArray *hello_reply_struct; - GHashTable *hello_reply_dict; - char *introspect_data; - guint i; - - g_type_init (); - - { - GLogLevelFlags fatal_mask; - - fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK); - fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL; - g_log_set_always_fatal (fatal_mask); - } - - 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); - - - if (!dbus_g_proxy_call (remote_object, "GetTuple", &error, - G_TYPE_INVALID, - G_TYPE_VALUE_ARRAY, &hello_reply_struct, G_TYPE_INVALID)) - lose_gerror ("Failed to complete GetTuple", error); - - 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); - - for (i = 0; i < hello_reply_struct->n_values; i++) - { - GValue strval = { 0, }; - - g_value_init (&strval, G_TYPE_STRING); - if (!g_value_transform (g_value_array_get_nth (hello_reply_struct, i), &strval)) - g_value_set_static_string (&strval, "(couldn't transform to string)"); - g_print ("%s: %s\n", g_type_name (G_VALUE_TYPE (g_value_array_get_nth (hello_reply_struct, i))), - g_value_get_string (&strval)); - } - g_value_array_free (hello_reply_struct); - printf ("\n"); - - 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); -} diff --git a/glib/examples/example-service.c b/glib/examples/example-service.c deleted file mode 100644 index a66855c1..00000000 --- a/glib/examples/example-service.c +++ /dev/null @@ -1,153 +0,0 @@ -#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); -} - -typedef struct SomeObject SomeObject; -typedef struct SomeObjectClass SomeObjectClass; - -GType some_object_get_type (void); - -struct SomeObject -{ - GObject parent; -}; - -struct SomeObjectClass -{ - GObjectClass parent; -}; - -#define SOME_TYPE_OBJECT (some_object_get_type ()) -#define SOME_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SOME_TYPE_OBJECT, SomeObject)) -#define SOME_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOME_TYPE_OBJECT, SomeObjectClass)) -#define SOME_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SOME_TYPE_OBJECT)) -#define SOME_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SOME_TYPE_OBJECT)) -#define SOME_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SOME_TYPE_OBJECT, SomeObjectClass)) - -G_DEFINE_TYPE(SomeObject, some_object, G_TYPE_OBJECT) - -gboolean some_object_hello_world (SomeObject *obj, const char *hello_message, char ***ret, GError **error); -gboolean some_object_get_tuple (SomeObject *obj, GValueArray **ret, GError **error); -gboolean some_object_get_dict (SomeObject *obj, GHashTable **ret, GError **error); - -#include "example-service-glue.h" - -static void -some_object_init (SomeObject *obj) -{ -} - -static void -some_object_class_init (SomeObjectClass *klass) -{ -} - -gboolean -some_object_hello_world (SomeObject *obj, const char *hello_message, char ***ret, GError **error) -{ - printf ("%s\n", hello_message); - *ret = g_new (char *, 3); - (*ret)[0] = g_strdup ("Hello"); - (*ret)[1] = g_strdup (" from example-service.c"); - (*ret)[2] = NULL; - - return TRUE; -} - -gboolean -some_object_get_tuple (SomeObject *obj, GValueArray **ret, GError **error) -{ - *ret = g_value_array_new (6); - g_value_array_prepend (*ret, NULL); - g_value_init (g_value_array_get_nth (*ret, 0), G_TYPE_STRING); - g_value_set_string (g_value_array_get_nth (*ret, 0), "hello"); - g_value_array_prepend (*ret, NULL); - g_value_init (g_value_array_get_nth (*ret, 0), G_TYPE_UINT); - g_value_set_uint (g_value_array_get_nth (*ret, 0), 42); - - return TRUE; -} - -gboolean -some_object_get_dict (SomeObject *obj, GHashTable **ret, GError **error) -{ - *ret = g_hash_table_new (g_str_hash, g_str_equal); - g_hash_table_insert (*ret, "first", "Hello Dict"); - g_hash_table_insert (*ret, "second", " from example-service.c"); - return TRUE; -} - -int -main (int argc, char **argv) -{ - DBusGConnection *bus; - DBusGProxy *bus_proxy; - GError *error = NULL; - SomeObject *obj; - GMainLoop *mainloop; - guint request_name_result; - - g_type_init (); - - { - GLogLevelFlags fatal_mask; - - fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK); - fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL; - g_log_set_always_fatal (fatal_mask); - } - - dbus_g_object_type_install_info (SOME_TYPE_OBJECT, &dbus_glib_some_object_object_info); - - mainloop = g_main_loop_new (NULL, FALSE); - - bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (!bus) - lose_gerror ("Couldn't connect to session bus", error); - - bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus", - "/org/freedesktop/DBus", - "org.freedesktop.DBus"); - - if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error, - G_TYPE_STRING, "org.designfu.SampleService", - G_TYPE_UINT, 0, - G_TYPE_INVALID, - G_TYPE_UINT, &request_name_result, - G_TYPE_INVALID)) - lose_gerror ("Failed to acquire org.designfu.SampleService", error); - - obj = g_object_new (SOME_TYPE_OBJECT, NULL); - - dbus_g_connection_register_g_object (bus, "/SomeObject", G_OBJECT (obj)); - - printf ("service running\n"); - - g_main_loop_run (mainloop); - - exit (0); -} diff --git a/glib/examples/example-service.xml b/glib/examples/example-service.xml deleted file mode 100644 index 9c39bb05..00000000 --- a/glib/examples/example-service.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<node name="/"> - <interface name="org.designfu.SampleInterface"> - <method name="HelloWorld"> - <arg type="s"/> - <arg type="as" direction="out"/> - </method> - - <method name="GetTuple"> - <arg type="(ss)" direction="out" /> - </method> - - <method name="GetDict"> - <arg type="a{ss}" direction="out"/> - </method> - - </interface> -</node> diff --git a/glib/examples/example-signal-emitter.c b/glib/examples/example-signal-emitter.c deleted file mode 100644 index c60865d2..00000000 --- a/glib/examples/example-signal-emitter.c +++ /dev/null @@ -1,132 +0,0 @@ -#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); -} - -typedef struct TestObject TestObject; -typedef struct TestObjectClass TestObjectClass; - -GType test_object_get_type (void); - -struct TestObject -{ - GObject parent; -}; - -struct TestObjectClass -{ - GObjectClass parent; -}; - -enum -{ - HELLO_SIGNAL, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -#define TEST_TYPE_OBJECT (test_object_get_type ()) -#define TEST_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), TEST_TYPE_OBJECT, TestObject)) -#define TEST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass)) -#define TEST_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), TEST_TYPE_OBJECT)) -#define TEST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT)) -#define TEST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass)) - -G_DEFINE_TYPE(TestObject, test_object, G_TYPE_OBJECT) - -gboolean test_object_emit_hello_signal (TestObject *obj, GError **error); - -#include "example-signal-emitter-glue.h" - -static void -test_object_init (TestObject *obj) -{ -} - -static void -test_object_class_init (TestObjectClass *klass) -{ - signals[HELLO_SIGNAL] = - g_signal_new ("hello_signal", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, 1, G_TYPE_STRING); -} - -gboolean -test_object_emit_hello_signal (TestObject *obj, GError **error) -{ - g_signal_emit (obj, signals[HELLO_SIGNAL], 0, "Hello"); - return TRUE; -} - - -int -main (int argc, char **argv) -{ - DBusGConnection *bus; - DBusGProxy *bus_proxy; - GError *error = NULL; - TestObject *obj; - GMainLoop *mainloop; - guint request_name_result; - - g_type_init (); - - dbus_g_object_type_install_info (TEST_TYPE_OBJECT, &dbus_glib_test_object_object_info); - - mainloop = g_main_loop_new (NULL, FALSE); - - bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (!bus) - lose_gerror ("Couldn't connect to session bus", error); - - bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus", - "/org/freedesktop/DBus", - "org.freedesktop.DBus"); - - if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error, - G_TYPE_STRING, "org.designfu.TestService", - G_TYPE_UINT, 0, - G_TYPE_INVALID, - G_TYPE_UINT, &request_name_result, - G_TYPE_INVALID)) - lose_gerror ("Failed to acquire org.designfu.TestService", error); - - obj = g_object_new (TEST_TYPE_OBJECT, NULL); - - dbus_g_connection_register_g_object (bus, "/org/designfu/TestService/object", G_OBJECT (obj)); - - printf ("test service running\n"); - - g_main_loop_run (mainloop); - - exit (0); -} diff --git a/glib/examples/example-signal-emitter.xml b/glib/examples/example-signal-emitter.xml deleted file mode 100644 index ae178e3b..00000000 --- a/glib/examples/example-signal-emitter.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<node name="/"> - <interface name="org.designfu.TestService"> - - <method name="emitHelloSignal"> - </method> - - <!-- Mark the signal as exported --> - <signal name="HelloSignal"/> - - </interface> -</node> diff --git a/glib/examples/example-signal-recipient.c b/glib/examples/example-signal-recipient.c deleted file mode 100644 index 86ba4c77..00000000 --- a/glib/examples/example-signal-recipient.c +++ /dev/null @@ -1,102 +0,0 @@ -#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 gboolean -emit_signal (gpointer arg) -{ - DBusGProxy *proxy = arg; - - dbus_g_proxy_call_no_reply (proxy, "emitHelloSignal", G_TYPE_INVALID); - return TRUE; -} - -static void -hello_signal_handler (DBusGProxy *proxy, const char *hello_string, gpointer user_data) -{ - printf ("Received signal and it says: %s\n", hello_string); -} - -int -main (int argc, char **argv) -{ - DBusGConnection *bus; - DBusGProxy *remote_object; - GError *error = NULL; - GMainLoop *mainloop; - - g_type_init (); - - mainloop = g_main_loop_new (NULL, FALSE); - - bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (!bus) - lose_gerror ("Couldn't connect to session bus", error); - - /* We use _for_name_owner in order to track this particular service - * instance, which lets us receive signals. - */ - remote_object = dbus_g_proxy_new_for_name (bus, - "org.designfu.TestService", - "/org/designfu/TestService/object", - "org.designfu.TestService"); - if (!remote_object) - lose_gerror ("Failed to get name owner", error); - - /* IMPORTANT: - * - * Note because this signal's signature is VOID__STRING, we do not - * need to register a marshaller, since there is a builtin one. - * However for other signatures, you must generate a marshaller, - * then call dbus_g_object_register_marshaller. It would look like - * this: - * - * dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID); - * - */ - - /* Tell DBus what the type signature of the signal callback is; this - * allows us to sanity-check incoming messages before invoking the - * callback. You need to do this once for each proxy you create, - * not every time you want to connect to the signal. - */ - dbus_g_proxy_add_signal (remote_object, "HelloSignal", G_TYPE_STRING, G_TYPE_INVALID); - - /* Actually connect to the signal. Note you can call - * dbus_g_proxy_connect_signal multiple times for one invocation of - * dbus_g_proxy_add_signal. - */ - dbus_g_proxy_connect_signal (remote_object, "HelloSignal", G_CALLBACK (hello_signal_handler), - NULL, NULL); - - - g_timeout_add (2000, emit_signal, remote_object); - - g_main_loop_run (mainloop); - - exit (0); -} diff --git a/glib/examples/statemachine/.cvsignore b/glib/examples/statemachine/.cvsignore deleted file mode 100644 index 6bf74218..00000000 --- a/glib/examples/statemachine/.cvsignore +++ /dev/null @@ -1,16 +0,0 @@ -.deps -.libs -Makefile -Makefile.in -*.lo -*.la -statemachine-client -statemachine-server -statemachine-glue.h -statemachine-server-glue.h -run-with-tmp-session-bus.conf -sm-marshal.[ch] -*.bb -*.bbg -*.da -*.gcov diff --git a/glib/examples/statemachine/Makefile.am b/glib/examples/statemachine/Makefile.am deleted file mode 100644 index 0fea83ed..00000000 --- a/glib/examples/statemachine/Makefile.am +++ /dev/null @@ -1,35 +0,0 @@ -INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GTK_THREADS_CFLAGS) -DDBUS_COMPILATION - -## Makefile.am bits for sample client/server pair - -noinst_PROGRAMS= statemachine-server - -if HAVE_GTK -noinst_PROGRAMS += statemachine-client -endif - -EXTRA_DIST = statemachine.h statemachine-server.h sm-marshal.list statemachine-server.xml statemachine.xml - -statemachine_server_SOURCES= statemachine-server.c sm-marshal.c statemachine.c -statemachine_server_LDADD= $(top_builddir)/glib/libdbus-glib-1.la - -statemachine_client_SOURCES= statemachine-client.c sm-marshal.c statemachine.h -statemachine_client_LDADD= $(top_builddir)/glib/libdbus-glib-1.la $(DBUS_GTK_THREADS_LIBS) - -BUILT_SOURCES = statemachine-server-glue.h statemachine-glue.h - -statemachine-server-glue.h: statemachine-server.xml - $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=sm_server --mode=glib-server --output=$@ $< - -statemachine-glue.h: statemachine.xml - $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=sm_object --mode=glib-server --output=$@ $< - -sm-marshal.c: Makefile sm-marshal.list - @GLIB_GENMARSHAL@ --prefix=sm_marshal $(srcdir)/sm-marshal.list --header --body > $@.tmp && mv $@.tmp $@ - -sm-marshal.h: Makefile sm-marshal.list - @GLIB_GENMARSHAL@ --prefix=sm_marshal $(srcdir)/sm-marshal.list --header > $@.tmp && mv $@.tmp $@ - -BUILT_SOURCES += sm-marshal.c sm-marshal.h - -CLEANFILES = $(BUILT_SOURCES) diff --git a/glib/examples/statemachine/sm-marshal.list b/glib/examples/statemachine/sm-marshal.list deleted file mode 100644 index e72aa4bc..00000000 --- a/glib/examples/statemachine/sm-marshal.list +++ /dev/null @@ -1 +0,0 @@ -VOID:STRING,BOXED diff --git a/glib/examples/statemachine/statemachine-client.c b/glib/examples/statemachine/statemachine-client.c deleted file mode 100644 index 88b21847..00000000 --- a/glib/examples/statemachine/statemachine-client.c +++ /dev/null @@ -1,662 +0,0 @@ -#include <dbus/dbus-glib.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <gtk/gtk.h> -#include <glib/gi18n.h> -#include "sm-marshal.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; - GtkWidget *dialog; - char *text; - - va_start (args, str); - - text = g_strdup_vprintf (str, args); - - va_end (args); - - dialog = gtk_message_dialog_new (NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - "%s", - text); - gtk_dialog_run (GTK_DIALOG (dialog)); - - g_free (text); - - exit (1); -} - -static void -lose_gerror (const char *prefix, GError *error) -{ - GtkWidget *dialog; - - dialog = gtk_message_dialog_new (NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - "%s", - prefix); - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), - "%s", - error->message); - - gtk_dialog_run (GTK_DIALOG (dialog)); - - exit (1); -} - -typedef struct -{ - char *name; - char *state; - gdouble progress; - DBusGProxy *proxy; - DBusGProxyCall *get_progress_call; -} MachineInfo; - -typedef struct -{ - GtkWindow *window; - GtkWidget *view; - GtkTreeModel *store; - - DBusGConnection *bus; - DBusGProxy *server_proxy; - - GSList *pending_creation_calls; - DBusGProxyCall *get_machines_call; -} ClientState; - -static gboolean -proxy_to_iter (GtkTreeModel *model, DBusGProxy *proxy, GtkTreeIter *iter) -{ - if (!gtk_tree_model_get_iter_first (model, iter)) - return FALSE; - do { - MachineInfo *info; - gtk_tree_model_get (model, iter, 0, &info, -1); - if (info->proxy == proxy) - return TRUE; - } while (gtk_tree_model_iter_next (model, iter)); - return FALSE; -} - -static void -signal_row_change (ClientState *state, GtkTreeIter *iter) -{ - GtkTreePath *path; - path = gtk_tree_model_get_path (state->store, iter); - gtk_tree_model_row_changed (state->store, path, iter); - gtk_tree_path_free (path); -} - -static void -get_machine_info_cb (DBusGProxy *proxy, - DBusGProxyCall *call, - gpointer data) -{ - GtkTreeIter iter; - ClientState *state = data; - GError *error = NULL; - char *name, *statename; - MachineInfo *info; - - if (!dbus_g_proxy_end_call (proxy, call, &error, - G_TYPE_STRING, &name, - G_TYPE_STRING, &statename, - G_TYPE_INVALID)) - lose_gerror ("Couldn't complete GetInfo", error); - - if (!proxy_to_iter (state->store, proxy, &iter)) - g_assert_not_reached (); - - gtk_tree_model_get (state->store, &iter, 0, &info, -1); - g_free (info->name); - info->name = name; - g_free (info->state); - info->state = statename; - signal_row_change (state, &iter); -} - -static void -set_proxy_acquisition_progress (ClientState *state, - DBusGProxy *proxy, - double progress) -{ - MachineInfo *info; - GtkTreeIter iter; - - if (!proxy_to_iter (state->store, proxy, &iter)) - g_assert_not_reached (); - gtk_tree_model_get (state->store, &iter, 0, &info, -1); - - /* Ignore machines in unknown state */ - if (!info->state) - return; - - if (strcmp (info->state, "Acquired")) - lose ("Got AcquisitionProgress signal in bad state %s", - info->state); - - g_print ("Got acquisition progress change for %p (%s) to %f\n", proxy, info->name ? info->name : "(unknown)", progress); - - info->progress = progress; - - signal_row_change (state, &iter); -} - -static void -proxy_acquisition_changed_cb (DBusGProxy *proxy, - double progress, - gpointer user_data) -{ - set_proxy_acquisition_progress (user_data, proxy, progress); -} - -static void -get_acquiring_progress_cb (DBusGProxy *proxy, - DBusGProxyCall *call, - gpointer user_data) -{ - GError *error = NULL; - MachineInfo *info; - GtkTreeIter iter; - ClientState *state = user_data; - gdouble progress; - - if (!proxy_to_iter (state->store, proxy, &iter)) - g_assert_not_reached (); - gtk_tree_model_get (state->store, &iter, 0, &info, -1); - - g_assert (info->get_progress_call == call); - - if (!dbus_g_proxy_end_call (proxy, call, &error, - G_TYPE_DOUBLE, &progress, G_TYPE_INVALID)) - lose_gerror ("Failed to complete GetAcquiringProgress call", error); - info->get_progress_call = NULL; - - set_proxy_acquisition_progress (state, proxy, progress); -} - -static void -proxy_state_changed_cb (DBusGProxy *proxy, - const char *statename, - gpointer user_data) -{ - MachineInfo *info; - GtkTreeIter iter; - ClientState *state = user_data; - - if (!proxy_to_iter (state->store, proxy, &iter)) - g_assert_not_reached (); - gtk_tree_model_get (state->store, &iter, 0, &info, -1); - - g_print ("Got state change for %p (%s) to %s\n", proxy, info->name ? info->name : "(unknown)", statename); - - g_free (info->state); - info->state = g_strdup (statename); - - if (!strcmp (info->state, "Acquired")) - { - g_print ("Starting GetAcquiringProgress call for %p\n", info->proxy); - if (info->get_progress_call != NULL) - { - dbus_g_proxy_cancel_call (info->proxy, info->get_progress_call); - info->get_progress_call = NULL; - } - info->get_progress_call = - dbus_g_proxy_begin_call (info->proxy, "GetAcquiringProgress", - get_acquiring_progress_cb, - state, NULL, - G_TYPE_INVALID); - } - else - info->progress = 0.0; - - signal_row_change (state, &iter); -} - -static void -add_machine (ClientState *state, - const char *name, - const char *mstate, - const char *path) -{ - MachineInfo *info; - GtkTreeIter iter; - - info = g_new0 (MachineInfo, 1); - info->name = g_strdup (name); - info->state = g_strdup (mstate); - info->progress = 0.0; - - info->proxy = dbus_g_proxy_new_for_name (state->bus, - "com.example.StateServer", - path, - "com.example.StateMachine"); - - if (!info->state) - { - g_print ("Starting GetInfo call for %p\n", info->proxy); - dbus_g_proxy_begin_call (info->proxy, "GetInfo", - get_machine_info_cb, - state, NULL, - G_TYPE_INVALID); - } - - /* Watch for state changes */ - dbus_g_proxy_add_signal (info->proxy, "StateChanged", - G_TYPE_STRING, G_TYPE_INVALID); - - dbus_g_proxy_connect_signal (info->proxy, - "StateChanged", - G_CALLBACK (proxy_state_changed_cb), - state, - NULL); - - dbus_g_proxy_add_signal (info->proxy, "AcquisitionProgress", - G_TYPE_DOUBLE, G_TYPE_INVALID); - - dbus_g_proxy_connect_signal (info->proxy, - "AcquisitionProgress", - G_CALLBACK (proxy_acquisition_changed_cb), - state, - NULL); - - gtk_list_store_prepend (GTK_LIST_STORE (state->store), &iter); - gtk_list_store_set (GTK_LIST_STORE (state->store), &iter, 0, info, -1); - -} - -static void -machine_created_cb (DBusGProxy *proxy, - const char *name, - const char *path, - gpointer data) -{ - ClientState *state = data; - - add_machine (state, name, NULL, path); -} - -static void -server_destroyed_cb (DBusGProxy *proxy, gpointer data) -{ - g_print ("Server terminated!\n"); - GtkWidget *dialog; - - dialog = gtk_message_dialog_new (NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_CLOSE, - "State Machine server has exited"); - - gtk_dialog_run (GTK_DIALOG (dialog)); - - exit (1); -} - -static void -window_destroyed_cb (GtkWidget *window, gpointer data) -{ - gtk_main_quit (); -} - -static void -create_machine_completed_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer data) -{ - GError *error = NULL; - ClientState *state = data; - - if (!dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) - { - /* Ignore NameInUse errors */ - if (dbus_g_error_has_name (error, "com.example.StateServer.NameInUse")) - ; - else - lose_gerror ("Failed to create new state machine", error); - } - g_print ("machine created successfully\n"); - state->pending_creation_calls = g_slist_remove (state->pending_creation_calls, call); -} - -static void -send_create_machine (ClientState *state) -{ - DBusGProxyCall *call; - char *name; - gint n_children; - - n_children = gtk_tree_model_iter_n_children (state->store, NULL); - name = g_strdup_printf ("machine%d", n_children); - - g_print ("Invoking CreateMachine(%s)\n", name); - call = dbus_g_proxy_begin_call (state->server_proxy, "CreateMachine", - create_machine_completed_cb, - state, NULL, - G_TYPE_STRING, name, G_TYPE_INVALID); - g_free (name); - state->pending_creation_calls = g_slist_prepend (state->pending_creation_calls, call); -} - -static void -do_a_state_change (ClientState *state) -{ - gint index; - GtkTreeIter iter; - gint n_children; - MachineInfo *info; - - n_children = gtk_tree_model_iter_n_children (state->store, NULL); - if (n_children == 0) - { - g_print ("No machines yet, not doing a state switch\n"); - return; - } - - index = g_random_int_range (0, n_children); - gtk_tree_model_iter_nth_child (state->store, &iter, NULL, index); - gtk_tree_model_get (state->store, &iter, 0, &info, -1); - - if (!info->state) - { - g_print ("Machine not yet in known state, skipping state switch\n"); - return; - } - - if (!strcmp (info->state, "Shutdown")) - { - g_print ("Sending Start request to machine %s\n", info->name); - dbus_g_proxy_call_no_reply (info->proxy, "Start", G_TYPE_INVALID); - } - else if (!strcmp (info->state, "Loading")) - { - - g_print ("Sending Reacquire request to machine %s\n", info->name); - dbus_g_proxy_call_no_reply (info->proxy, "Reacquire", G_TYPE_INVALID); - } - else - { - g_print ("Sending Shutdown request to machine %s\n", info->name); - dbus_g_proxy_call_no_reply (info->proxy, "Shutdown", G_TYPE_INVALID); - } -} - -static gboolean -do_something_random_2 (gpointer data) -{ - ClientState *state = data; - do_a_state_change (state); - g_timeout_add (g_random_int_range (2000, 5000), do_something_random_2, state); - return FALSE; -} - -static gboolean -do_something_random (gpointer data) -{ - ClientState *state = data; - gint n_children; - - switch (g_random_int_range (0, 3)) - { - case 0: - send_create_machine (state); - break; - case 1: - case 2: - do_a_state_change (state); - break; - default: - g_assert_not_reached (); - } - - n_children = gtk_tree_model_iter_n_children (state->store, NULL); - if (n_children >= 5) - { - g_print ("MAX children reached, switching to state changes only\n"); - g_timeout_add (g_random_int_range (500, 3000), do_something_random_2, state); - } - else - g_timeout_add (g_random_int_range (500, 3000), do_something_random, state); - return FALSE; -} - -static void -set_cell_name (GtkTreeViewColumn *tree_column, - GtkCellRenderer *cell, - GtkTreeModel *tree_model, - GtkTreeIter *iter, - gpointer data) -{ - MachineInfo *info; - - gtk_tree_model_get (tree_model, iter, 0, &info, -1); - - g_object_set (cell, "text", info->name ? info->name : "", NULL); -} - -static gint -sort_by_name (GtkTreeModel *model, - GtkTreeIter *a, - GtkTreeIter *b, - gpointer user_data) -{ - MachineInfo *info_a, *info_b; - - gtk_tree_model_get (model, a, 0, &info_a, -1); - gtk_tree_model_get (model, b, 0, &info_b, -1); - - return strcmp (info_a->name ? info_a->name : "", - info_b ? info_b->name : ""); -} - -static void -set_cell_state (GtkTreeViewColumn *tree_column, - GtkCellRenderer *cell, - GtkTreeModel *tree_model, - GtkTreeIter *iter, - gpointer data) -{ - MachineInfo *info; - - gtk_tree_model_get (tree_model, iter, 0, &info, -1); - - g_object_set (cell, "text", info->state ? info->state : "", NULL); -} - -static gint -sort_by_state (GtkTreeModel *model, - GtkTreeIter *a, - GtkTreeIter *b, - gpointer user_data) -{ - MachineInfo *info_a, *info_b; - - gtk_tree_model_get (model, a, 0, &info_a, -1); - gtk_tree_model_get (model, b, 0, &info_b, -1); - - return strcmp (info_a->state ? info_a->state : "", - info_b ? info_b->state : ""); -} - -static void -set_cell_progress (GtkTreeViewColumn *tree_column, - GtkCellRenderer *cell, - GtkTreeModel *tree_model, - GtkTreeIter *iter, - gpointer data) -{ - MachineInfo *info; - - gtk_tree_model_get (tree_model, iter, 0, &info, -1); - - g_object_set (cell, "value", (int) (info->progress * 100), NULL); -} - -static gint -sort_by_progress (GtkTreeModel *model, - GtkTreeIter *a, - GtkTreeIter *b, - gpointer user_data) -{ - MachineInfo *info_a, *info_b; - - gtk_tree_model_get (model, a, 0, &info_a, -1); - gtk_tree_model_get (model, b, 0, &info_b, -1); - - return info_a->progress > info_b->progress ? 1 : -1; -} - -static void -get_machines_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer data) -{ - GError *error = NULL; - ClientState *state = data; - GPtrArray *objs; - guint i; - GtkWidget *scrolledwin; - GtkTreeViewColumn *col; - GtkCellRenderer *rend; - - g_assert (call == state->get_machines_call); - - if (!dbus_g_proxy_end_call (proxy, call, &error, - dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), - &objs, - G_TYPE_INVALID)) - lose_gerror ("Failed to get current machine list", error); - - gtk_container_remove (GTK_CONTAINER (state->window), - gtk_bin_get_child (GTK_BIN (state->window))); - - scrolledwin = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (scrolledwin); - - state->store = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_POINTER)); - state->view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (state->store)); - gtk_widget_show (state->view); - gtk_container_add (GTK_CONTAINER (scrolledwin), state->view); - gtk_container_add (GTK_CONTAINER (state->window), scrolledwin); - - rend = gtk_cell_renderer_text_new (); - col = gtk_tree_view_column_new_with_attributes (_("Name"), - rend, - NULL); - gtk_tree_view_column_set_cell_data_func (col, rend, set_cell_name, NULL, NULL); - gtk_tree_view_column_set_resizable (col, TRUE); - gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (state->store), - 0, sort_by_name, NULL, NULL); - gtk_tree_view_column_set_sort_column_id (col, 0); - gtk_tree_view_append_column (GTK_TREE_VIEW (state->view), col); - - rend = gtk_cell_renderer_text_new (); - col = gtk_tree_view_column_new_with_attributes (_("State"), - rend, - NULL); - gtk_tree_view_column_set_cell_data_func (col, rend, set_cell_state, NULL, NULL); - gtk_tree_view_column_set_resizable (col, TRUE); - gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (state->store), - 0, sort_by_state, NULL, NULL); - gtk_tree_view_column_set_sort_column_id (col, 0); - gtk_tree_view_append_column (GTK_TREE_VIEW (state->view), col); - - rend = gtk_cell_renderer_progress_new (); - col = gtk_tree_view_column_new_with_attributes (_("Progress"), - rend, - NULL); - gtk_tree_view_column_set_cell_data_func (col, rend, set_cell_progress, NULL, NULL); - gtk_tree_view_column_set_resizable (col, TRUE); - gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (state->store), - 0, sort_by_progress, NULL, NULL); - gtk_tree_view_column_set_sort_column_id (col, 0); - gtk_tree_view_append_column (GTK_TREE_VIEW (state->view), col); - - for (i = 0; i < objs->len; i++) - { - add_machine (state, NULL, NULL, g_ptr_array_index (objs, i)); - g_free (g_ptr_array_index (objs, i)); - } - g_ptr_array_free (objs, TRUE); - - g_idle_add (do_something_random, state); -} - -int -main (int argc, char **argv) -{ - DBusGConnection *bus; - DBusGProxy *server; - GError *error = NULL; - ClientState state; - GtkWidget *label; - - gtk_init (&argc, &argv); - - g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL); - - state.window = GTK_WINDOW (gtk_window_new (GTK_WINDOW_TOPLEVEL)); - gtk_window_set_resizable (GTK_WINDOW (state.window), TRUE); - g_signal_connect (G_OBJECT (state.window), "destroy", - G_CALLBACK (window_destroyed_cb), - &state); - gtk_window_set_title (GTK_WINDOW (state.window), _("D-BUS State Machine Demo")); - gtk_window_set_default_size (GTK_WINDOW (state.window), 320, 240); - - label = gtk_label_new (""); - gtk_label_set_markup (GTK_LABEL (label), "<b>Loading...</b>"); - gtk_widget_show (label); - - gtk_container_add (GTK_CONTAINER (state.window), label); - - bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (!bus) - lose_gerror ("Couldn't connect to session bus", error); - - state.bus = bus; - - server = dbus_g_proxy_new_for_name_owner (bus, - "com.example.StateServer", - "/com/example/StateServer", - "com.example.StateMachineServer", - &error); - if (!server) - lose_gerror ("Couldn't find \"com.example.StateServer\"", error); - - state.server_proxy = server; - - g_signal_connect (server, "destroy", - G_CALLBACK (server_destroyed_cb), - &state); - - dbus_g_object_register_marshaller (sm_marshal_VOID__STRING_BOXED, - G_TYPE_NONE, G_TYPE_STRING, - DBUS_TYPE_G_OBJECT_PATH); - - dbus_g_proxy_add_signal (server, "MachineCreated", G_TYPE_STRING, DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID); - - dbus_g_proxy_connect_signal (server, "MachineCreated", - G_CALLBACK (machine_created_cb), - &state, NULL); - - state.get_machines_call = dbus_g_proxy_begin_call (server, "GetMachines", - get_machines_cb, &state, NULL, - G_TYPE_INVALID); - - gtk_widget_show (GTK_WIDGET (state.window)); - - gtk_main (); - - g_object_unref (G_OBJECT (server)); - - exit(0); -} diff --git a/glib/examples/statemachine/statemachine-server.c b/glib/examples/statemachine/statemachine-server.c deleted file mode 100644 index cc9ca4bd..00000000 --- a/glib/examples/statemachine/statemachine-server.c +++ /dev/null @@ -1,229 +0,0 @@ -#include <dbus/dbus-glib.h> -#include <stdio.h> -#include <stdlib.h> - -#include "statemachine.h" -#include "sm-marshal.h" -#include "statemachine-server.h" - -enum -{ - PROP_O, - PROP_BUS -}; - -enum -{ - MACHINE_CREATED, - LAST_SIGNAL -}; - -static guint sm_server_signals[LAST_SIGNAL] = { 0 }; - -static void sm_server_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void sm_server_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -G_DEFINE_TYPE(SMServer, sm_server, G_TYPE_OBJECT) - -#include "statemachine-server-glue.h" -#include "statemachine-glue.h" - -static void -sm_server_init (SMServer *obj) -{ - obj->machines = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); -} - -static void -sm_server_class_init (SMServerClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->set_property = sm_server_set_property; - object_class->get_property = sm_server_get_property; - - g_object_class_install_property (object_class, - PROP_BUS, - g_param_spec_boxed ("bus", - "bus", - "bus", - DBUS_TYPE_G_CONNECTION, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - sm_server_signals[MACHINE_CREATED] = - g_signal_new ("machine-created", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, - 0, - NULL, NULL, - sm_marshal_VOID__STRING_BOXED, - G_TYPE_NONE, 2, G_TYPE_STRING, DBUS_TYPE_G_OBJECT_PATH); -} - -static void -sm_server_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - SMServer *server = SM_SERVER (object); - - switch (prop_id) - { - case PROP_BUS: - server->bus = g_value_get_boxed (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -sm_server_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - SMServer *server = SM_SERVER (object); - - switch (prop_id) - { - case PROP_BUS: - g_value_set_boxed (value, server->bus); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -machine_state_changed_cb (SMObject *obj, const char *state, gpointer data) -{ - char *name; - - g_object_get (obj, "name", &name, NULL); - g_print ("Machine %s switching to state %s\n", name, state); - g_free (name); -} - -static void -machine_acquisition_changed_cb (SMObject *obj, gdouble progress, gpointer data) -{ - char *name; - - g_object_get (obj, "name", &name, NULL); - g_print ("Machine %s got progress %f\n", name, progress); - g_free (name); -} - -gboolean -sm_server_create_machine (SMServer *server, const char *name, GError **error) -{ - SMObject *machine; - char *path; - - machine = g_hash_table_lookup (server->machines, name); - if (machine != NULL) - { - g_set_error (error, - SM_ERROR, - SM_ERROR_NAME_IN_USE, - "Statemachine name \"%s\" is already in use", - name); - return FALSE; - } - - machine = g_object_new (SM_TYPE_OBJECT, "name", name, NULL); - - path = g_strdup_printf ("/com/example/StateMachines/%s", name); - dbus_g_connection_register_g_object (server->bus, path, G_OBJECT (machine)); - - g_hash_table_insert (server->machines, g_strdup (name), machine); - - g_print ("Created state machine with name %s at %s\n", name, path); - - g_signal_connect_object (machine, "state-changed", - G_CALLBACK (machine_state_changed_cb), - NULL, 0); - g_signal_connect_object (machine, "acquisition-progress", - G_CALLBACK (machine_acquisition_changed_cb), - NULL, 0); - - g_signal_emit (server, sm_server_signals[MACHINE_CREATED], 0, name, path); - - return TRUE; -} - -static void -add_machine_to_ptr_array (gpointer key, gpointer val, gpointer data) -{ - const char *name = key; - /* SMObject *sm = val; */ - GPtrArray *ptrarray = data; - - g_ptr_array_add (ptrarray, g_strdup_printf ("/com/example/StateMachines/%s", - name)); -} - -gboolean -sm_server_get_machines (SMServer *server, GPtrArray **machines, GError **error) -{ - *machines = g_ptr_array_new (); - - g_hash_table_foreach (server->machines, add_machine_to_ptr_array, *machines); - - return TRUE; -} - -int -main (int argc, char **argv) -{ - DBusGConnection *bus; - DBusGProxy *bus_proxy; - GError *error = NULL; - SMServer *server; - GMainLoop *mainloop; - guint request_name_result; - - g_type_init (); - - dbus_g_object_type_install_info (SM_TYPE_SERVER, &dbus_glib_sm_server_object_info); - dbus_g_object_type_install_info (SM_TYPE_OBJECT, &dbus_glib_sm_object_object_info); - dbus_g_error_domain_register (SM_ERROR, NULL, SM_TYPE_ERROR); - - mainloop = g_main_loop_new (NULL, FALSE); - - bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (!bus) - g_critical ("Couldn't connect to session bus: %s\n", error->message); - - bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus", - "/org/freedesktop/DBus", - "org.freedesktop.DBus"); - - if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error, - G_TYPE_STRING, "com.example.StateServer", - G_TYPE_UINT, 0, - G_TYPE_INVALID, - G_TYPE_UINT, &request_name_result, - G_TYPE_INVALID)) - g_critical ("Couldn't acquire com.example.StateServer: %s\n", error->message); - - server = g_object_new (SM_TYPE_SERVER, "bus", bus, NULL); - - dbus_g_connection_register_g_object (bus, "/com/example/StateServer", G_OBJECT (server)); - - g_print ("StateMachine server initialized\n"); - - g_main_loop_run (mainloop); - - exit (0); -} diff --git a/glib/examples/statemachine/statemachine-server.h b/glib/examples/statemachine/statemachine-server.h deleted file mode 100644 index 360be3a6..00000000 --- a/glib/examples/statemachine/statemachine-server.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _SM_SERVER_H -#define _SM_SERVER_H - -#include "statemachine.h" -#include <dbus/dbus-glib.h> - -typedef struct SMServer SMServer; -typedef struct SMServerClass SMServerClass; - -struct SMServer -{ - GObject parent; - - /* Private */ - DBusGConnection *bus; - GHashTable *machines; -}; - -struct SMServerClass -{ - GObjectClass parent; -}; - -#define SM_TYPE_SERVER (sm_server_get_type ()) -#define SM_SERVER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SM_TYPE_SERVER, SMServer)) -#define SM_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SM_TYPE_SERVER, SMServerClass)) -#define SM_IS_SERVER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SM_TYPE_SERVER)) -#define SM_IS_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SM_TYPE_SERVER)) -#define SM_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SM_TYPE_SERVER, SMServerClass)) - -GType sm_server_get_type (void); - -gboolean sm_server_create_machine (SMServer *server, const char *name, GError **error); - -gboolean sm_server_get_machines (SMServer *server, GPtrArray **machines, GError **error); - -#endif diff --git a/glib/examples/statemachine/statemachine-server.xml b/glib/examples/statemachine/statemachine-server.xml deleted file mode 100644 index fe9caaf7..00000000 --- a/glib/examples/statemachine/statemachine-server.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<node name="/"> - <interface name="com.example.StateMachineServer"> - <method name="CreateMachine"> - <arg type="s" name="name" direction="in"/> - </method> - - <method name="GetMachines"> - <arg type="ao" direction="out"/> - </method> - <signal name="MachineCreated"/> - </interface> -</node> diff --git a/glib/examples/statemachine/statemachine.c b/glib/examples/statemachine/statemachine.c deleted file mode 100644 index c94e2945..00000000 --- a/glib/examples/statemachine/statemachine.c +++ /dev/null @@ -1,353 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include "statemachine.h" - -static void clear_pending_tasks (SMObject *object); -static void state_change (SMObject *object, SMObjectState new_state); -static void sm_object_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void sm_object_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -enum -{ - PROP_0, - PROP_NAME, -}; - -enum -{ - STATE_CHANGED, - ACQUISITION_FAILED, - ACQUISITION_PROGRESS, - LAST_SIGNAL -}; - -static guint sm_object_signals[LAST_SIGNAL] = { 0 }; - -G_DEFINE_TYPE(SMObject, sm_object, G_TYPE_OBJECT) - -static void -sm_object_init (SMObject *obj) -{ - obj->state = SM_OBJECT_STATE_SHUTDOWN; -} - -static void -sm_object_class_init (SMObjectClass *klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - - object_class->set_property = sm_object_set_property; - object_class->get_property = sm_object_get_property; - - g_object_class_install_property (object_class, - PROP_NAME, - g_param_spec_string ("name", - "name", - "name", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - sm_object_signals[STATE_CHANGED] = - g_signal_new ("state-changed", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, 1, G_TYPE_STRING); - sm_object_signals[ACQUISITION_PROGRESS] = - g_signal_new ("acquisition-progress", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__DOUBLE, - G_TYPE_NONE, 1, G_TYPE_DOUBLE); - sm_object_signals[ACQUISITION_FAILED] = - g_signal_new ("acquisition-failed", - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); -} - -/* This should really be standard. */ -#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC } - -GQuark -sm_error_quark (void) -{ - static GQuark ret = 0; - if (!ret) - ret = g_quark_from_static_string ("SMObjectErrorQuark"); - return ret; -} - -GType -sm_object_state_get_type (void) -{ - static GType etype = 0; - - if (etype == 0) - { - static const GEnumValue values[] = - { - - ENUM_ENTRY (SM_OBJECT_STATE_SHUTDOWN, "Shutdown"), - ENUM_ENTRY (SM_OBJECT_STATE_INITIALIZED, "Loading"), - ENUM_ENTRY (SM_OBJECT_STATE_ACQUIRED, "Acquired"), - ENUM_ENTRY (SM_OBJECT_STATE_OPERATING, "Operating"), - { 0, 0, 0 } - }; - - etype = g_enum_register_static ("SMObjectState", values); - } - - return etype; -} - -GType -sm_error_get_type (void) -{ - static GType etype = 0; - - if (etype == 0) - { - static const GEnumValue values[] = - { - - ENUM_ENTRY (SM_ERROR_INVALID_STATE, "InvalidState"), - ENUM_ENTRY (SM_ERROR_NAME_IN_USE, "NameInUse"), - { 0, 0, 0 } - }; - - g_assert (SM_NUM_ERRORS == G_N_ELEMENTS (values) - 1); - - etype = g_enum_register_static ("SMError", values); - } - - return etype; -} - -static void -sm_object_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - SMObject *sm = SM_OBJECT (object); - - switch (prop_id) - { - case PROP_NAME: - sm->name = g_strdup (g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -sm_object_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - SMObject *sm= SM_OBJECT (object); - - switch (prop_id) - { - case PROP_NAME: - g_value_set_string (value, sm->name); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static const char * -state_to_string (SMObjectState state) -{ - GEnumValue *value; - GEnumClass *prop_class; - const char *ret; - - prop_class = g_type_class_ref (SM_TYPE_OBJECT_STATE); - value = g_enum_get_value (prop_class, state); - ret = value->value_nick; - - g_type_class_unref (prop_class); - return ret; -} - -static void -queue_task (SMObject *object, guint delay, GSourceFunc func) -{ - guint id; - id = g_timeout_add (delay, func, object); - object->pending_tasks = g_slist_prepend (object->pending_tasks, GUINT_TO_POINTER (id)); -} - -static gboolean -idle_state_change (gpointer data) -{ - SMObject *object = data; - - g_print ("doing idle state change for %s to %s\n", - object->name, state_to_string (object->requested_state)); - state_change (object, object->requested_state); - return FALSE; -} - -static gboolean -idle_further_acquire (gpointer data) -{ - SMObject *object = data; - - g_print ("doing idle acquisition for machine %s\n", object->name); - object->acquisition_progress += g_random_double_range (0.20, 0.7); - if (object->acquisition_progress > 1.0) - { - object->acquisition_progress = 1.0; - return FALSE; - } - else - { - g_signal_emit (object, sm_object_signals[ACQUISITION_PROGRESS], 0, object->acquisition_progress); - return TRUE; - } -} - -static void -clear_pending_tasks (SMObject *object) -{ - GSList *tmp; - for (tmp = object->pending_tasks; tmp; tmp = tmp->next) - g_source_remove (GPOINTER_TO_UINT (tmp->data)); - g_slist_free (object->pending_tasks); - object->pending_tasks = NULL; -} - -static void -state_change (SMObject *object, SMObjectState new_state) -{ - g_signal_emit (object, sm_object_signals[STATE_CHANGED], 0, - state_to_string (new_state)); - - clear_pending_tasks (object); - - if (new_state == SM_OBJECT_STATE_ACQUIRED) - { - object->acquisition_progress = 0.0; - queue_task (object, 1000, idle_further_acquire); - } - else if (new_state == SM_OBJECT_STATE_INITIALIZED) - { - if (g_random_int_range (0, 2) == 0) - { - object->requested_state = SM_OBJECT_STATE_ACQUIRED; - queue_task (object, 3000, idle_state_change); - } - } - - object->state = new_state; -} - -gboolean -sm_object_get_info (SMObject *object, char **name, char **state, GError **error) -{ - *name= g_strdup (object->name); - *state = g_strdup (state_to_string (object->state)); - return TRUE; -} - -gboolean -sm_object_start (SMObject *object, GError **error) -{ - if (object->state != SM_OBJECT_STATE_SHUTDOWN) - { - g_set_error (error, - SM_ERROR, - SM_ERROR_INVALID_STATE, - "%s", - "Can't start from non-shutdown state"); - return FALSE; - } - state_change (object, SM_OBJECT_STATE_INITIALIZED); - return TRUE; -} - -gboolean -sm_object_shutdown (SMObject *object, GError **error) -{ - if (object->state == SM_OBJECT_STATE_SHUTDOWN) - { - g_set_error (error, - SM_ERROR, - SM_ERROR_INVALID_STATE, - "%s", - "Can't shutdown from shutdown state"); - return FALSE; - } - state_change (object, SM_OBJECT_STATE_SHUTDOWN); - return TRUE; -} - -gboolean -sm_object_reinitialize (SMObject *object, GError **error) -{ - if (object->state != SM_OBJECT_STATE_ACQUIRED - && object->state != SM_OBJECT_STATE_OPERATING) - { - g_set_error (error, - SM_ERROR, - SM_ERROR_INVALID_STATE, - "Can't reinitialize from state %d", - object->state); - return FALSE; - } - state_change (object, SM_OBJECT_STATE_INITIALIZED); - return TRUE; -} - -gboolean -sm_object_reacquire (SMObject *object, GError **error) -{ - if (object->state == SM_OBJECT_STATE_ACQUIRED) - { - g_set_error (error, - SM_ERROR, - SM_ERROR_INVALID_STATE, - "Can't reacquire from state %d", - object->state); - return FALSE; - } - state_change (object, SM_OBJECT_STATE_ACQUIRED); - return TRUE; -} - -gboolean -sm_object_get_acquiring_progress (SMObject *object, gdouble *out, GError **error) -{ - if (object->state != SM_OBJECT_STATE_ACQUIRED) - { - g_set_error (error, - SM_ERROR, - SM_ERROR_INVALID_STATE, - "Can't get progress from state %d", - object->state); - return FALSE; - } - *out = object->acquisition_progress; - return TRUE; -} diff --git a/glib/examples/statemachine/statemachine.h b/glib/examples/statemachine/statemachine.h deleted file mode 100644 index ac6047bd..00000000 --- a/glib/examples/statemachine/statemachine.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef _SM_OBJECT_H -#define _SM_OBJECT_H - -#include <glib.h> -#include <glib-object.h> - -GQuark sm_error_quark (void); - -#define SM_ERROR (sm_error_quark ()) - -typedef enum -{ - SM_ERROR_INVALID_STATE = 0, - SM_ERROR_NAME_IN_USE, - SM_NUM_ERRORS -} SMError; - -GType sm_error_get_type (void); -#define SM_TYPE_ERROR (sm_error_get_type ()) - -typedef enum -{ - SM_OBJECT_STATE_SHUTDOWN = 0, - SM_OBJECT_STATE_INITIALIZED, - SM_OBJECT_STATE_ACQUIRED, - SM_OBJECT_STATE_OPERATING, - SM_OBJECT_NUM_STATES -} SMObjectState; - -GType sm_object_state_get_type (void); - -#define SM_TYPE_OBJECT_STATE (sm_object_state_get_type ()) - -typedef struct SMObject SMObject; -typedef struct SMObjectClass SMObjectClass; - -struct SMObject -{ - GObject parent; - - /* Private */ - char *name; - SMObjectState state; - double acquisition_progress; - - GSList /* guint */ *pending_tasks; - - SMObjectState requested_state; -}; - -struct SMObjectClass -{ - GObjectClass parent; -}; - -#define SM_TYPE_OBJECT (sm_object_get_type ()) -#define SM_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SM_TYPE_OBJECT, SMObject)) -#define SM_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SM_TYPE_OBJECT, SMObjectClass)) -#define SM_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SM_TYPE_OBJECT)) -#define SM_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SM_TYPE_OBJECT)) -#define SM_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SM_TYPE_OBJECT, SMObjectClass)) - -GType sm_object_get_type (void); - -gboolean sm_object_get_info (SMObject *object, char **name, char **state, GError **error); - -gboolean sm_object_start (SMObject *object, GError **error); - -gboolean sm_object_shutdown (SMObject *object, GError **error); - -gboolean sm_object_reinitialize (SMObject *object, GError **error); - -gboolean sm_object_reacquire (SMObject *object, GError **error); - -gboolean sm_object_get_acquiring_progress (SMObject *object, gdouble *out, GError **error); - -#endif diff --git a/glib/examples/statemachine/statemachine.xml b/glib/examples/statemachine/statemachine.xml deleted file mode 100644 index c375ef1b..00000000 --- a/glib/examples/statemachine/statemachine.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<node name="/"> - <interface name="com.example.StateMachine"> - - <method name="GetInfo"> - <arg type="s" name="name" direction="out"/> - <arg type="s" name="state" direction="out"/> - </method> - - <method name="Start"> - </method> - - <method name="Shutdown"> - </method> - - <method name="Reinitialize"> - </method> - - <method name="Reacquire"> - </method> - - <method name="GetAcquiringProgress"> - <arg type="d" direction="out"/> - </method> - - <!-- Mark the signals as exported --> - <signal name="StateChanged"/> - <signal name="AcquisitionFailed"/> - <signal name="AcquisitionProgress"/> - - </interface> -</node> |