(* Signal interface *)
type signal_handler = DBus.message -> (* member *) string -> (* path *) string -> unit
-type signal_interface = ((* signal name *) string * signal_handler) list
+type signal_handler_map = ((* interface name *) string * signal_handler) list
-let signal_interfaces = ref ([] : ((* interface name *) string * signal_interface) list)
+let signal_handlers = ref ( [] : signal_handler_map )
-let register_signal_interface name interface =
- signal_interfaces := (name, interface) :: !signal_interfaces
+let register_signal_interface interface_name handler =
+ signal_handlers := (interface_name, handler) :: !signal_handlers
-let remove_signal_interface name =
- signal_interfaces := List.filter (fun (n, _) -> n <> name) !signal_interfaces
+let remove_signal_interface interface_name =
+ signal_handlers := List.filter (fun (n, _) -> n <> interface_name) !signal_handlers
let dispatch_signal msg =
let opt_intf = DBus.Message.get_interface msg in
let opt_path = DBus.Message.get_path msg in
match opt_intf, opt_member, opt_path with
| Some i, Some m, Some p ->
- let handler = (try let sig_intf = List.assoc i !signal_interfaces in
- Some (List.assoc m sig_intf)
- with Not_found -> None) in
+ let handler = (try Some (List.assoc i !signal_handlers) with Not_found -> None) in
(match handler with
| None -> ()
| Some h -> h msg m p