package util class Connectable(listeners) # # Helper method to create and fire an Event object from the given parameters. # method fire(type, param) local e if /type then stop("null type to fire") e := Event(self, type, param) return fire_event(e) end # # Fire the given event to the listeners # method fire_event(e) every (!listeners).maybe_fire(e) return e end # # Create and connect a Listener to this object. # @return the Listener created and added. # method connect(obj, meth, type) local l l := Listener(obj, meth, type) put(listeners, l) return l end # # Remove a Listener previously returned by {connect} # method disconnect(l) delete(listeners, l) end initially listeners := [] end