1 #include <net/poettering/Calculator/client.hpp> 2 #include <sdbusplus/async.hpp> 3 4 #include <iostream> 5 6 auto startup(sdbusplus::async::context& ctx) -> sdbusplus::async::task<> 7 { 8 constexpr auto service = "net.poettering.Calculator"; 9 constexpr auto path = "/net/poettering/calculator"; 10 11 auto c = 12 sdbusplus::client::net::poettering::Calculator().service(service).path( 13 path); 14 15 // Alternatively, sdbusplus::async::client_t<Calculator, ...>() could have 16 // been used to combine multiple interfaces into a single client-proxy. 17 18 { 19 auto _ = co_await c.call<int64_t>(ctx, "Multiply", int64_t(7), 20 int64_t(6)); 21 std::cout << "Should be 42: " << _ << std::endl; 22 } 23 24 { 25 auto _ = co_await c.get_property<int64_t>(ctx, "LastResult"); 26 std::cout << "Should be 42: " << _ << std::endl; 27 } 28 29 { 30 co_await c.call<>(ctx, "Clear"); 31 } 32 33 { 34 auto _ = co_await c.get_property<int64_t>(ctx, "LastResult"); 35 std::cout << "Should be 0: " << _ << std::endl; 36 } 37 38 { 39 co_await c.set_property<int64_t>(ctx, "LastResult", 1234); 40 auto _ = co_await c.get_property<int64_t>(ctx, "LastResult"); 41 std::cout << "Should be 1234: " << _ << std::endl; 42 } 43 44 co_return; 45 } 46 47 int main() 48 { 49 sdbusplus::async::context ctx; 50 ctx.spawn(startup(ctx)); 51 ctx.spawn( 52 sdbusplus::async::execution::just() | 53 sdbusplus::async::execution::then([&ctx]() { ctx.request_stop(); })); 54 ctx.run(); 55 56 return 0; 57 } 58