diff options
| author | Patrick Williams <patrick@stwcx.xyz> | 2017-07-03 11:50:11 -0500 |
|---|---|---|
| committer | Patrick Williams <patrick@stwcx.xyz> | 2017-07-17 17:51:34 -0500 |
| commit | 4edb785cf1864d5fd93fce7f0c956795e23f3006 (patch) | |
| tree | 69b613c9f2d683e1915aafac683465c6acbd8ced /example | |
| parent | 8eb1b85a1ee411a5743cfaae64000a968895d098 (diff) | |
| download | sdbusplus-4edb785cf1864d5fd93fce7f0c956795e23f3006.tar.gz sdbusplus-4edb785cf1864d5fd93fce7f0c956795e23f3006.zip | |
example: create calculator server app
Change-Id: Ie2ad4ff00208056c48c0d596053b20b82f1fb3a1
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Diffstat (limited to 'example')
| -rw-r--r-- | example/Makefile.am | 44 | ||||
| -rw-r--r-- | example/calculator-server.cpp | 72 |
2 files changed, 116 insertions, 0 deletions
diff --git a/example/Makefile.am b/example/Makefile.am new file mode 100644 index 0000000..c9fb907 --- /dev/null +++ b/example/Makefile.am @@ -0,0 +1,44 @@ +noinst_PROGRAMS = calculator-server + +calculator_server_generated_files = \ + net/poettering/Calculator/server.hpp \ + net/poettering/Calculator/server.cpp \ + net/poettering/Calculator/error.hpp \ + net/poettering/Calculator/error.cpp + +calculator_markdown_generated_files = \ + calculator.md + +calculator_server_SOURCES = \ + calculator-server.cpp $(calculator_server_generated_files) +calculator_server_CXXFLAGS = $(SYSTEMD_CFLAGS) +calculator_server_LDADD = $(SYSTEMD_LIBS) ../libsdbusplus.la + +BUILT_SOURCES = \ + $(calculator_server_generated_files) \ + $(calculator_markdown_generated_files) +CLEANFILES = \ + $(calculator_server_generated_files) \ + $(calculator_markdown_generated_files) + +net/poettering/Calculator/server.hpp: + @top_srcdir@/tools/sdbus++ -r . \ + interface server-header net.poettering.Calculator > $@ + +net/poettering/Calculator/server.cpp: + @top_srcdir@/tools/sdbus++ -r . \ + interface server-cpp net.poettering.Calculator > $@ + +net/poettering/Calculator/error.hpp: + @top_srcdir@/tools/sdbus++ -r . \ + error exception-header net.poettering.Calculator > $@ + +net/poettering/Calculator/error.cpp: + @top_srcdir@/tools/sdbus++ -r . \ + error exception-cpp net.poettering.Calculator > $@ + +calculator.md: + @top_srcdir@/tools/sdbus++ -r . \ + interface markdown net.poettering.Calculator > $@ + @top_srcdir@/tools/sdbus++ -r . \ + error markdown net.poettering.Calculator >> $@ diff --git a/example/calculator-server.cpp b/example/calculator-server.cpp new file mode 100644 index 0000000..e72c493 --- /dev/null +++ b/example/calculator-server.cpp @@ -0,0 +1,72 @@ +#include <iostream> +#include <sdbusplus/server.hpp> +#include <net/poettering/Calculator/server.hpp> +#include <net/poettering/Calculator/error.hpp> + +using Calculator_inherit = sdbusplus::server::object_t< + sdbusplus::net::poettering::server::Calculator>; + +/** Example implementation of net.poettering.Calculator */ +struct Calculator : Calculator_inherit +{ + /** Constructor */ + Calculator(sdbusplus::bus::bus& bus, const char* path) : + Calculator_inherit(bus, path) { } + + /** Multiply (x*y), update lastResult */ + int64_t multiply(int64_t x, int64_t y) override + { + return lastResult(x*y); + } + + /** Divide (x/y), update lastResult + * + * Throws DivisionByZero on error. + */ + int64_t divide(int64_t x, int64_t y) override + { + using sdbusplus::net::poettering::Calculator::Error::DivisionByZero; + if (y == 0) + { + status(State::Error); + throw DivisionByZero(); + } + + return lastResult(x/y); + } + + /** Clear lastResult, broadcast 'Cleared' signal */ + void clear() override + { + auto v = lastResult(); + lastResult(0); + cleared(v); + return; + } +}; + +int main() +{ + // Define a dbus path location to place the object. + constexpr auto path = "/net/poettering/calculator"; + + // Create a new bus and affix an object manager for the subtree path we + // intend to place objects at.. + auto b = sdbusplus::bus::new_default(); + sdbusplus::server::manager_t m{b, path}; + + // Reserve the dbus service name : net.poettering.Calculator + b.request_name("net.poettering.Calculator"); + + // Create a calculator object at /net/poettering/calculator + Calculator c1{b, path}; + + // Handle dbus processing forever. + while(1) + { + b.process_discard(); // discard any unhandled messages + b.wait(); + } + + return 0; +} |

