blob: e72c49362f8d5cddbff14735ebc51e8a772c0caa [file] [log] [blame]
Patrick Williams4edb7852017-07-03 11:50:11 -05001#include <iostream>
2#include <sdbusplus/server.hpp>
3#include <net/poettering/Calculator/server.hpp>
4#include <net/poettering/Calculator/error.hpp>
5
6using Calculator_inherit = sdbusplus::server::object_t<
7 sdbusplus::net::poettering::server::Calculator>;
8
9/** Example implementation of net.poettering.Calculator */
10struct Calculator : Calculator_inherit
11{
12 /** Constructor */
13 Calculator(sdbusplus::bus::bus& bus, const char* path) :
14 Calculator_inherit(bus, path) { }
15
16 /** Multiply (x*y), update lastResult */
17 int64_t multiply(int64_t x, int64_t y) override
18 {
19 return lastResult(x*y);
20 }
21
22 /** Divide (x/y), update lastResult
23 *
24 * Throws DivisionByZero on error.
25 */
26 int64_t divide(int64_t x, int64_t y) override
27 {
28 using sdbusplus::net::poettering::Calculator::Error::DivisionByZero;
29 if (y == 0)
30 {
31 status(State::Error);
32 throw DivisionByZero();
33 }
34
35 return lastResult(x/y);
36 }
37
38 /** Clear lastResult, broadcast 'Cleared' signal */
39 void clear() override
40 {
41 auto v = lastResult();
42 lastResult(0);
43 cleared(v);
44 return;
45 }
46};
47
48int main()
49{
50 // Define a dbus path location to place the object.
51 constexpr auto path = "/net/poettering/calculator";
52
53 // Create a new bus and affix an object manager for the subtree path we
54 // intend to place objects at..
55 auto b = sdbusplus::bus::new_default();
56 sdbusplus::server::manager_t m{b, path};
57
58 // Reserve the dbus service name : net.poettering.Calculator
59 b.request_name("net.poettering.Calculator");
60
61 // Create a calculator object at /net/poettering/calculator
62 Calculator c1{b, path};
63
64 // Handle dbus processing forever.
65 while(1)
66 {
67 b.process_discard(); // discard any unhandled messages
68 b.wait();
69 }
70
71 return 0;
72}