public final class ReactorCore extends java.lang.Object implements Reactor, ReactorControl
Reactor
interface
and the reactor control API via the ReactorControl
interface.Modifier and Type | Method and Description |
---|---|
<T> Deferred<T> |
callDeferred(T callbackData)
Creates a new deferred event object and then issues a callback on it using
the supplied callback data.
|
void |
cancelThread(Threadable<?,?> threadable)
Cancels a currently executing threadable task.
|
void |
cancelTimer(Timeable<?> timeable)
Cancels the timer associated with a given timeable object.
|
<T> Deferred<T> |
failDeferred(java.lang.Exception error)
Creates a new deferred event object and then issues an error callback on it
using the supplied exception condition.
|
Logger |
getLogger(java.lang.String loggerId)
Gets the runtime message logger which is associated with the specified
logger ID.
|
Logger |
getLogger(java.lang.String loggerId,
java.lang.String loggerResources)
Gets the runtime message logger which is associated with the specified
logger ID.
|
static Reactor |
getReactor()
Accesses the reactor user interface.
|
static ReactorControl |
getReactorControl()
Accesses the reactor control interface.
|
Signal<java.lang.Integer> |
getReactorShutdownSignal()
Gets a handle on the reactor shutdown signal.
|
long |
getUptime()
Gets the elapsed time since the reactor was started.
|
void |
join()
Waits for the reactor thread to exit.
|
<T> Deferred<T> |
newDeferred()
Creates a new deferred event object.
|
<T> DeferredConcentrator<T> |
newDeferredConcentrator()
Creates a new deferred callback concentrator object.
|
<T> DeferredSplitter<T> |
newDeferredSplitter()
Creates a new deferred callback splitter object.
|
<T> Signal<T> |
newSignal()
Creates a new signal event object.
|
<T,U> Deferred<U> |
runThread(Threadable<T,U> threadable,
T data)
Starts executing a threadable task in a new thread.
|
<T,U> Deferred<U> |
runThread(Threadable<T,U> threadable,
T data,
int msTimeout)
Starts executing a time limited threadable task in a new thread.
|
<T> void |
runTimerOneShot(Timeable<T> timeable,
int msDelay,
T data)
Starts a one-shot timer.
|
<T> void |
runTimerRepeating(Timeable<T> timeable,
int msDelay,
int msInterval,
T data)
Starts a repeating timer.
|
void |
start(MonotonicClockSource clockSource,
ReactorLogTarget logTarget)
Starts the reactor running.
|
void |
stop()
Requests that the reactor stop running.
|
public static Reactor getReactor()
public static ReactorControl getReactorControl()
public void start(MonotonicClockSource clockSource, ReactorLogTarget logTarget) throws ThreadableRunningException
ReactorControl
start
in interface ReactorControl
clockSource
- This is a monotonic clock which will be used as the timebase for
the reactor.logTarget
- This is the logging service to which all reactor log messages are
redirected.ThreadableRunningException
- This exception is thrown if there is already a reactor thread
running. This indicates a programming error.public void stop()
ReactorControl
join
method.stop
in interface ReactorControl
public void join() throws java.lang.InterruptedException
ReactorControl
stop
method.join
in interface ReactorControl
java.lang.InterruptedException
- This exception is thrown if the calling thread is interrupted
before the reactor shutdown is complete. An Error is thrown if
the corresponding error condition caused the reactor to shut
down.public long getUptime()
Reactor
public Logger getLogger(java.lang.String loggerId)
Reactor
getLogger
in interface Reactor
loggerId
- This is the logger ID which is associated with the requested
message logger. This is a String value which will normally hold
the canonical name of the client class which is using the logger.public Logger getLogger(java.lang.String loggerId, java.lang.String loggerResources) throws java.util.MissingResourceException
Reactor
getLogger
in interface Reactor
loggerId
- This is the logger ID which is associated with the requested
message logger. This is a String value which will normally hold
the canonical name of the client class which is using the logger.loggerResources
- This is the name of a ResourceBundle
which is to
be used for localising messages for this logger. May be null if
none of the messages require localisation.java.util.MissingResourceException
- This exception will be thrown if a set of logger resources have
been specified but cannot be found.public Signal<java.lang.Integer> getReactorShutdownSignal()
Reactor
getReactorShutdownSignal
in interface Reactor
public <T,U> Deferred<U> runThread(Threadable<T,U> threadable, T data) throws ReactorNotRunningException, ThreadableRunningException
Reactor
runThread
in interface Reactor
T
- This type identifier specifies the data type of the parameter
which will be passed as an input to the threadable task.U
- This type identifier specifies the data type of the value which
will be returned by the threadable task.threadable
- This is the threadable task object which is to be executed in a
separate thread.data
- This is the input data object which will be passed to the
run
method of the threadable task
object when it is called in the context of the new thread.ReactorNotRunningException
- This exception will be thrown if an attempt is made to schedule
execution of a threadable task object when the reactor is not
running.ThreadableRunningException
- This runtime exception is thrown when an attempt is made to
schedule a threadable object for execution while it is already
being processed by the reactor. This constitutes a programming
error.public <T,U> Deferred<U> runThread(Threadable<T,U> threadable, T data, int msTimeout) throws ReactorNotRunningException, ThreadableRunningException
Reactor
DeferredTimedOutException
is passed back via the errback chain.runThread
in interface Reactor
T
- This type identifier specifies the data type of the parameter
which will be passed as an input to the threadable task.U
- This type identifier specifies the data type of the value which
will be returned by the threadable task.threadable
- This is the threadable task object which is to be executed in a
separate thread.data
- This is the input data object which will be passed to the
run
method of the threadable task
object when it is called in the context of the new thread.msTimeout
- This is the timeout period which is associated with the threadable
task. A threadable task which exceeds this duration will be
automatically cancelled.DeferredTimedOutException
.ReactorNotRunningException
- This exception will be thrown if an attempt is made to schedule
execution of a threadable task object when the reactor is not
running.ThreadableRunningException
- This runtime exception is thrown when an attempt is made to
schedule a threadable object for execution while it is already
being processed by the reactor. This constitutes a programming
error.public void cancelThread(Threadable<?,?> threadable)
Reactor
cancelThread
in interface Reactor
threadable
- This is the threadable task object for which threaded execution is
to be cancelled.public <T> void runTimerOneShot(Timeable<T> timeable, int msDelay, T data) throws ReactorNotRunningException
Reactor
runTimerOneShot
in interface Reactor
T
- This type identifier specifies the type of the timer data object
which will be passed as the parameter of the timed callback.timeable
- This is the timeable object which will have its timed callback
executed after the requested delay.msDelay
- This parameter specifies the delay before the timed callback is to
be issued, expressed in milliseconds.data
- This is a timer data object which will be passed back as a
parameter to the timed callback.ReactorNotRunningException
- This runtime exception will be thrown if an attempt is made to
schedule a timer when the reactor is not running.public <T> void runTimerRepeating(Timeable<T> timeable, int msDelay, int msInterval, T data) throws ReactorNotRunningException
Reactor
runTimerRepeating
in interface Reactor
T
- This type identifier specifies the type of the timer data object
which will be passed as the parameter of the timed callback.timeable
- This is the timeable object which will have its timed callback
executed at the requested interval.msDelay
- This is the delay before the first timed callback is issued,
specified in milliseconds.msInterval
- This is the interval at which timed callbacks will be issued,
specified in milliseconds. If set to 0 or a negative value, the
timer is treated as a one-shot timer.data
- This is a timer data object which will be passed back as a
parameter to the timed callbacks.ReactorNotRunningException
- This exception will be thrown if an attempt is made to schedule a
timer when the reactor is not running.public void cancelTimer(Timeable<?> timeable)
Reactor
cancelTimer
in interface Reactor
timeable
- This is the timeable object for which the associated running timer
should be cancelled.public <T> Deferred<T> newDeferred()
Reactor
Deferred
interface.newDeferred
in interface Reactor
T
- This type identifier specifies the data type of the object which
should be passed as the callback
parameter for the new deferred event object.public <T> Deferred<T> callDeferred(T callbackData)
Reactor
callDeferred
in interface Reactor
T
- This type identifier specifies the data type of the object which
should be passed as the callback data for the new deferred event
object.callbackData
- This is the callback data which is to be passed to the deferred
callback chain.public <T> Deferred<T> failDeferred(java.lang.Exception error)
Reactor
failDeferred
in interface Reactor
T
- This type identifier specifies the data type of the object which
would otherwise have been passed as the callback data for the new
deferred event object.error
- This is the exception condition which is to be passed to the
deferred error callback chain.public <T> DeferredSplitter<T> newDeferredSplitter()
Reactor
DeferredSplitter
interface.newDeferredSplitter
in interface Reactor
T
- This type identifier specifies the type of the callback data
object which will be passed through the deferred splitter.public <T> DeferredConcentrator<T> newDeferredConcentrator()
Reactor
DeferredConcentrator
interface.newDeferredConcentrator
in interface Reactor
T
- This type identifier specifies the type of the callback data
object which will be passed through the deferred concentrator.public <T> Signal<T> newSignal()
Reactor
Signal
interface.newSignal
in interface Reactor
T
- This type identifier specifies the type of the data object which
will be passed as the parameter to the
onSignal
signalable
callbacks.