PublicShow sourcebroadcast.pl -- Event service

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 arguments.

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).
Source listen(+Listener, +Templ, :Goal) is det
Source listen(+Templ, :Goal) is det
Open a channel for listening for events of the given `Templ'.
Source unlisten(+Listener) is det
Source unlisten(+Listener, +Templ) is det
Source unlisten(+Listener, +Templ, :Goal) is det
Destroy a channel. All arguments may be variables, removing the all matching listening channels.
Source listening(?Listener, ?Templ, ?Goal) is nondet
returns currently open channels
Source broadcast(+Templ) is det
Broadcast given event.
Source 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.