blob: b0500debd56b14768d0a77c49749f5a72d0a6a9b [file] [log] [blame]
Patrick Williamsbf0283a2023-08-19 07:18:04 -05001#include <net/poettering/Calculator/aserver.hpp>
2#include <sdbusplus/async.hpp>
3
Matt Spinler603acb82024-07-18 08:57:13 -05004#include <iostream>
5
Patrick Williamsbf0283a2023-08-19 07:18:04 -05006class Calculator :
7 public sdbusplus::aserver::net::poettering::Calculator<Calculator>
8{
9 public:
Patrick Williams3a363a62023-08-22 17:08:15 -050010 explicit Calculator(sdbusplus::async::context& ctx, auto path) :
11 sdbusplus::aserver::net::poettering::Calculator<Calculator>(ctx, path)
12 {}
Patrick Williams72f71162023-08-20 21:36:14 -050013
Patrick Williamse15ff882023-08-22 16:59:16 -050014 auto method_call(multiply_t, auto x, auto y)
15 {
16 auto r = x * y;
17 last_result(r);
18 return r;
19 }
20
21 auto method_call(divide_t, auto x, auto y)
22 -> sdbusplus::async::task<divide_t::return_type>
23 {
Patrick Williams43fcd1c2023-08-25 08:51:42 -050024 using sdbusplus::error::net::poettering::calculator::DivisionByZero;
Patrick Williams3a363a62023-08-22 17:08:15 -050025 if (y == 0)
26 {
27 status(State::Error);
28 throw DivisionByZero();
29 }
30
Patrick Williamse15ff882023-08-22 16:59:16 -050031 auto r = x / y;
32 last_result(r);
33 co_return r;
34 }
35
36 auto method_call(clear_t) -> sdbusplus::async::task<>
37 {
Patrick Williams3a363a62023-08-22 17:08:15 -050038 auto v = last_result();
Patrick Williamse15ff882023-08-22 16:59:16 -050039 last_result(0);
Patrick Williams3a363a62023-08-22 17:08:15 -050040 cleared(v);
Patrick Williamse15ff882023-08-22 16:59:16 -050041 co_return;
42 }
Matt Spinler603acb82024-07-18 08:57:13 -050043
44 auto get_property(owner_t) const
45 {
46 std::cout << " get_property on owner\n";
47 return owner_;
48 }
49
50 bool set_property(owner_t, auto owner)
51 {
52 std::cout << " set_property on owner\n";
53 std::swap(owner_, owner);
54 return owner_ == owner;
55 }
Patrick Williamsbf0283a2023-08-19 07:18:04 -050056};
57
58int main()
59{
Patrick Williamsb4bae8f2023-09-01 10:13:19 -050060 constexpr auto path = Calculator::instance_path;
Patrick Williams3a363a62023-08-22 17:08:15 -050061
Patrick Williamsbf0283a2023-08-19 07:18:04 -050062 sdbusplus::async::context ctx;
Patrick Williams3a363a62023-08-22 17:08:15 -050063 sdbusplus::server::manager_t manager{ctx, path};
64
65 Calculator c{ctx, path};
66
67 ctx.spawn([](sdbusplus::async::context& ctx) -> sdbusplus::async::task<> {
Patrick Williamsc53fe512024-02-06 14:31:05 -060068 ctx.request_name(Calculator::default_service);
Patrick Williams3a363a62023-08-22 17:08:15 -050069 co_return;
70 }(ctx));
Patrick Williamsbf0283a2023-08-19 07:18:04 -050071
72 ctx.run();
73
74 return 0;
75}