xref: /openbmc/sdbusplus/example/calculator-aserver.cpp (revision e15ff88b78965d6048148468f5208d3738cb24af)
1 #include <net/poettering/Calculator/aserver.hpp>
2 #include <sdbusplus/async.hpp>
3 
4 class Calculator :
5     public sdbusplus::aserver::net::poettering::Calculator<Calculator>
6 {
7   public:
8     explicit Calculator(sdbusplus::async::context& ctx) :
9         sdbusplus::aserver::net::poettering::Calculator<Calculator>(
10             ctx, "/net/poettering/calculator"),
11         manager(ctx, "/")
12     {
13         ctx.spawn(startup());
14     }
15 
16     auto get_property(last_result_t) const
17     {
18         return _last_result;
19     }
20 
21     bool set_property(last_result_t, int64_t v)
22     {
23         if (v % 2 == 0)
24         {
25             std::swap(_last_result, v);
26             return v != _last_result;
27         }
28         return false;
29     }
30 
31     auto method_call(multiply_t, auto x, auto y)
32     {
33         auto r = x * y;
34         last_result(r);
35         return r;
36     }
37 
38     auto method_call(divide_t, auto x, auto y)
39         -> sdbusplus::async::task<divide_t::return_type>
40     {
41         auto r = x / y;
42         last_result(r);
43         co_return r;
44     }
45 
46     auto method_call(clear_t) -> sdbusplus::async::task<>
47     {
48         last_result(0);
49         co_return;
50     }
51 
52   private:
53     auto startup() -> sdbusplus::async::task<>
54     {
55         last_result(123);
56         ctx.get_bus().request_name("net.poettering.Calculator");
57 
58         status(State::Error);
59 
60         while (!ctx.stop_requested())
61         {
62             using namespace std::literals;
63             co_await sdbusplus::async::sleep_for(ctx, 10s);
64 
65             cleared(42);
66         }
67         co_return;
68     }
69 
70     sdbusplus::server::manager_t manager;
71 };
72 
73 int main()
74 {
75     sdbusplus::async::context ctx;
76     [[maybe_unused]] Calculator c(ctx);
77 
78     ctx.run();
79 
80     return 0;
81 }
82