Class ReactorImpl
java.lang.Object
org.apache.qpid.proton.reactor.impl.ReactorImpl
- All Implemented Interfaces:
Extendable
,Reactor
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.qpid.proton.reactor.Reactor
Reactor.Factory
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final String
static final ExtendableAccessor
<Event, Handler> -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
ReactorImpl
(IO io) protected
ReactorImpl
(IO io, ReactorOptions options) ReactorImpl
(ReactorOptions options) -
Method Summary
Modifier and TypeMethodDescriptionCreates a new acceptor.Creates a new acceptor.children()
connection
(Handler handler) Creates a new out-bound connection.connectionToHost
(String host, int port, Handler handler) Creates a new out-bound connection to the given host and port.void
free()
Frees any resources (such as sockets and selectors) held by the reactor or its children.getConnectionAddress
(Connection connection) Get the address used by the connectiongetIO()
Gets the reactor options.protected Selector
long
long
mark()
Updates the last time that the reactor's state has changed, potentially resulting in events being generated.long
now()
boolean
process()
Process any events pending for this reactor.boolean
quiesced()
void
run()
Simplifies the use of the reactor by wrapping the use ofstart
,run
, andstop
method calls.Schedules execution of a task to take place at some point in the future.Creates a newSelectable
as a child of this reactor.selectable
(ReactorChild child) void
setConnectionHost
(Connection connection, String host, int port) Set the host address used by the connectionvoid
setGlobalHandler
(Handler handler) Sets a new global handler.void
setHandler
(Handler handler) Sets a new handler, that will receive any events not handled by a child of the reactor.protected void
setSelector
(Selector selector) void
setTimeout
(long timeout) The value the reactor will use forSelector.select(long)
that is called as part ofReactor.process()
.void
start()
Starts the reactor.void
stop()
Stops the reactor.void
update
(Selectable selectable) Updates the specifiedSelectable
either emitting aEvent.Type.SELECTABLE_UPDATED
event if the selectable is not terminal, orEvent.Type.SELECTABLE_FINAL
if the selectable is terminal and has not already emitted aEvent.Type.SELECTABLE_FINAL
event.void
wakeup()
Wakes up the thread (if any) blocked in theReactor.process()
method.void
yield()
Yields, causing the next call toReactor.process()
to return successfully - without processing any events.
-
Field Details
-
ROOT
-
CONNECTION_PEER_ADDRESS_KEY
- See Also:
-
-
Constructor Details
-
ReactorImpl
- Throws:
IOException
-
ReactorImpl
- Throws:
IOException
-
ReactorImpl
- Throws:
IOException
-
ReactorImpl
- Throws:
IOException
-
-
Method Details
-
mark
public long mark()Description copied from interface:Reactor
Updates the last time that the reactor's state has changed, potentially resulting in events being generated.- Specified by:
mark
in interfaceReactor
- Returns:
- the current time in milliseconds
System.currentTimeMillis()
.
-
now
public long now()- Specified by:
now
in interfaceReactor
- Returns:
- the last time that
Reactor.mark()
was called.
-
free
public void free()Description copied from interface:Reactor
Frees any resources (such as sockets and selectors) held by the reactor or its children. -
attachments
- Specified by:
attachments
in interfaceExtendable
- Specified by:
attachments
in interfaceReactor
- Returns:
- an instance of
Record
that can be used to associate other objects (attachments) with this instance of the Reactor class.
-
getOptions
Description copied from interface:Reactor
Gets the reactor options.- Specified by:
getOptions
in interfaceReactor
- Returns:
- the reactor options
-
getTimeout
public long getTimeout()- Specified by:
getTimeout
in interfaceReactor
- Returns:
- the value previously set using
Reactor.setTimeout(long)
or 0 if no previous value has been set.
-
setTimeout
public void setTimeout(long timeout) Description copied from interface:Reactor
The value the reactor will use forSelector.select(long)
that is called as part ofReactor.process()
.- Specified by:
setTimeout
in interfaceReactor
- Parameters:
timeout
- a timeout value in milliseconds, to associate with this instance of the reactor. This can be retrieved using theReactor.getTimeout()
method
-
getGlobalHandler
- Specified by:
getGlobalHandler
in interfaceReactor
- Returns:
- the global handler for this reactor. Every event the reactor
sees is dispatched to the global handler. To receive every
event generated by the reactor, associate a child handler
with the global handler. For example:
getGlobalHandler().add(yourHandler);
-
setGlobalHandler
Description copied from interface:Reactor
Sets a new global handler. You probably don't want to do this and would be better adding a handler to the value returned by the {Reactor.getGlobalHandler()
method.- Specified by:
setGlobalHandler
in interfaceReactor
- Parameters:
handler
- the new global handler.
-
getHandler
- Specified by:
getHandler
in interfaceReactor
- Returns:
- the handler for this reactor. Every event the reactor sees,
which is not handled by a child of the reactor (such as a
timer, connection, acceptor, or selector) is passed to this
handler. To receive these events, it is recommend that you
associate a child handler with the handler returned by this
method. For example:
getHandler().add(yourHandler);
-
setHandler
Description copied from interface:Reactor
Sets a new handler, that will receive any events not handled by a child of the reactor. Note that setting a handler via this method replaces the previous handler, and will result in no further events being dispatched to the child handlers associated with the previous handler. For this reason it is recommended that you do not use this method and instead add child handlers to the value returned by theReactor.getHandler()
method.- Specified by:
setHandler
in interfaceReactor
- Parameters:
handler
- the new handler for this reactor.
-
children
- Specified by:
children
in interfaceReactor
- Returns:
- a set containing the child objects associated with this reactor.
This will contain any active instances of:
Task
- created using theReactor.schedule(int, Handler)
method,Connection
- created using theReactor.connectionToHost(String, int, Handler)
method,Acceptor
- created using theReactor.acceptor(String, int)
method,Reactor.acceptor(String, int, Handler)
method, orSelectable
- created using theReactor.selectable()
method.
-
collector
-
selectable
Description copied from interface:Reactor
Creates a newSelectable
as a child of this reactor.- Specified by:
selectable
in interfaceReactor
- Returns:
- the newly created
Selectable
.
-
selectable
-
update
Description copied from interface:Reactor
Updates the specifiedSelectable
either emitting aEvent.Type.SELECTABLE_UPDATED
event if the selectable is not terminal, orEvent.Type.SELECTABLE_FINAL
if the selectable is terminal and has not already emitted aEvent.Type.SELECTABLE_FINAL
event. -
yield
public void yield()Description copied from interface:Reactor
Yields, causing the next call toReactor.process()
to return successfully - without processing any events. If multiple calls can be made toyield
and only the next invocation ofReactor.process()
will be affected. -
quiesced
public boolean quiesced() -
process
Description copied from interface:Reactor
Process any events pending for this reactor. Events are dispatched to the handlers registered with the reactor, or child objects associated with the reactor. This method blocks until the reactor has no more work to do (and no more work pending, in terms of scheduled tasks or open selectors to process).- Specified by:
process
in interfaceReactor
- Returns:
true
if the reactor may have more events in the future. For example: if there are scheduled tasks, or open selectors.false
is returned if the reactor has (and will have) no more events to process.- Throws:
HandlerException
- if an unchecked exception is thrown by one of the handlers - it will be re-thrown attached to an instance ofHandlerException
.
-
wakeup
public void wakeup()Description copied from interface:Reactor
Wakes up the thread (if any) blocked in theReactor.process()
method. This is the only method of this class that is thread safe, in that it can be used at the same time as another thread is using the reactor. -
start
public void start()Description copied from interface:Reactor
Starts the reactor. This method should be invoked before the first call toReactor.process()
. -
stop
Description copied from interface:Reactor
Stops the reactor. This method should be invoked after the last call toReactor.process()
.- Specified by:
stop
in interfaceReactor
- Throws:
HandlerException
-
run
Description copied from interface:Reactor
Simplifies the use of the reactor by wrapping the use ofstart
,run
, andstop
method calls.Logically the implementation of this method is:
start(); while(process()) {} stop();
- Specified by:
run
in interfaceReactor
- Throws:
HandlerException
- if an unchecked exception is thrown by one of the handlers - it will be re-thrown attached to an instance ofHandlerException
.
-
schedule
Description copied from interface:Reactor
Schedules execution of a task to take place at some point in the future.- Specified by:
schedule
in interfaceReactor
- Parameters:
delay
- the number of milliseconds, in the future, to schedule the task for.handler
- a handler to associate with the task. This is notified when the deadline for the task is reached.- Returns:
- an object representing the task that has been scheduled.
-
getSelector
-
setSelector
-
connection
Description copied from interface:Reactor
Creates a new out-bound connection.- Specified by:
connection
in interfaceReactor
- Parameters:
handler
- a handler that is notified when events occur for the connection. Typically the host and port to connect to would be supplied to the connection object inside the logic which handles theEvent.Type.CONNECTION_INIT
event viaReactor.setConnectionHost(Connection, String, int)
- Returns:
- the newly created connection object.
-
connectionToHost
Description copied from interface:Reactor
Creates a new out-bound connection to the given host and port.This method will cause Reactor to set up a network connection to the host and create a Connection for it.
- Specified by:
connectionToHost
in interfaceReactor
- Parameters:
host
- the host to connect to (e.g. "localhost")port
- the port used for the connection.handler
- a handler that is notified when events occur for the connection.- Returns:
- the newly created connection object.
-
getConnectionAddress
Description copied from interface:Reactor
Get the address used by the connectionThis may be used to retrieve the remote peer address. Note that the returned address may be in numeric IP format.
- Specified by:
getConnectionAddress
in interfaceReactor
- Parameters:
connection
- the Connection- Returns:
- a string containing the address in the following format:
host[:port]
-
setConnectionHost
Description copied from interface:Reactor
Set the host address used by the connectionThis method will set/change the host address used by the Reactor to create an outbound network connection for the given Connection
- Specified by:
setConnectionHost
in interfaceReactor
- Parameters:
connection
- the Connection to assign the address tohost
- the address of the host to connect to (e.g. "localhost")port
- the port to use for the connection.
-
acceptor
Description copied from interface:Reactor
Creates a new acceptor. This is equivalent to calling:acceptor(host, port, null);
- Specified by:
acceptor
in interfaceReactor
- Parameters:
host
-port
-- Returns:
- the newly created acceptor object.
- Throws:
IOException
-
acceptor
Description copied from interface:Reactor
Creates a new acceptor. This acceptor listens for in-bound connections.- Specified by:
acceptor
in interfaceReactor
- Parameters:
host
- the host name or address of the NIC to listen on.port
- the port number to listen on.handler
- if non-null
this handler is registered with each new connection accepted by the acceptor.- Returns:
- the newly created acceptor object.
- Throws:
IOException
-
getIO
-