Lei YU | ddc0eba | 2020-02-13 16:26:46 +0800 | [diff] [blame] | 1 | #include <net/poettering/Calculator/client.hpp> |
Patrick Venture | 95269db | 2018-08-31 09:19:17 -0700 | [diff] [blame] | 2 | #include <net/poettering/Calculator/server.hpp> |
| 3 | #include <sdbusplus/server.hpp> |
Patrick Williams | 127b8ab | 2020-05-21 15:24:19 -0500 | [diff] [blame] | 4 | |
| 5 | #include <iostream> |
Lei YU | ddc0eba | 2020-02-13 16:26:46 +0800 | [diff] [blame] | 6 | #include <string_view> |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 7 | |
Andrew Geissler | 072da3e | 2018-01-18 07:21:42 -0800 | [diff] [blame] | 8 | using Calculator_inherit = |
Patrick Williams | 5011340 | 2023-03-18 15:29:32 -0500 | [diff] [blame] | 9 | sdbusplus::server::object_t<sdbusplus::server::net::poettering::Calculator>; |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 10 | |
| 11 | /** Example implementation of net.poettering.Calculator */ |
| 12 | struct Calculator : Calculator_inherit |
| 13 | { |
| 14 | /** Constructor */ |
Patrick Williams | 0f282c4 | 2021-11-19 11:36:18 -0600 | [diff] [blame] | 15 | Calculator(sdbusplus::bus_t& bus, const char* path) : |
Andrew Geissler | 072da3e | 2018-01-18 07:21:42 -0800 | [diff] [blame] | 16 | Calculator_inherit(bus, path) |
Patrick Williams | 127b8ab | 2020-05-21 15:24:19 -0500 | [diff] [blame] | 17 | {} |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 18 | |
| 19 | /** Multiply (x*y), update lastResult */ |
| 20 | int64_t multiply(int64_t x, int64_t y) override |
| 21 | { |
Andrew Geissler | 072da3e | 2018-01-18 07:21:42 -0800 | [diff] [blame] | 22 | return lastResult(x * y); |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 23 | } |
| 24 | |
| 25 | /** Divide (x/y), update lastResult |
| 26 | * |
| 27 | * Throws DivisionByZero on error. |
| 28 | */ |
| 29 | int64_t divide(int64_t x, int64_t y) override |
| 30 | { |
Patrick Williams | d731d26 | 2024-09-17 14:24:08 -0400 | [diff] [blame^] | 31 | using sdbusplus::error::net::poettering::Calculator::DivisionByZero; |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 32 | if (y == 0) |
| 33 | { |
| 34 | status(State::Error); |
| 35 | throw DivisionByZero(); |
| 36 | } |
| 37 | |
Andrew Geissler | 072da3e | 2018-01-18 07:21:42 -0800 | [diff] [blame] | 38 | return lastResult(x / y); |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 39 | } |
| 40 | |
| 41 | /** Clear lastResult, broadcast 'Cleared' signal */ |
| 42 | void clear() override |
| 43 | { |
| 44 | auto v = lastResult(); |
| 45 | lastResult(0); |
| 46 | cleared(v); |
| 47 | return; |
| 48 | } |
| 49 | }; |
| 50 | |
| 51 | int main() |
| 52 | { |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 53 | // Create a new bus and affix an object manager for the subtree path we |
| 54 | // intend to place objects at.. |
| 55 | auto b = sdbusplus::bus::new_default(); |
Patrick Williams | b4bae8f | 2023-09-01 10:13:19 -0500 | [diff] [blame] | 56 | sdbusplus::server::manager_t m{b, Calculator::instance_path}; |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 57 | |
| 58 | // Reserve the dbus service name : net.poettering.Calculator |
Patrick Williams | b4bae8f | 2023-09-01 10:13:19 -0500 | [diff] [blame] | 59 | b.request_name(Calculator::default_service); |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 60 | |
| 61 | // Create a calculator object at /net/poettering/calculator |
Patrick Williams | b4bae8f | 2023-09-01 10:13:19 -0500 | [diff] [blame] | 62 | Calculator c1{b, Calculator::instance_path}; |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 63 | |
| 64 | // Handle dbus processing forever. |
Nan Zhou | 25e2a09 | 2022-09-01 03:47:19 +0000 | [diff] [blame] | 65 | b.process_loop(); |
Patrick Williams | 4edb785 | 2017-07-03 11:50:11 -0500 | [diff] [blame] | 66 | } |