The keypoint that is worth mentioning is about dealing with asynchronous message.
The function dbus_connection_read_write_dispatch() for example does all three of these things, offering a simple alternative to a main loop. If you don't need to be asynchronous, you can ignore DBusWatch, DBusTimeout, and dbus_connection_dispatch(). Instead, dbus_connection_read_write_dispatch() can be used.
Here is an example of how to use dbus watch and dbus timeout:
This module is to deal with messages.
DBus Message Bus API:
This module is the only one in libdbus that's specific to communicating with the message bus daemon. The rest of the API can also be used for connecting to another application directly.
An example to look over names on the message (bus driver) by using proxy object:
The example of dbus_connection_add_filter() and handler method: