1 #include <net/poettering/Calculator/client.hpp> 2 #include <net/poettering/Calculator/server.hpp> 3 #include <sdbusplus/server.hpp> 4 5 #include <iostream> 6 #include <string_view> 7 8 using Calculator_inherit = 9 sdbusplus::server::object_t<sdbusplus::server::net::poettering::Calculator>; 10 11 /** Example implementation of net.poettering.Calculator */ 12 struct Calculator : Calculator_inherit 13 { 14 /** Constructor */ 15 Calculator(sdbusplus::bus_t& bus, const char* path) : 16 Calculator_inherit(bus, path) 17 {} 18 19 /** Multiply (x*y), update lastResult */ 20 int64_t multiply(int64_t x, int64_t y) override 21 { 22 return lastResult(x * y); 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 { 31 using sdbusplus::error::net::poettering::Calculator::DivisionByZero; 32 if (y == 0) 33 { 34 status(State::Error); 35 throw DivisionByZero(); 36 } 37 38 return lastResult(x / y); 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 { 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(); 56 sdbusplus::server::manager_t m{b, Calculator::instance_path}; 57 58 // Reserve the dbus service name : net.poettering.Calculator 59 b.request_name(Calculator::default_service); 60 61 // Create a calculator object at /net/poettering/calculator 62 Calculator c1{b, Calculator::instance_path}; 63 64 // Handle dbus processing forever. 65 b.process_loop(); 66 } 67