Class SingleCoreIOReactor
- java.lang.Object
-
- org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor
-
- org.apache.hc.core5.reactor.SingleCoreIOReactor
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,ModalCloseable
,ConnectionInitiator
,IOReactor
class SingleCoreIOReactor extends AbstractSingleCoreIOReactor implements ConnectionInitiator
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Queue<ChannelEntry>
channelQueue
private java.util.Queue<InternalDataChannel>
closedSessions
private IOEventHandlerFactory
eventHandlerFactory
private Decorator<IOSession>
ioSessionDecorator
private long
lastTimeoutCheckMillis
private static int
MAX_CHANNEL_REQUESTS
private IOReactorConfig
reactorConfig
private java.util.Queue<IOSessionRequest>
requestQueue
private long
selectTimeoutMillis
private IOSessionListener
sessionListener
private Callback<IOSession>
sessionShutdownCallback
private java.util.concurrent.atomic.AtomicBoolean
shutdownInitiated
-
Fields inherited from class org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor
selector
-
-
Constructor Summary
Constructors Constructor Description SingleCoreIOReactor(Callback<java.lang.Exception> exceptionCallback, IOEventHandlerFactory eventHandlerFactory, IOReactorConfig reactorConfig, Decorator<IOSession> ioSessionDecorator, IOSessionListener sessionListener, Callback<IOSession> sessionShutdownCallback)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
checkTimeout(java.nio.channels.SelectionKey key, long nowMillis)
private void
closePendingChannels()
private void
closePendingConnectionRequests()
java.util.concurrent.Future<IOSession>
connect(NamedEndpoint remoteEndpoint, java.net.SocketAddress remoteAddress, java.net.SocketAddress localAddress, Timeout timeout, java.lang.Object attachment, FutureCallback<IOSession> callback)
Requests a connection to a remote host.(package private) void
doExecute()
(package private) void
doTerminate()
(package private) void
enqueueChannel(ChannelEntry entry)
private void
initiateSessionShutdown()
private void
prepareSocket(java.net.Socket socket)
private void
processClosedSessions()
private void
processConnectionRequest(java.nio.channels.SocketChannel socketChannel, IOSessionRequest sessionRequest)
private void
processEvents(java.util.Set<java.nio.channels.SelectionKey> selectedKeys)
private void
processPendingChannels()
private void
processPendingConnectionRequests()
private void
validateActiveChannels()
private void
validateAddress(java.net.SocketAddress address)
-
Methods inherited from class org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor
awaitShutdown, close, close, close, execute, getStatus, initiateShutdown, logException, toString
-
-
-
-
Field Detail
-
MAX_CHANNEL_REQUESTS
private static final int MAX_CHANNEL_REQUESTS
- See Also:
- Constant Field Values
-
eventHandlerFactory
private final IOEventHandlerFactory eventHandlerFactory
-
reactorConfig
private final IOReactorConfig reactorConfig
-
sessionListener
private final IOSessionListener sessionListener
-
closedSessions
private final java.util.Queue<InternalDataChannel> closedSessions
-
channelQueue
private final java.util.Queue<ChannelEntry> channelQueue
-
requestQueue
private final java.util.Queue<IOSessionRequest> requestQueue
-
shutdownInitiated
private final java.util.concurrent.atomic.AtomicBoolean shutdownInitiated
-
selectTimeoutMillis
private final long selectTimeoutMillis
-
lastTimeoutCheckMillis
private volatile long lastTimeoutCheckMillis
-
-
Constructor Detail
-
SingleCoreIOReactor
SingleCoreIOReactor(Callback<java.lang.Exception> exceptionCallback, IOEventHandlerFactory eventHandlerFactory, IOReactorConfig reactorConfig, Decorator<IOSession> ioSessionDecorator, IOSessionListener sessionListener, Callback<IOSession> sessionShutdownCallback)
-
-
Method Detail
-
enqueueChannel
void enqueueChannel(ChannelEntry entry) throws IOReactorShutdownException
- Throws:
IOReactorShutdownException
-
doTerminate
void doTerminate()
- Specified by:
doTerminate
in classAbstractSingleCoreIOReactor
-
doExecute
void doExecute() throws java.io.IOException
- Specified by:
doExecute
in classAbstractSingleCoreIOReactor
- Throws:
java.io.IOException
-
initiateSessionShutdown
private void initiateSessionShutdown()
-
validateActiveChannels
private void validateActiveChannels()
-
processEvents
private void processEvents(java.util.Set<java.nio.channels.SelectionKey> selectedKeys)
-
processPendingChannels
private void processPendingChannels() throws java.io.IOException
- Throws:
java.io.IOException
-
processClosedSessions
private void processClosedSessions()
-
checkTimeout
private void checkTimeout(java.nio.channels.SelectionKey key, long nowMillis)
-
connect
public java.util.concurrent.Future<IOSession> connect(NamedEndpoint remoteEndpoint, java.net.SocketAddress remoteAddress, java.net.SocketAddress localAddress, Timeout timeout, java.lang.Object attachment, FutureCallback<IOSession> callback) throws IOReactorShutdownException
Description copied from interface:ConnectionInitiator
Requests a connection to a remote host.Opening a connection to a remote host usually tends to be a time consuming process and may take a while to complete. One can monitor and control the process of session initialization by means of the
Future
interface.There are several parameters one can use to exert a greater control over the process of session initialization:
A non-null local socket address parameter can be used to bind the socket to a specific local address.
An attachment object can added to the new session's context upon initialization. This object can be used to pass an initial processing state to the protocol handler.
It is often desirable to be able to react to the completion of a session request asynchronously without having to wait for it, blocking the current thread of execution. One can optionally provide an implementation
FutureCallback
instance to get notified of events related to session requests, such as request completion, cancellation, failure or timeout.- Specified by:
connect
in interfaceConnectionInitiator
- Parameters:
remoteEndpoint
- name of the remote host.remoteAddress
- remote socket address.localAddress
- local socket address. Can benull
, in which can the default local address and a random port will be used.timeout
- connect timeout.attachment
- the attachment object. Can benull
.callback
- interface. Can benull
.- Returns:
- session request object.
- Throws:
IOReactorShutdownException
-
prepareSocket
private void prepareSocket(java.net.Socket socket) throws java.io.IOException
- Throws:
java.io.IOException
-
validateAddress
private void validateAddress(java.net.SocketAddress address) throws java.net.UnknownHostException
- Throws:
java.net.UnknownHostException
-
processPendingConnectionRequests
private void processPendingConnectionRequests()
-
processConnectionRequest
private void processConnectionRequest(java.nio.channels.SocketChannel socketChannel, IOSessionRequest sessionRequest) throws java.io.IOException
- Throws:
java.io.IOException
-
closePendingChannels
private void closePendingChannels()
-
closePendingConnectionRequests
private void closePendingConnectionRequests()
-
-