public abstract class SelectorManager extends AbstractLifeCycle implements Dumpable
SelectorManager
manages a number of ManagedSelector
s that
simplify the non-blocking primitives provided by the JVM via the java.nio
package.
SelectorManager
subclasses implement methods to return protocol-specific
EndPoint
s and Connection
s.
AbstractLifeCycle.AbstractLifeCycleListener
LifeCycle.Listener
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_CONNECT_TIMEOUT |
protected static Logger |
LOG |
Modifier | Constructor and Description |
---|---|
protected |
SelectorManager(Executor executor,
Scheduler scheduler) |
protected |
SelectorManager(Executor executor,
Scheduler scheduler,
int selectors) |
Modifier and Type | Method and Description |
---|---|
void |
accept(SocketChannel channel) |
void |
accept(SocketChannel channel,
Object attachment)
Registers a channel to perform non-blocking read/write operations.
|
protected void |
accepted(SocketChannel channel)
Callback method when a channel is accepted from the
ServerSocketChannel
passed to acceptor(ServerSocketChannel) . |
void |
acceptor(ServerSocketChannel server)
Registers a server channel for accept operations.
|
void |
connect(SocketChannel channel,
Object attachment)
Registers a channel to perform a non-blocking connect.
|
void |
connectionClosed(Connection connection)
Callback method invoked when a connection is closed.
|
protected void |
connectionFailed(SocketChannel channel,
Throwable ex,
Object attachment)
Callback method invoked when a non-blocking connect cannot be completed.
|
void |
connectionOpened(Connection connection)
Callback method invoked when a connection is opened.
|
protected void |
doStart() |
protected void |
doStop() |
String |
dump() |
void |
dump(Appendable out,
String indent) |
protected void |
endPointClosed(EndPoint endpoint)
Callback method invoked when an endpoint is closed.
|
protected void |
endPointOpened(EndPoint endpoint)
Callback method invoked when an endpoint is opened.
|
protected void |
execute(Runnable task)
Executes the given task in a different thread.
|
protected boolean |
finishConnect(SocketChannel channel) |
long |
getConnectTimeout()
Get the connect timeout
|
Executor |
getExecutor() |
Scheduler |
getScheduler() |
int |
getSelectorCount() |
int |
getSelectorPriorityDelta()
Deprecated.
not implemented
|
abstract Connection |
newConnection(SocketChannel channel,
EndPoint endpoint,
Object attachment)
Factory method to create
Connection . |
protected abstract EndPoint |
newEndPoint(SocketChannel channel,
ManagedSelector selector,
SelectionKey selectionKey)
Factory method to create
EndPoint . |
protected ManagedSelector |
newSelector(int id)
Factory method for
ManagedSelector . |
void |
setConnectTimeout(long milliseconds)
Set the connect timeout (in milliseconds)
|
void |
setSelectorPriorityDelta(int selectorPriorityDelta)
Deprecated.
not implemented
|
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, setStopTimeout, start, stop
public static final int DEFAULT_CONNECT_TIMEOUT
protected static final Logger LOG
public Executor getExecutor()
public Scheduler getScheduler()
public long getConnectTimeout()
public void setConnectTimeout(long milliseconds)
milliseconds
- the number of milliseconds for the timeout@Deprecated public int getSelectorPriorityDelta()
@Deprecated public void setSelectorPriorityDelta(int selectorPriorityDelta)
selectorPriorityDelta
- the selector priority deltaprotected void execute(Runnable task)
task
- the task to executepublic int getSelectorCount()
public void connect(SocketChannel channel, Object attachment)
Registers a channel to perform a non-blocking connect.
The channel must be set in non-blocking mode, SocketChannel.connect(SocketAddress)
must be called prior to calling this method, and the connect operation must not be completed
(the return value of SocketChannel.connect(SocketAddress)
must be false).
channel
- the channel to registerattachment
- the attachment objectaccept(SocketChannel, Object)
public void accept(SocketChannel channel)
channel
- the channel to acceptaccept(SocketChannel, Object)
public void accept(SocketChannel channel, Object attachment)
Registers a channel to perform non-blocking read/write operations.
This method is called just after a channel has been accepted by ServerSocketChannel.accept()
,
or just after having performed a blocking connect via Socket.connect(SocketAddress, int)
, or
just after a non-blocking connect via SocketChannel.connect(SocketAddress)
that completed
successfully.
channel
- the channel to registerattachment
- the attachment objectpublic void acceptor(ServerSocketChannel server)
Registers a server channel for accept operations.
When a SocketChannel
is accepted from the given ServerSocketChannel
then the accepted(SocketChannel)
method is called, which must be
overridden by a derivation of this class to handle the accepted channel
server
- the server channel to registerprotected void accepted(SocketChannel channel) throws IOException
ServerSocketChannel
passed to acceptor(ServerSocketChannel)
.
The default impl throws an UnsupportedOperationException
, so it must
be overridden by subclasses if a server channel is provided.channel
- theIOException
- if unable to accept channelprotected void doStart() throws Exception
doStart
in class AbstractLifeCycle
Exception
protected ManagedSelector newSelector(int id)
Factory method for ManagedSelector
.
id
- an identifier for the to create
ManagedSelector
protected void doStop() throws Exception
doStop
in class AbstractLifeCycle
Exception
protected void endPointOpened(EndPoint endpoint)
Callback method invoked when an endpoint is opened.
endpoint
- the endpoint being openedprotected void endPointClosed(EndPoint endpoint)
Callback method invoked when an endpoint is closed.
endpoint
- the endpoint being closedpublic void connectionOpened(Connection connection)
Callback method invoked when a connection is opened.
connection
- the connection just openedpublic void connectionClosed(Connection connection)
Callback method invoked when a connection is closed.
connection
- the connection just closedprotected boolean finishConnect(SocketChannel channel) throws IOException
IOException
protected void connectionFailed(SocketChannel channel, Throwable ex, Object attachment)
Callback method invoked when a non-blocking connect cannot be completed.
By default it just logs with level warning.
channel
- the channel that attempted the connectex
- the exception that caused the connect to failattachment
- the attachment object associated at registrationprotected abstract EndPoint newEndPoint(SocketChannel channel, ManagedSelector selector, SelectionKey selectionKey) throws IOException
Factory method to create EndPoint
.
This method is invoked as a result of the registration of a channel via connect(SocketChannel, Object)
or accept(SocketChannel)
.
channel
- the channel associated to the endpointselector
- the selector the channel is registered toselectionKey
- the selection keyIOException
- if the endPoint cannot be creatednewConnection(SocketChannel, EndPoint, Object)
public abstract Connection newConnection(SocketChannel channel, EndPoint endpoint, Object attachment) throws IOException
Factory method to create Connection
.
channel
- the channel associated to the connectionendpoint
- the endpointattachment
- the attachmentIOException
- if unable to create new connectionnewEndPoint(SocketChannel, ManagedSelector, SelectionKey)
public void dump(Appendable out, String indent) throws IOException
dump
in interface Dumpable
IOException
Copyright © 1995-2016 Webtide. All Rights Reserved.