通过下例创建一个简单的service,提供两个method分别用于完成整数于字符串的相加:
//add_service.cpp
#include
#include
#include
#include
#include using namespace std;int addInt(int d1, int d2)
{return d1 + d2;
}string addString(string s1, string s2)
{return s1 + s2;
}int main()
{boost::asio::io_context io;auto conn = std::make_shared(io);conn->request_name("calculate.service");auto server = sdbusplus::asio::object_server(conn);shared_ptr iface = server.add_interface("/calculate_obj","calculate_infterface.data");iface->register_method("AddInt", addInt);iface->register_method("AddString", addString);iface->register_property("data", 18, sdbusplus::asio::PropertyPermission::readWrite);iface->initialize();io.run();return 0;
}
编译程序:
g++ -o add_service add_service.cpp -lsdbusplus -lsystemd
该service有两个method,还有一个属性:
busctl introspect calculate.service /calculate_obj --user
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
calculate_infterface.data interface - - -
.AddInt method ii i -
.AddString method ss s -
.data property i 18 emits-change writable
通过busctl进行测试:
$busctl call calculate.service /calculate_obj calculate_infterface.data AddInt ii 1 2 --user
$i 3
$busctl call calculate.service /calculate_obj calculate_infterface.data AddString ss "1" "2" --user
$s "12"
$busctl get-property calculate.service /calculate_obj calculate_infterface.data data --user
$i 18
$busctl set-property calculate.service /calculate_obj calculate_infterface.data data i 28 --user