xref: /openbmc/sdbusplus/example/calculator-aserver.cpp (revision 72f7116aa3494c59d66ba1d221f4c461ad6c5beb)
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     {
18f84f1117SPatrick Williams         return 42;
19f84f1117SPatrick Williams     }
20f84f1117SPatrick Williams 
21*72f7116aSPatrick Williams     bool set_property(last_result_t, auto)
22*72f7116aSPatrick Williams     {
23*72f7116aSPatrick Williams         return false;
24*72f7116aSPatrick Williams     }
25*72f7116aSPatrick Williams 
26bf0283aeSPatrick Williams   private:
27bf0283aeSPatrick Williams     auto startup() -> sdbusplus::async::task<>
28bf0283aeSPatrick Williams     {
29bf0283aeSPatrick Williams         ctx.get_bus().request_name("net.poettering.Calculator");
30bf0283aeSPatrick Williams 
31*72f7116aSPatrick Williams         status(State::Error);
32*72f7116aSPatrick Williams 
33bf0283aeSPatrick Williams         while (1)
34bf0283aeSPatrick Williams         {
35bf0283aeSPatrick Williams             using namespace std::literals;
36bf0283aeSPatrick Williams             co_await sdbusplus::async::sleep_for(ctx, 10s);
37bf0283aeSPatrick Williams 
38bf0283aeSPatrick Williams             cleared(42);
39bf0283aeSPatrick Williams         }
40bf0283aeSPatrick Williams         co_return;
41bf0283aeSPatrick Williams     }
42bf0283aeSPatrick Williams 
43bf0283aeSPatrick Williams     sdbusplus::server::manager_t manager;
44bf0283aeSPatrick Williams };
45bf0283aeSPatrick Williams 
46bf0283aeSPatrick Williams int main()
47bf0283aeSPatrick Williams {
48bf0283aeSPatrick Williams     sdbusplus::async::context ctx;
49bf0283aeSPatrick Williams     [[maybe_unused]] Calculator c(ctx);
50bf0283aeSPatrick Williams 
51bf0283aeSPatrick Williams     ctx.run();
52bf0283aeSPatrick Williams 
53bf0283aeSPatrick Williams     return 0;
54bf0283aeSPatrick Williams }
55