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