Class EventEmitter
Listeners are added to a specific event name using addEventListener(String, GenericRunnable)
or similar methods. Upon dispatching an event using runEvent(String, Object...)
,
all event listeners registered for the given event name are called with the given arguments. The number of arguments passed and the number of arguments in the event listeners must match, otherwise
an IllegalArgumentException
will be thrown at the listener-level.
Each event may also have a default listener registered, which is called when the event is emitted, and only if no other (regular) listeners are registered
(see setDefaultEventListener(String, GenericRunnable)
).
By default, all event listeners are executed regardless of any exceptions thrown at the listener-level. If any listener did throw an exception, the runEvent
call will throw an
ExecutionFailedException
detailing the thrown exception(s), after all listeners were executed. See also: setCoalesceListenerErrors(boolean)
.
A call to createEventId(String, int)
will switch this EventEmitter
to fastAccess mode, which may be used for more efficient event dispatching. In this mode, all event
names must be registered with a call to this method.
This class is thread-safe.
- Since:
- 2.10
- API Note:
- The behavior and API naming of this class is heavily inspired by the similar Node.js events API
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
addEventListener
(String name, GenericRunnable runnable) Registers the given event listener for the given eventname
.void
addEventListenerOnce
(String name, GenericRunnable runnable) Registers the given event listener for the given eventname
.int
createEventId
(String name) Creates an ID for the given event name used for more efficient event dispatching.int
createEventId
(String name, int expect) Creates an ID for the given event name used for more efficient event dispatching.final int
Alias forrunEvent(int, Object...)
.final int
Alias forrunEvent(String, Object...)
.Returns the default event listener of the given eventname
.int
getEventListenerCount
(String name) Returns the number of event listeners registered for the given eventname
, excluding the default listener.getEventListeners
(String name) Returns an unmodifiable, possibly empty, list of the event listeners registered for the given eventname
, excluding the default listener.Returns an unmodifiable set of known event names.boolean
isEventRegistered
(String name) Returnstrue
if the given eventname
is a known event.final EventEmitter
off
(String name, GenericRunnable runnable) Alias forremoveEventListener(String, GenericRunnable)
.final EventEmitter
on
(String name, GenericRunnable runnable) Alias foraddEventListener(String, GenericRunnable)
.final EventEmitter
on
(String name, GenericRunnable.A0 runnable) Alias foraddEventListener(String, GenericRunnable)
for zero-argument events.final EventEmitter
on
(String name, GenericRunnable.A1<?> runnable) Alias foraddEventListener(String, GenericRunnable)
for single-argument events.final EventEmitter
on
(String name, GenericRunnable.A2<?, ?> runnable) Alias foraddEventListener(String, GenericRunnable)
for two-argument events.final EventEmitter
on
(String name, GenericRunnable.A3<?, ?, ?> runnable) Alias foraddEventListener(String, GenericRunnable)
for three-argument events.final EventEmitter
on
(String name, GenericRunnable.A4<?, ?, ?, ?> runnable) Alias foraddEventListener(String, GenericRunnable)
for four-argument events.final EventEmitter
once
(String name, GenericRunnable runnable) final EventEmitter
once
(String name, GenericRunnable.A0 runnable) Alias foraddEventListenerOnce(String, GenericRunnable)
for zero-argument events.final EventEmitter
once
(String name, GenericRunnable.A1<?> runnable) Alias foraddEventListenerOnce(String, GenericRunnable)
for single-argument events.final EventEmitter
once
(String name, GenericRunnable.A2<?, ?> runnable) Alias foraddEventListenerOnce(String, GenericRunnable)
for two-argument events.final EventEmitter
once
(String name, GenericRunnable.A3<?, ?, ?> runnable) Alias foraddEventListenerOnce(String, GenericRunnable)
for three-argument events.final EventEmitter
once
(String name, GenericRunnable.A4<?, ?, ?, ?> runnable) Alias foraddEventListenerOnce(String, GenericRunnable)
for four-argument events.void
prependEventListener
(String name, GenericRunnable runnable) Registers the given event listener for the given eventname
.void
Removes all event listeners from the event with the givenname
, including the default listener.void
Removes the default event listener of the given eventname
.void
removeEventListener
(String name, GenericRunnable runnable) Removes the given event listener from the event with the givenname
.void
reserveEventIdSpace
(int highestId) Pre-allocates internal data structures for storing event IDs up to highestId.int
Dispatches an event with the given fastAccess event ID.int
Dispatches an event with the givenname
.void
setCoalesceListenerErrors
(boolean coalesceListenerErrors) If set totrue
, all listeners for an event will always be executed regardless of errors thrown at the listener-level.void
setDefaultEventListener
(String name, GenericRunnable runnable) Registers the default event listener for the given eventname
.
-
Constructor Details
-
EventEmitter
public EventEmitter()
-
-
Method Details
-
createEventId
Creates an ID for the given event name used for more efficient event dispatching.Equivalent to a call to:
createEventId
(name, -1)- Parameters:
name
- The event name- Returns:
- The
EventEmitter
-scope unique event ID
-
createEventId
Creates an ID for the given event name used for more efficient event dispatching.Calling this method switches this
EventEmitter
to fastAccess mode.If
expect
is non-negative and the generated next event ID does not match its value, no event ID will be created and anIllegalStateException
thrown. This may be used by applications to assert a specific event ID, which removes the requirement for runtime event ID storage. Event IDs always start at0
for the first event and are incremented for each additional event.- Parameters:
name
- The event nameexpect
- The expected event ID- Returns:
- The
EventEmitter
-scope unique event ID, same asexpect
if non-negative - Throws:
IllegalStateException
- Ifexpect
is non-negative and does not match the next event IDIllegalStateException
- If any listeners were registered already
-
reserveEventIdSpace
public void reserveEventIdSpace(int highestId) Pre-allocates internal data structures for storing event IDs up to highestId.- Parameters:
highestId
- The highest event ID- Since:
- 2.11.0
-
on
Alias foraddEventListener(String, GenericRunnable)
.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
-
on
Alias foraddEventListener(String, GenericRunnable)
for zero-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
on
Alias foraddEventListener(String, GenericRunnable)
for single-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
on
Alias foraddEventListener(String, GenericRunnable)
for two-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
on
Alias foraddEventListener(String, GenericRunnable)
for three-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
on
Alias foraddEventListener(String, GenericRunnable)
for four-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
once
- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
-
once
Alias foraddEventListenerOnce(String, GenericRunnable)
for zero-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
once
Alias foraddEventListenerOnce(String, GenericRunnable)
for single-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
once
Alias foraddEventListenerOnce(String, GenericRunnable)
for two-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
once
Alias foraddEventListenerOnce(String, GenericRunnable)
for three-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
once
Alias foraddEventListenerOnce(String, GenericRunnable)
for four-argument events.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
- Since:
- 2.11.0
-
off
Alias forremoveEventListener(String, GenericRunnable)
.- Parameters:
name
- The event namerunnable
- The event listener- Returns:
- This
EventEmitter
-
emit
Alias forrunEvent(String, Object...)
.- Parameters:
name
- The event nameargs
- The arguments to pass to the event listeners- Returns:
- The number of registered listeners
-
emit
Alias forrunEvent(int, Object...)
.- Parameters:
id
- The event IDargs
- The arguments to pass to the event listeners- Returns:
- The number of registered listeners
-
prependEventListener
Registers the given event listener for the given eventname
. The last event listener registered with this method will always be run first among the set of registered event listeners.- Parameters:
name
- The event namerunnable
- The event listener- See Also:
-
addEventListener
Registers the given event listener for the given eventname
.- Parameters:
name
- The event namerunnable
- The event listener- Throws:
IllegalStateException
- If fastAccess is enabled and the given eventname
was not created usingcreateEventId(String, int)
- See Also:
-
addEventListenerOnce
Registers the given event listener for the given eventname
. If the an event with the given name is executed, this listener will be unregistered before its execution, causing the event listener to only run once.- Parameters:
name
- The event namerunnable
- The event listener- Throws:
IllegalStateException
- If fastAccess is enabled and the given eventname
was not created usingcreateEventId(String, int)
- See Also:
-
removeEventListener
Removes the given event listener from the event with the givenname
.The default event listener may also be removed using this method.
- Parameters:
name
- The event namerunnable
- The event listener- See Also:
-
removeAllEventListeners
Removes all event listeners from the event with the givenname
, including the default listener.- Parameters:
name
- The event name- See Also:
-
getEventListenerCount
Returns the number of event listeners registered for the given eventname
, excluding the default listener.- Parameters:
name
- The event name- Returns:
- The number of listeners
-
getEventNames
Returns an unmodifiable set of known event names. This includes names of events that were ever passed torunEvent(java.lang.String,java.lang.Object...)
,addEventListener(String, GenericRunnable)
or similar methods. This does not always exclude event names for which no listeners are registered.- Returns:
- The set of known event names
-
getEventListeners
Returns an unmodifiable, possibly empty, list of the event listeners registered for the given eventname
, excluding the default listener.- Parameters:
name
- The event name- Returns:
- The list of event listeners
-
isEventRegistered
Returnstrue
if the given eventname
is a known event. An event is known if there are any listeners registered for it or if it was registered usingcreateEventId(String, int)
.- Parameters:
name
- The event name- Returns:
true
if the given eventname
is a known event- See Also:
-
setDefaultEventListener
Registers the default event listener for the given eventname
. This event listener is called if and only if there are no other (regular) event listeners registered for the event.Only a single default event listener can be registered per event. Any previous set default event listeners are overriden.
- Parameters:
name
- The event namerunnable
- The default event listener- Throws:
IllegalStateException
- If fastAccess is enabled and the given eventname
was not created usingcreateEventId(String, int)
- Since:
- 2.11.0
- See Also:
-
removeDefaultEventListener
Removes the default event listener of the given eventname
.- Parameters:
name
- The event name- Since:
- 2.11.0
- See Also:
-
getDefaultEventListener
Returns the default event listener of the given eventname
.- Parameters:
name
- The event name- Returns:
- The registered default event listener, or
null
if there is none - Since:
- 2.11.0
-
setCoalesceListenerErrors
public void setCoalesceListenerErrors(boolean coalesceListenerErrors) If set totrue
, all listeners for an event will always be executed regardless of errors thrown at the listener-level. If set tofalse
, event execution will be canceled at the first thrown exception. The default istrue
.- Parameters:
coalesceListenerErrors
-true
to always execute all listeners- See Also:
-
runEvent
Dispatches an event with the givenname
.The set of listeners executed for this event is determined once before the first listener is executed. As a consequence, removing a subsequent event listener in an event listener for the same event may still cause the removed event listener to be executed one last time.
- Parameters:
name
- The event nameargs
- The arguments to pass to the event listeners- Returns:
- The number of registered listeners
- Throws:
ExecutionFailedException
- If at least one listener failed to execute- See Also:
-
runEvent
Dispatches an event with the given fastAccess event ID.See
runEvent(String, Object...)
for more information.- Parameters:
id
- The event IDargs
- The arguments to pass to the event listeners- Returns:
- The number of registered listeners
- Throws:
IllegalStateException
- If fastAccess is not enabledIllegalArgumentException
- If the givenid
is not a valid IDExecutionFailedException
- If at least one listener failed to execute- See Also:
-