From 1799e141b7af475965b5e5d7f2d20b821f6e7090 Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Fri, 19 Oct 2012 18:24:36 +0000 Subject: [PATCH] edbus: Add example for emitting signal SVN revision: 78263 --- legacy/edbus/.gitignore | 1 + legacy/edbus/Makefile.am | 7 +- .../edbus/src/examples/simple-signal-emit.c | 79 +++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 legacy/edbus/src/examples/simple-signal-emit.c diff --git a/legacy/edbus/.gitignore b/legacy/edbus/.gitignore index 36c80c7c26..5d3da969c5 100644 --- a/legacy/edbus/.gitignore +++ b/legacy/edbus/.gitignore @@ -36,6 +36,7 @@ src/examples/banshee src/examples/complex_types src/examples/complex_types_server src/examples/server +src/examples/simple-signal-emit src/examples/client doc/Doxyfile doc/html/ diff --git a/legacy/edbus/Makefile.am b/legacy/edbus/Makefile.am index d125bd8b28..d22d988f8e 100644 --- a/legacy/edbus/Makefile.am +++ b/legacy/edbus/Makefile.am @@ -88,7 +88,8 @@ noinst_PROGRAMS = \ src/examples/complex_types \ src/examples/complex_types_server \ src/examples/server \ - src/examples/client + src/examples/client \ + src/examples/simple-signal-emit EXAMPLES_LIBS = libedbus2.la @ECORE_LIBS@ @@ -113,6 +114,10 @@ src_examples_server_LDADD = $(EXAMPLES_LIBS) src_examples_client_SOURCES = src/examples/client.c src_examples_client_LDADD = $(EXAMPLES_LIBS) + +src_examples_simple_signal_emit_SOURCES = src/examples/simple-signal-emit.c +src_examples_simple_signal_emit_LDADD = $(EXAMPLES_LIBS) + endif .PHONY: doc diff --git a/legacy/edbus/src/examples/simple-signal-emit.c b/legacy/edbus/src/examples/simple-signal-emit.c new file mode 100644 index 0000000000..a9574d3d29 --- /dev/null +++ b/legacy/edbus/src/examples/simple-signal-emit.c @@ -0,0 +1,79 @@ +#include + +enum { + TEST_SIGNAL_ALIVE, + TEST_SIGNAL_PROP, + TEST_SIGNAL_NAME, +}; + +static const EDBus_Signal test_signals[] = { + [TEST_SIGNAL_ALIVE] = { "Alive" }, + [TEST_SIGNAL_PROP] = { "Properties", EDBUS_ARGS({ "a{ss}", "properties"}) }, + [TEST_SIGNAL_NAME] = { "Name", EDBUS_ARGS({ "s", "name"}) }, + { } +}; + +/* signal with complex arguments (a dict) */ +static void emit_properties(EDBus_Service_Interface *iface) +{ + EDBus_Message *alive2; + EDBus_Message_Iter *iter, *dict; + struct keyval { + const char *key; + const char *val; + } keyval[] = { + { "key1", "val1" }, + { "key2", "val2" }, + { } + }; + struct keyval *k; + + alive2 = edbus_service_signal_new(iface, TEST_SIGNAL_PROP); + iter = edbus_message_iter_get(alive2); + dict = edbus_message_iter_container_new(iter, 'a', "{ss}"); + + for (k = keyval; k && k->key; k++) + { + EDBus_Message_Iter *entry = edbus_message_iter_container_new(dict, 'e', + NULL); + edbus_message_iter_arguments_set(entry, "ss", k->key, k->val); + edbus_message_iter_container_close(dict, entry); + } + + edbus_message_iter_container_close(iter, dict); + edbus_service_signal_send(iface, alive2); +} + +/* signal with basic args */ +static void emit_name(EDBus_Service_Interface *iface) +{ + edbus_service_signal_emit(iface, TEST_SIGNAL_NAME, "TEST"); +} + +/* simple signal example */ +static void emit_alive(EDBus_Service_Interface *iface) +{ + edbus_service_signal_emit(iface, TEST_SIGNAL_ALIVE); +} + +int main(void) +{ + EDBus_Connection *conn; + EDBus_Service_Interface *iface; + + edbus_init(); + + conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION); + iface = edbus_service_interface_register( + conn, "/org/enlightenment", "org.enlightenment.Test", NULL, test_signals); + + emit_alive(iface); + emit_name(iface); + emit_properties(iface); + + edbus_connection_unref(conn); + + edbus_shutdown(); + + return 0; +}