> 文章列表 > sdbusplus:控制service的property的读写

sdbusplus:控制service的property的读写

sdbusplus:控制service的property的读写

service可以对其property的读写进行控制:

#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
#include <sdbusplus/bus.hpp>
#include <iostream>using namespace std;int main()
{boost::asio::io_context io;auto conn = std::make_shared<sdbusplus::asio::connection>(io);conn->request_name("calculate.service");auto server = sdbusplus::asio::object_server(conn);shared_ptr<sdbusplus::asio::dbus_interface> iface = server.add_interface("/calculate_obj","calculate_infterface.data");iface->register_property("data", 18, // custom set[](const int& req, int& propertyValue) {cout<<"set property cur="<<propertyValue<<" req="<<req<<endl;if (req >= 50){cout<<"req="<<req<<" is bigger than 50, failed"<<endl;return -EINVAL;}propertyValue = req;return 1; // success},// custom get[](const int& property) {cout<<"get property="<<property<<endl;return property;});iface->initialize();io.run();return 0;
}

运行service后,通过busctl进行测试
busctl get-property calculate.service /calculate_obj calculate_infterface.data data --user
i 18
service侧输出:
get property=18

busctl set-property calculate.service /calculate_obj calculate_infterface.data data i 8 --user
service侧输出:
set property cur=18 req=8
get property=8

busctl set-property calculate.service /calculate_obj calculate_infterface.data data i 88 --user
Failed to set property data on interface calculate_infterface.data: Invalid argument
service侧输出:
set property cur=8 req=88
req=88 is bigger than 50, failed