sdbusplus match interface changes
There are three changes that I made recently to the sdbusplus match APIs that I'd like new code to start using. I'm going through the existing openbmc repositories and making the changes to existing code.
1. Namespace move.
The sdbusplus::server::match namespace is now sdbusplus::bus::match, but there is a temporary alias for the old namespace still in place. Once I get all changes merged in the user repositories, I'll remove the alias.
This change was proposed by someone outside OpenBMC that was using the library. I agreed that the 'match' utilities should not be in server because they are just as likely to be used by a dbus-client.
2. Addition of match rule utilities.
I added a number of utilities in the sdbus::bus::match::rules namespace that can be used to create signal match rules instead of hand-written C-strings.
Old example:
"type='signal',member='JobRemoved',path='/org/freedesktop/systemd1'," "interface='org.freedesktop.systemd1.Manager'"
New example:
type::signal() + member("JobRemoved") + path("/org/freedesktop/systemd1) + interface("org.freedesktop.systemd1.Manager)
3. Support for std::function-type callbacks.
Previously, when you had a class member function you wanted to have as
the callback for a dbus signal, you needed to make a static member
trampoline like:
static int callback(msg, void* context)
{
return static_cast<MyClass>(context)->realCallback(msg);
}
match m = match(..., &MyClass::callback, this);
You can now avoid writing the trampoline function by using
std::mem_fn:
match m = match(..., std::bind(std::mem_fn(&MyClass::callback),
this, _1));The first repository I modified to take advantage of these three changes is phosphor-state-manager. You can find that review here as an example:
https://gerrit.openbmc-project.xyz/#/c/4092
Signature · 1 line
Patrick Williams