1bf0283aeSPatrick Williams #include <net/poettering/Calculator/aserver.hpp> 2bf0283aeSPatrick Williams #include <sdbusplus/async.hpp> 3bf0283aeSPatrick Williams 4bf0283aeSPatrick Williams class Calculator : 5bf0283aeSPatrick Williams public sdbusplus::aserver::net::poettering::Calculator<Calculator> 6bf0283aeSPatrick Williams { 7bf0283aeSPatrick Williams public: 83a363a6aSPatrick Williams explicit Calculator(sdbusplus::async::context& ctx, auto path) : 93a363a6aSPatrick Williams sdbusplus::aserver::net::poettering::Calculator<Calculator>(ctx, path) 103a363a6aSPatrick Williams {} 1172f7116aSPatrick Williams 12e15ff88bSPatrick Williams auto method_call(multiply_t, auto x, auto y) 13e15ff88bSPatrick Williams { 14e15ff88bSPatrick Williams auto r = x * y; 15e15ff88bSPatrick Williams last_result(r); 16e15ff88bSPatrick Williams return r; 17e15ff88bSPatrick Williams } 18e15ff88bSPatrick Williams 19e15ff88bSPatrick Williams auto method_call(divide_t, auto x, auto y) 20e15ff88bSPatrick Williams -> sdbusplus::async::task<divide_t::return_type> 21e15ff88bSPatrick Williams { 2243fcd1ceSPatrick Williams using sdbusplus::error::net::poettering::calculator::DivisionByZero; 233a363a6aSPatrick Williams if (y == 0) 243a363a6aSPatrick Williams { 253a363a6aSPatrick Williams status(State::Error); 263a363a6aSPatrick Williams throw DivisionByZero(); 273a363a6aSPatrick Williams } 283a363a6aSPatrick Williams 29e15ff88bSPatrick Williams auto r = x / y; 30e15ff88bSPatrick Williams last_result(r); 31e15ff88bSPatrick Williams co_return r; 32e15ff88bSPatrick Williams } 33e15ff88bSPatrick Williams 34e15ff88bSPatrick Williams auto method_call(clear_t) -> sdbusplus::async::task<> 35e15ff88bSPatrick Williams { 363a363a6aSPatrick Williams auto v = last_result(); 37e15ff88bSPatrick Williams last_result(0); 383a363a6aSPatrick Williams cleared(v); 39e15ff88bSPatrick Williams co_return; 40e15ff88bSPatrick Williams } 41bf0283aeSPatrick Williams }; 42bf0283aeSPatrick Williams 43bf0283aeSPatrick Williams int main() 44bf0283aeSPatrick Williams { 45b4bae8f6SPatrick Williams constexpr auto path = Calculator::instance_path; 463a363a6aSPatrick Williams 47bf0283aeSPatrick Williams sdbusplus::async::context ctx; 483a363a6aSPatrick Williams sdbusplus::server::manager_t manager{ctx, path}; 493a363a6aSPatrick Williams 503a363a6aSPatrick Williams Calculator c{ctx, path}; 513a363a6aSPatrick Williams 523a363a6aSPatrick Williams ctx.spawn([](sdbusplus::async::context& ctx) -> sdbusplus::async::task<> { 53*c53fe51cSPatrick Williams ctx.request_name(Calculator::default_service); 543a363a6aSPatrick Williams co_return; 553a363a6aSPatrick Williams }(ctx)); 56bf0283aeSPatrick Williams 57bf0283aeSPatrick Williams ctx.run(); 58bf0283aeSPatrick Williams 59bf0283aeSPatrick Williams return 0; 60bf0283aeSPatrick Williams } 61