1bf0283aeSPatrick Williams #include <net/poettering/Calculator/aserver.hpp> 2bf0283aeSPatrick Williams #include <sdbusplus/async.hpp> 3bf0283aeSPatrick Williams 4603acb82SMatt Spinler #include <iostream> 5603acb82SMatt Spinler 6bf0283aeSPatrick Williams class Calculator : 7bf0283aeSPatrick Williams public sdbusplus::aserver::net::poettering::Calculator<Calculator> 8bf0283aeSPatrick Williams { 9bf0283aeSPatrick Williams public: 103a363a6aSPatrick Williams explicit Calculator(sdbusplus::async::context& ctx, auto path) : 113a363a6aSPatrick Williams sdbusplus::aserver::net::poettering::Calculator<Calculator>(ctx, path) 123a363a6aSPatrick Williams {} 1372f7116aSPatrick Williams 14e15ff88bSPatrick Williams auto method_call(multiply_t, auto x, auto y) 15e15ff88bSPatrick Williams { 16e15ff88bSPatrick Williams auto r = x * y; 17e15ff88bSPatrick Williams last_result(r); 18e15ff88bSPatrick Williams return r; 19e15ff88bSPatrick Williams } 20e15ff88bSPatrick Williams 2106f265f6SPatrick Williams auto method_call(divide_t, auto x, 2206f265f6SPatrick Williams auto y) -> sdbusplus::async::task<divide_t::return_type> 23e15ff88bSPatrick Williams { 24*d731d263SPatrick Williams using sdbusplus::error::net::poettering::Calculator::DivisionByZero; 253a363a6aSPatrick Williams if (y == 0) 263a363a6aSPatrick Williams { 273a363a6aSPatrick Williams status(State::Error); 283a363a6aSPatrick Williams throw DivisionByZero(); 293a363a6aSPatrick Williams } 303a363a6aSPatrick Williams 31e15ff88bSPatrick Williams auto r = x / y; 32e15ff88bSPatrick Williams last_result(r); 33e15ff88bSPatrick Williams co_return r; 34e15ff88bSPatrick Williams } 35e15ff88bSPatrick Williams 36e15ff88bSPatrick Williams auto method_call(clear_t) -> sdbusplus::async::task<> 37e15ff88bSPatrick Williams { 383a363a6aSPatrick Williams auto v = last_result(); 39e15ff88bSPatrick Williams last_result(0); 403a363a6aSPatrick Williams cleared(v); 41e15ff88bSPatrick Williams co_return; 42e15ff88bSPatrick Williams } 43603acb82SMatt Spinler 44603acb82SMatt Spinler auto get_property(owner_t) const 45603acb82SMatt Spinler { 46603acb82SMatt Spinler std::cout << " get_property on owner\n"; 47603acb82SMatt Spinler return owner_; 48603acb82SMatt Spinler } 49603acb82SMatt Spinler 50603acb82SMatt Spinler bool set_property(owner_t, auto owner) 51603acb82SMatt Spinler { 52603acb82SMatt Spinler std::cout << " set_property on owner\n"; 53603acb82SMatt Spinler std::swap(owner_, owner); 54603acb82SMatt Spinler return owner_ == owner; 55603acb82SMatt Spinler } 56bf0283aeSPatrick Williams }; 57bf0283aeSPatrick Williams 58bf0283aeSPatrick Williams int main() 59bf0283aeSPatrick Williams { 60b4bae8f6SPatrick Williams constexpr auto path = Calculator::instance_path; 613a363a6aSPatrick Williams 62bf0283aeSPatrick Williams sdbusplus::async::context ctx; 633a363a6aSPatrick Williams sdbusplus::server::manager_t manager{ctx, path}; 643a363a6aSPatrick Williams 653a363a6aSPatrick Williams Calculator c{ctx, path}; 663a363a6aSPatrick Williams 673a363a6aSPatrick Williams ctx.spawn([](sdbusplus::async::context& ctx) -> sdbusplus::async::task<> { 68c53fe51cSPatrick Williams ctx.request_name(Calculator::default_service); 693a363a6aSPatrick Williams co_return; 703a363a6aSPatrick Williams }(ctx)); 71bf0283aeSPatrick Williams 72bf0283aeSPatrick Williams ctx.run(); 73bf0283aeSPatrick Williams 74bf0283aeSPatrick Williams return 0; 75bf0283aeSPatrick Williams } 76