From acc230eb98c48086750d9548bbc938674d31092b Mon Sep 17 00:00:00 2001 From: pd Date: Sat, 16 Aug 2008 16:29:31 +0200 Subject: [PATCH] =?UTF-8?q?Added=20properties=20proxy=20example=20(Jo?= =?UTF-8?q?=C3=A3o=20Xavier)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/properties_get_set/Makefile.am | 26 +++++++ .../properties_get_set/propsgs-client.cpp | 75 +++++++++++++++++++ examples/properties_get_set/propsgs-client.h | 20 +++++ .../properties_get_set/propsgs-introspect.xml | 11 +++ .../properties_get_set/propsgs-server.cpp | 46 ++++++++++++ examples/properties_get_set/propsgs-server.h | 21 ++++++ 6 files changed, 199 insertions(+) create mode 100644 examples/properties_get_set/Makefile.am create mode 100644 examples/properties_get_set/propsgs-client.cpp create mode 100644 examples/properties_get_set/propsgs-client.h create mode 100644 examples/properties_get_set/propsgs-introspect.xml create mode 100644 examples/properties_get_set/propsgs-server.cpp create mode 100644 examples/properties_get_set/propsgs-server.h diff --git a/examples/properties_get_set/Makefile.am b/examples/properties_get_set/Makefile.am new file mode 100644 index 0000000..6e5419d --- /dev/null +++ b/examples/properties_get_set/Makefile.am @@ -0,0 +1,26 @@ +EXTRA_DIST = propsget-introspect.xml + +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include + +noinst_PROGRAMS = propsgs-server propsgs-client + +propsgs_server_SOURCES = propsgs-glue.h propsgs-server.h propsgs-server.cpp +propsgs_server_LDADD = $(top_builddir)/src/libdbus-c++-1.la + +propsgs_client_SOURCES = propsgs-glue.h propsgs-client.h propsgs-client.cpp +propsgs_client_LDADD = $(top_builddir)/src/libdbus-c++-1.la -lpthread + +propsgs-glue-adaptor.h: propsgs-introspect.xml + $(top_builddir)/tools/dbusxx-xml2cpp $^ --adaptor=$@ -- + +propsgs-glue-proxy.h: propsgs-introspect.xml + $(top_builddir)/tools/dbusxx-xml2cpp $^ --proxy=$@ -- + +BUILT_SOURCES = propsgs-glue-adaptor.h propsgs-glue-proxy.h +CLEANFILES = $(BUILT_SOURCES) + +dist-hook: + cd $(distdir); rm -f $(BUILT_SOURCES) + +MAINTAINERCLEANFILES = \ + Makefile.in diff --git a/examples/properties_get_set/propsgs-client.cpp b/examples/properties_get_set/propsgs-client.cpp new file mode 100644 index 0000000..b47ad39 --- /dev/null +++ b/examples/properties_get_set/propsgs-client.cpp @@ -0,0 +1,75 @@ +#include "propsgs-client.h" +#include +#include + +using namespace org::freedesktop::DBus; + +#define P(x) std::cout << #x << " = " << x << std::endl; + +static const char *PROPS_SERVER_NAME = "org.freedesktop.DBus.Examples.Properties"; +static const char *PROPS_SERVER_PATH = "/org/freedesktop/DBus/Examples/Properties"; + +PropsClient::PropsClient(DBus::Connection &connection, const char *path, const char *name) +: DBus::ObjectProxy(connection, path, name) +{ +} + +void PropsClient::MessageChanged(const std::string& message){ + std::cout << "message received: " << message << std::endl; +}; + +DBus::BusDispatcher dispatcher; + +PropsClient * client; + +void niam(int sig) +{ + dispatcher.leave(); + pthread_exit(NULL); + delete client; +} + +#include + +void * test_property_proxy(void * input){ + P("1"); + sleep(2); + P(client->Version()); + + P("2"); + sleep(1); + P(client->Message()); + + P("3"); + sleep(1); + client->Message( "message set by property access" ); + + P("4"); + sleep(1); + P(client->Message()); + + P("5"); + sleep(1); + client->Data( 1.1 ); +} + +int main() +{ + signal(SIGTERM, niam); + signal(SIGINT, niam); + + DBus::default_dispatcher = &dispatcher; + + DBus::Connection conn = DBus::Connection::SessionBus(); + + client = new PropsClient(conn, PROPS_SERVER_PATH, PROPS_SERVER_NAME ); + + pthread_t thread; + pthread_create(&thread, NULL, test_property_proxy, 0); + + P("dispatcher.enter();"); + + dispatcher.enter(); + + return 0; +} diff --git a/examples/properties_get_set/propsgs-client.h b/examples/properties_get_set/propsgs-client.h new file mode 100644 index 0000000..85595d5 --- /dev/null +++ b/examples/properties_get_set/propsgs-client.h @@ -0,0 +1,20 @@ +#ifndef __DEMO_PROPS_SERVER_H +#define __DEMO_PROPS_SERVER_H + +#include +#include "propsgs-glue-proxy.h" + +class PropsClient +: public org::freedesktop::DBus::PropsGSDemo_proxy, + public DBus::IntrospectableProxy, +// public DBus::PropertiesProxy, + public DBus::ObjectProxy +{ +public: + + PropsClient(DBus::Connection &connection, const char *path, const char *name); + + void MessageChanged(const std::string& message); +}; + +#endif//__DEMO_PROPS_SERVER_H diff --git a/examples/properties_get_set/propsgs-introspect.xml b/examples/properties_get_set/propsgs-introspect.xml new file mode 100644 index 0000000..5c0e74f --- /dev/null +++ b/examples/properties_get_set/propsgs-introspect.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/properties_get_set/propsgs-server.cpp b/examples/properties_get_set/propsgs-server.cpp new file mode 100644 index 0000000..8339d20 --- /dev/null +++ b/examples/properties_get_set/propsgs-server.cpp @@ -0,0 +1,46 @@ +#include "propsgs-server.h" +#include + +static const char *PROPS_SERVER_NAME = "org.freedesktop.DBus.Examples.Properties"; +static const char *PROPS_SERVER_PATH = "/org/freedesktop/DBus/Examples/Properties"; + +PropsServer::PropsServer(DBus::Connection &connection) +: DBus::ObjectAdaptor(connection, PROPS_SERVER_PATH) +{ + Version = 1; + Message = "default message"; +} + +void PropsServer::on_set_property + (DBus::InterfaceAdaptor &interface, const std::string &property, const DBus::Variant &value) +{ + if (property == "Message") + { + std::string msg = value; + this->MessageChanged(msg); + } +} + +DBus::BusDispatcher dispatcher; + +void niam(int sig) +{ + dispatcher.leave(); +} + +int main() +{ + signal(SIGTERM, niam); + signal(SIGINT, niam); + + DBus::default_dispatcher = &dispatcher; + + DBus::Connection conn = DBus::Connection::SessionBus(); + conn.request_name(PROPS_SERVER_NAME); + + PropsServer server(conn); + + dispatcher.enter(); + + return 0; +} diff --git a/examples/properties_get_set/propsgs-server.h b/examples/properties_get_set/propsgs-server.h new file mode 100644 index 0000000..a3169d6 --- /dev/null +++ b/examples/properties_get_set/propsgs-server.h @@ -0,0 +1,21 @@ +#ifndef __DEMO_PROPS_SERVER_H +#define __DEMO_PROPS_SERVER_H + +#include +#include "propsgs-glue-adaptor.h" + +class PropsServer +: public org::freedesktop::DBus::PropsGSDemo_adaptor, + public DBus::IntrospectableAdaptor, + public DBus::PropertiesAdaptor, + public DBus::ObjectAdaptor +{ +public: + + PropsServer(DBus::Connection &connection); + + void on_set_property + (DBus::InterfaceAdaptor &interface, const std::string &property, const DBus::Variant &value); +}; + +#endif//__DEMO_PROPS_SERVER_H