Generic broadcasting service. Broadcasts are made using the predicate
broadcast(+Templ). All registered `listeners' will have their goal
called. Success or failure of this is ignored. The listener can not bind
This library is particularly useful for disconnecting modules in an application. Modules can broadcast events such as changes, anticipating other modules need to react on such changes. For example, settings.pl broadcasts changes to settings, allowing dependent modules to react on changes:
:- listen(setting(changed(http:workers, New)), change_workers(New)). change_workers(New) :- setting(http:port, Port), http_workers(Port, New).
- listen(+Listener, +Templ, :Goal) is det
- listen(+Templ, :Goal) is det
- Open a channel for listening for events of the given `Templ'.
- unlisten(+Listener) is det
- unlisten(+Listener, +Templ) is det
- unlisten(+Listener, +Templ, :Goal) is det
- Destroy a channel. All arguments may be variables, removing the all matching listening channels.
- listening(?Listener, ?Templ, ?Goal) is nondet
- returns currently open channels
- broadcast(+Templ) is det
- Broadcast given event.
- broadcast_request(+Templ) is nondet
- Broadcast given event till accepted. Succeeds then, fail if no listener accepts the call. Bindings made by the listener goal are maintained. May be used to make broadcast requests.