org.apache.http.impl.nio.reactor

## Class BaseIOReactor

- java.lang.Object
- - org.apache.http.impl.nio.reactor.AbstractIOReactor
  - - org.apache.http.impl.nio.reactor.BaseIOReactor

All Implemented Interfaces:
  IOReactor

    @ThreadSafe
    public class BaseIOReactor
    extends AbstractIOReactor

Default implementation of `AbstractIOReactor` that serves as a base for more advanced `IOReactor` implementations. This class adds support for the I/O event dispatching using `IOEventDispatch`, management of buffering sessions, and session timeout handling.

Since:
  4.0

### Constructor Summary

Constructors
Constructor and Description
`BaseIOReactor(long selectTimeout)` Creates new BaseIOReactor instance.
`BaseIOReactor(long selectTimeout, boolean interestOpsQueueing)` Creates new BaseIOReactor instance.

### Method Summary

Methods
`protected void` `acceptable(SelectionKey key)` This I/O reactor implementation does not react to the `SelectionKey.OP_ACCEPT` event.
`protected void` `connectable(SelectionKey key)` This I/O reactor implementation does not react to the `SelectionKey.OP_CONNECT` event.
`void` `execute(IOEventDispatch eventDispatch)` Activates the I/O reactor.
`protected void` `handleRuntimeException(RuntimeException ex)` Handles the given `RuntimeException`.
`protected void` `readable(SelectionKey key)` Processes `SelectionKey.OP_READ` event on the given selection key.
`protected void` `sessionClosed(IOSession session)` Processes closed I/O session.
`protected void` `sessionCreated(SelectionKey key, IOSession session)` Processes newly created I/O session.
`protected void` `sessionTimedOut(IOSession session)` Processes timed out I/O session.
`void` `setExceptionHandler(IOReactorExceptionHandler exceptionHandler)` Sets exception handler for this I/O reactor.
`protected void` `validate(Set<SelectionKey> keys)` Verifies whether any of the sessions associated with the given selection keys timed out by invoking the `AbstractIOReactor.timeoutCheck(SelectionKey, long)` method.
`protected void` `writable(SelectionKey key)` Processes `SelectionKey.OP_WRITE` event on the given selection key.

### Methods inherited from class org.apache.http.impl.nio.reactor.AbstractIOReactor

`addChannel, awaitShutdown, closeActiveChannels, closeNewChannels, closeSessions, execute, getInterestOpsQueueing, getSession, getStatus, gracefulShutdown, hardShutdown, processEvent, queueClosedSession, shutdown, shutdown, timeoutCheck`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### BaseIOReactor

    public BaseIOReactor(long selectTimeout)
                  throws IOReactorException

Creates new BaseIOReactor instance.

Parameters:
  `selectTimeout` - the select timeout.
Throws:
  `IOReactorException` - in case if a non-recoverable I/O error.

#### BaseIOReactor

    public BaseIOReactor(long selectTimeout,
                 boolean interestOpsQueueing)
                  throws IOReactorException

Creates new BaseIOReactor instance.

Parameters:
  `selectTimeout` - the select timeout.
  `interestOpsQueueing` - Ops queueing flag.
Throws:
  `IOReactorException` - in case if a non-recoverable I/O error.
Since:
  4.1

### Method Detail

#### execute

    public void execute(IOEventDispatch eventDispatch)
                 throws InterruptedIOException,
                        IOReactorException

Activates the I/O reactor. The I/O reactor will start reacting to I/O events and dispatch I/O event notifications to the given `IOEventDispatch`.

Parameters:
  `eventDispatch` - the I/O event dispatch.
Throws:
  `InterruptedIOException` - if the dispatch thread is interrupted.
  `IOReactorException` - in case if a non-recoverable I/O error.

#### setExceptionHandler

    public void setExceptionHandler(IOReactorExceptionHandler exceptionHandler)

Sets exception handler for this I/O reactor.

Parameters:
  `exceptionHandler` - the exception handler.

#### handleRuntimeException

    protected void handleRuntimeException(RuntimeException ex)

Handles the given `RuntimeException`. This method delegates handling of the exception to the `IOReactorExceptionHandler`, if available.

Parameters:
  `ex` - the runtime exception.

#### acceptable

    protected void acceptable(SelectionKey key)

This I/O reactor implementation does not react to the `SelectionKey.OP_ACCEPT` event.

Super-classes can override this method to react to the event.

Specified by:
  `acceptable` in class `AbstractIOReactor`
Parameters:
  `key` - the selection key.

#### connectable

    protected void connectable(SelectionKey key)

This I/O reactor implementation does not react to the `SelectionKey.OP_CONNECT` event.

Super-classes can override this method to react to the event.

Specified by:
  `connectable` in class `AbstractIOReactor`
Parameters:
  `key` - the selection key.

#### readable

    protected void readable(SelectionKey key)

Processes `SelectionKey.OP_READ` event on the given selection key. This method dispatches the event notification to the `IOEventDispatch.inputReady(IOSession)` method.

Specified by:
  `readable` in class `AbstractIOReactor`
Parameters:
  `key` - the selection key.

#### writable

    protected void writable(SelectionKey key)

Processes `SelectionKey.OP_WRITE` event on the given selection key. This method dispatches the event notification to the `IOEventDispatch.outputReady(IOSession)` method.

Specified by:
  `writable` in class `AbstractIOReactor`
Parameters:
  `key` - the selection key.

#### validate

    protected void validate(Set<SelectionKey> keys)

Verifies whether any of the sessions associated with the given selection keys timed out by invoking the `AbstractIOReactor.timeoutCheck(SelectionKey, long)` method.

This method will also invoke the `IOEventDispatch.inputReady(IOSession)` method on all sessions that have buffered input data.

Specified by:
  `validate` in class `AbstractIOReactor`
Parameters:
  `keys` - all selection keys registered with the selector.

#### sessionCreated

    protected void sessionCreated(SelectionKey key,
                      IOSession session)

Processes newly created I/O session. This method dispatches the event notification to the `IOEventDispatch.connected(IOSession)` method.

Overrides:
  `sessionCreated` in class `AbstractIOReactor`
Parameters:
  `key` - the selection key.
  `session` - new I/O session.

#### sessionTimedOut

    protected void sessionTimedOut(IOSession session)

Processes timed out I/O session. This method dispatches the event notification to the `IOEventDispatch.timeout(IOSession)` method.

Overrides:
  `sessionTimedOut` in class `AbstractIOReactor`
Parameters:
  `session` - timed out I/O session.

#### sessionClosed

    protected void sessionClosed(IOSession session)

Processes closed I/O session. This method dispatches the event notification to the `IOEventDispatch.disconnected(IOSession)` method.

Overrides:
  `sessionClosed` in class `AbstractIOReactor`
Parameters:
  `session` - closed I/O session.