Package org.apache.mina.core.polling
Class AbstractPollingIoConnector<S extends AbstractIoSession,H>
- java.lang.Object
-
- org.apache.mina.core.service.AbstractIoService
-
- org.apache.mina.core.service.AbstractIoConnector
-
- org.apache.mina.core.polling.AbstractPollingIoConnector<S,H>
-
- Type Parameters:
H
- The type of IoHandlerS
- The type of IoSession
- All Implemented Interfaces:
IoConnector
,IoService
- Direct Known Subclasses:
AprSocketConnector
,NioDatagramConnector
,NioSocketConnector
public abstract class AbstractPollingIoConnector<S extends AbstractIoSession,H> extends AbstractIoConnector
A base class for implementing client transport using a polling strategy. The underlying sockets will be checked in an active loop and woke up when an socket needed to be processed. This class handle the logic behind binding, connecting and disposing the client sockets. AExecutor
will be used for running client connection, and anAbstractPollingIoProcessor
will be used for processing connected client I/O operations like reading, writing and closing. All the low level methods for binding, connecting, closing need to be provided by the subclassing implementation.- Author:
- Apache MINA Project
- See Also:
for a example of implementation
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
AbstractPollingIoConnector.ConnectionRequest
A ConnectionRequest's Iouture-
Nested classes/interfaces inherited from class org.apache.mina.core.service.AbstractIoService
AbstractIoService.ServiceOperationFuture
-
-
Field Summary
-
Fields inherited from class org.apache.mina.core.service.AbstractIoService
disposalLock, LOGGER, sessionConfig
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractPollingIoConnector(IoSessionConfig sessionConfig, Class<? extends IoProcessor<S>> processorClass)
Constructor forAbstractPollingIoConnector
.protected
AbstractPollingIoConnector(IoSessionConfig sessionConfig, Class<? extends IoProcessor<S>> processorClass, int processorCount)
Constructor forAbstractPollingIoConnector
.protected
AbstractPollingIoConnector(IoSessionConfig sessionConfig, Executor executor, IoProcessor<S> processor)
Constructor forAbstractPollingIoConnector
.protected
AbstractPollingIoConnector(IoSessionConfig sessionConfig, IoProcessor<S> processor)
Constructor forAbstractPollingIoConnector
.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract Iterator<H>
allHandles()
Iterator
for all the client sockets polled for connection.protected abstract void
close(H handle)
Close a client socket.protected abstract boolean
connect(H handle, SocketAddress remoteAddress)
Connect a newly created client socket handle to a remoteSocketAddress
.protected ConnectFuture
connect0(SocketAddress remoteAddress, SocketAddress localAddress, IoSessionInitializer<? extends ConnectFuture> sessionInitializer)
Implement this method to perform the actual connect operation.protected abstract void
destroy()
Destroy the polling system, will be called when thisIoConnector
implementation will be disposed.protected void
dispose0()
Implement this method to release any acquired resources.protected abstract boolean
finishConnect(H handle)
Finish the connection process of a client socket after it was marked as ready to process by theselect(int)
call.protected abstract AbstractPollingIoConnector.ConnectionRequest
getConnectionRequest(H handle)
get theAbstractPollingIoConnector.ConnectionRequest
for a given client socket handleprotected abstract void
init()
Initialize the polling system, will be called at construction time.protected abstract H
newHandle(SocketAddress localAddress)
Create a new client socket handle from a localSocketAddress
protected abstract S
newSession(IoProcessor<S> processor, H handle)
Create a newIoSession
from a connected socket client handle.protected abstract void
register(H handle, AbstractPollingIoConnector.ConnectionRequest request)
Register a new client socket for connection, add it to connection pollingprotected abstract int
select(int timeout)
Check for connected sockets, interrupt when at least a connection is processed (connected or failed to connect).protected abstract Iterator<H>
selectedHandles()
Iterator
for the set of client sockets found connected or failed to connect during the lastselect(int)
call.protected abstract void
wakeup()
Interrupt theselect(int)
method.-
Methods inherited from class org.apache.mina.core.service.AbstractIoConnector
connect, connect, connect, connect, connect, connect, finishSessionInitialization0, getConnectTimeout, getConnectTimeoutCheckInterval, getConnectTimeoutMillis, getDefaultLocalAddress, getDefaultRemoteAddress, setConnectTimeout, setConnectTimeoutCheckInterval, setConnectTimeoutMillis, setDefaultLocalAddress, setDefaultRemoteAddress, toString
-
Methods inherited from class org.apache.mina.core.service.AbstractIoService
addListener, broadcast, dispose, dispose, executeWorker, executeWorker, getActivationTime, getFilterChain, getFilterChainBuilder, getHandler, getListeners, getManagedSessionCount, getManagedSessions, getScheduledWriteBytes, getScheduledWriteMessages, getSessionDataStructureFactory, getStatistics, initSession, isActive, isDisposed, isDisposing, removeListener, setFilterChainBuilder, setHandler, setSessionDataStructureFactory
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.mina.core.service.IoService
addListener, broadcast, dispose, dispose, getActivationTime, getFilterChain, getFilterChainBuilder, getHandler, getManagedSessionCount, getManagedSessions, getScheduledWriteBytes, getScheduledWriteMessages, getSessionConfig, getSessionDataStructureFactory, getStatistics, getTransportMetadata, isActive, isDisposed, isDisposing, removeListener, setFilterChainBuilder, setHandler, setSessionDataStructureFactory
-
-
-
-
Constructor Detail
-
AbstractPollingIoConnector
protected AbstractPollingIoConnector(IoSessionConfig sessionConfig, Class<? extends IoProcessor<S>> processorClass)
Constructor forAbstractPollingIoConnector
. You need to provide a default session configuration, a class ofIoProcessor
which will be instantiated in aSimpleIoProcessorPool
for better scaling in multiprocessor systems. The default pool size will be used.- Parameters:
sessionConfig
- the default configuration for the managedIoSession
processorClass
- aClass
 ofIoProcessor
for the associatedIoSession
type.- See Also:
SimpleIoProcessorPool
-
AbstractPollingIoConnector
protected AbstractPollingIoConnector(IoSessionConfig sessionConfig, Class<? extends IoProcessor<S>> processorClass, int processorCount)
Constructor forAbstractPollingIoConnector
. You need to provide a default session configuration, a class ofIoProcessor
which will be instantiated in aSimpleIoProcessorPool
for using multiple thread for better scaling in multiprocessor systems.- Parameters:
sessionConfig
- the default configuration for the managedIoSession
processorClass
- aClass
 ofIoProcessor
for the associatedIoSession
type.processorCount
- the amount of processor to instantiate for the pool- See Also:
SimpleIoProcessorPool
-
AbstractPollingIoConnector
protected AbstractPollingIoConnector(IoSessionConfig sessionConfig, IoProcessor<S> processor)
Constructor forAbstractPollingIoConnector
. You need to provide a default session configuration, a defaultExecutor
will be created usingExecutors.newCachedThreadPool()
.- Parameters:
sessionConfig
- the default configuration for the managedIoSession
processor
- theIoProcessor
 for processing theIoSession
of this transport, triggering events to the boundIoHandler
and processing the chains ofIoFilter
- See Also:
AbstractIoService(IoSessionConfig, Executor)
-
AbstractPollingIoConnector
protected AbstractPollingIoConnector(IoSessionConfig sessionConfig, Executor executor, IoProcessor<S> processor)
Constructor forAbstractPollingIoConnector
. You need to provide a default session configuration and anExecutor
for handling I/O events. If nullExecutor
is provided, a default one will be created usingExecutors.newCachedThreadPool()
.- Parameters:
sessionConfig
- the default configuration for the managedIoSession
executor
- theExecutor
used for handling asynchronous execution of I/O events. Can benull
.processor
- theIoProcessor
 for processing theIoSession
of this transport, triggering events to the boundIoHandler
and processing the chains ofIoFilter
- See Also:
AbstractIoService(IoSessionConfig, Executor)
-
-
Method Detail
-
init
protected abstract void init() throws Exception
Initialize the polling system, will be called at construction time.- Throws:
Exception
- any exception thrown by the underlying system calls
-
destroy
protected abstract void destroy() throws Exception
Destroy the polling system, will be called when thisIoConnector
implementation will be disposed.- Throws:
Exception
- any exception thrown by the underlying systems calls
-
newHandle
protected abstract H newHandle(SocketAddress localAddress) throws Exception
Create a new client socket handle from a localSocketAddress
- Parameters:
localAddress
- the socket address for binding the new client socket- Returns:
- a new client socket handle
- Throws:
Exception
- any exception thrown by the underlying systems calls
-
connect
protected abstract boolean connect(H handle, SocketAddress remoteAddress) throws Exception
Connect a newly created client socket handle to a remoteSocketAddress
. This operation is non-blocking, so at end of the call the socket can be still in connection process.- Parameters:
handle
- the client socket handleremoteAddress
- the remote address where to connect- Returns:
- true if a connection was established, false if this client socket is in non-blocking mode and the connection operation is in progress
- Throws:
Exception
- If the connect failed
-
finishConnect
protected abstract boolean finishConnect(H handle) throws Exception
Finish the connection process of a client socket after it was marked as ready to process by theselect(int)
call. The socket will be connected or reported as connection failed.- Parameters:
handle
- the client socket handle to finish to connect- Returns:
- true if the socket is connected
- Throws:
Exception
- any exception thrown by the underlying systems calls
-
newSession
protected abstract S newSession(IoProcessor<S> processor, H handle) throws Exception
Create a newIoSession
from a connected socket client handle. Will assign the createdIoSession
to the givenIoProcessor
for managing future I/O events.
-
close
protected abstract void close(H handle) throws Exception
Close a client socket.- Parameters:
handle
- the client socket- Throws:
Exception
- any exception thrown by the underlying systems calls
-
wakeup
protected abstract void wakeup()
Interrupt theselect(int)
method. Used when the poll set need to be modified.
-
select
protected abstract int select(int timeout) throws Exception
Check for connected sockets, interrupt when at least a connection is processed (connected or failed to connect). All the client socket descriptors processed need to be returned byselectedHandles()
- Parameters:
timeout
- The timeout for the select() method- Returns:
- The number of socket having received some data
- Throws:
Exception
- any exception thrown by the underlying systems calls
-
selectedHandles
protected abstract Iterator<H> selectedHandles()
Iterator
for the set of client sockets found connected or failed to connect during the lastselect(int)
call.- Returns:
- the list of client socket handles to process
-
allHandles
protected abstract Iterator<H> allHandles()
Iterator
for all the client sockets polled for connection.- Returns:
- the list of client sockets currently polled for connection
-
register
protected abstract void register(H handle, AbstractPollingIoConnector.ConnectionRequest request) throws Exception
Register a new client socket for connection, add it to connection polling- Parameters:
handle
- client socket handlerequest
- the associatedAbstractPollingIoConnector.ConnectionRequest
- Throws:
Exception
- any exception thrown by the underlying systems calls
-
getConnectionRequest
protected abstract AbstractPollingIoConnector.ConnectionRequest getConnectionRequest(H handle)
get theAbstractPollingIoConnector.ConnectionRequest
for a given client socket handle- Parameters:
handle
- the socket client handle- Returns:
- the connection request if the socket is connecting otherwise
null
-
dispose0
protected final void dispose0() throws Exception
Implement this method to release any acquired resources. This method is invoked only once byAbstractIoService.dispose()
.- Specified by:
dispose0
in classAbstractIoService
- Throws:
Exception
- If the dispose failed
-
connect0
protected final ConnectFuture connect0(SocketAddress remoteAddress, SocketAddress localAddress, IoSessionInitializer<? extends ConnectFuture> sessionInitializer)
Implement this method to perform the actual connect operation.- Specified by:
connect0
in classAbstractIoConnector
- Parameters:
remoteAddress
- The remote address to connect fromlocalAddress
- null if no local address is specifiedsessionInitializer
- The IoSessionInitializer to use when the connection s successful- Returns:
- The ConnectFuture associated with this asynchronous operation
-
-