use std::time::Duration;
use dbus::blocking::Connection;
use dbus::channel::MatchingReceiver;
use dbus::Message;
use dbus::message::MatchRule;
fn main() {
let conn = Connection::new_session().expect("D-Bus connection failed");
let mut rule = MatchRule::new();
let proxy = conn.with_proxy("org.freedesktop.DBus", "/org/freedesktop/DBus", Duration::from_millis(5000));
let result: Result<(), dbus::Error> = proxy.method_call("org.freedesktop.DBus.Monitoring", "BecomeMonitor", (vec!(rule.match_str()), 0u32));
if result.is_ok() {
conn.start_receive(rule, Box::new(|msg, _| {
handle_message(&msg);
true
}));
} else {
rule.eavesdrop = true; conn.add_match(rule, |_: (), _, msg| {
handle_message(&msg);
true
}).expect("add_match failed");
}
loop { conn.process(Duration::from_millis(1000)).unwrap(); };
}
fn handle_message(msg: &Message) {
println!("Got message: {:?}", msg);
}