public abstract class AbstractPollingIoProcessor<T extends AbstractIoSession> extends java.lang.Object implements IoProcessor<T>
IoProcessor
which helps
transport developers to write an IoProcessor
easily.
This class is in charge of active polling a set of IoSession
and trigger events when some I/O operation is possible.Modifier and Type | Class and Description |
---|---|
protected static class |
AbstractPollingIoProcessor.SessionState |
Modifier | Constructor and Description |
---|---|
protected |
AbstractPollingIoProcessor(java.util.concurrent.Executor executor)
Create an
AbstractPollingIoProcessor with the given Executor
for handling I/Os events. |
Modifier and Type | Method and Description |
---|---|
void |
add(T session)
Adds the specified
session to the I/O processor so that
the I/O processor starts to perform any I/O operations related
with the session . |
protected abstract java.util.Iterator<T> |
allSessions()
|
protected abstract void |
destroy(T session)
Destroy the underlying client socket handle
|
void |
dispose()
Releases any resources allocated by this processor.
|
protected abstract void |
dispose0()
Dispose the resources used by this
IoProcessor for polling
the client connections |
void |
flush(T session)
Flushes the internal write request queue of the specified
session . |
protected abstract void |
init(T session)
Initialize the polling of a session.
|
boolean |
isDisposed()
Returns true if and if only all resources of this processor
have been disposed.
|
boolean |
isDisposing()
Returns true if and if only
IoProcessor.dispose() method has
been called. |
protected abstract boolean |
isInterestedInRead(T session)
is this session registered for reading
|
protected abstract boolean |
isInterestedInWrite(T session)
is this session registered for writing
|
protected abstract boolean |
isReadable(T session)
Is the session ready for reading
|
protected abstract boolean |
isSelectorEmpty()
Say if the list of
IoSession polled by this IoProcessor
is empty |
protected abstract boolean |
isWritable(T session)
Is the session ready for writing
|
protected abstract int |
read(T session,
IoBuffer buf)
|
void |
remove(T session)
Removes and closes the specified
session from the I/O
processor so that the I/O processor closes the connection
associated with the session and releases any other related
resources. |
protected abstract int |
select()
poll those sessions forever
|
protected abstract int |
select(long timeout)
poll those sessions for the given timeout
|
protected abstract java.util.Iterator<T> |
selectedSessions()
Get an
Iterator for the list of IoSession found selected
by the last call of {@link AbstractPollingIoProcessor#select(int) |
protected abstract void |
setInterestedInRead(T session,
boolean interested)
register a session for reading
|
protected abstract void |
setInterestedInWrite(T session,
boolean interested)
register a session for writing
|
protected abstract AbstractPollingIoProcessor.SessionState |
state(T session)
Get the state of a session (preparing, open, closed)
|
protected abstract int |
transferFile(T session,
FileRegion region,
int length)
Write a part of a file to a
IoSession , if the underlying API isn't supporting
system calls like sendfile(), you can throw a UnsupportedOperationException so
the file will be send using usual write(AbstractIoSession, IoBuffer, int) call. |
void |
updateTrafficControl(T session)
Controls the traffic of the specified
session depending of the
IoSession.isReadSuspended() and IoSession.isWriteSuspended()
flags |
void |
updateTrafficMask(T session) |
protected abstract void |
wakeup()
Interrupt the {@link AbstractPollingIoProcessor#select(int) call.
|
protected abstract int |
write(T session,
IoBuffer buf,
int length)
Write a sequence of bytes to a
IoSession , means to be called when a session
was found ready for writing. |
protected AbstractPollingIoProcessor(java.util.concurrent.Executor executor)
AbstractPollingIoProcessor
with the given Executor
for handling I/Os events.executor
- the Executor
for handling I/O eventspublic final boolean isDisposing()
IoProcessor.dispose()
method has
been called. Please note that this method will return true
even after all the related resources are released.isDisposing
in interface IoProcessor<T extends AbstractIoSession>
public final boolean isDisposed()
isDisposed
in interface IoProcessor<T extends AbstractIoSession>
public final void dispose()
dispose
in interface IoProcessor<T extends AbstractIoSession>
protected abstract void dispose0() throws java.lang.Exception
IoProcessor
for polling
the client connectionsjava.lang.Exception
- if some low level IO error occursprotected abstract int select(long timeout) throws java.lang.Exception
timeout
- milliseconds before the call timeout if no event appearjava.lang.Exception
- if some low level IO error occursprotected abstract int select() throws java.lang.Exception
java.lang.Exception
- if some low level IO error occursprotected abstract boolean isSelectorEmpty()
IoSession
polled by this IoProcessor
is emptyIoProcessor
protected abstract void wakeup()
protected abstract java.util.Iterator<T> selectedSessions()
Iterator
for the list of IoSession
found selected
by the last call of {@link AbstractPollingIoProcessor#select(int)Iterator
of IoSession
read for I/Os operationprotected abstract AbstractPollingIoProcessor.SessionState state(T session)
session
- the IoSession
to inspectprotected abstract boolean isWritable(T session)
session
- the session queriedprotected abstract boolean isReadable(T session)
session
- the session queriedprotected abstract void setInterestedInWrite(T session, boolean interested) throws java.lang.Exception
session
- the session registeredinterested
- true for registering, false for removingjava.lang.Exception
protected abstract void setInterestedInRead(T session, boolean interested) throws java.lang.Exception
session
- the session registeredinterested
- true for registering, false for removingjava.lang.Exception
protected abstract boolean isInterestedInRead(T session)
session
- the session queriedprotected abstract boolean isInterestedInWrite(T session)
session
- the session queriedprotected abstract void init(T session) throws java.lang.Exception
session
- the IoSession
to add to the pollingjava.lang.Exception
- any exception thrown by the underlying system callsprotected abstract void destroy(T session) throws java.lang.Exception
session
- the IoSession
java.lang.Exception
- any exception thrown by the underlying system callsprotected abstract int read(T session, IoBuffer buf) throws java.lang.Exception
IoSession
into the given IoBuffer
.
Is called when the session was found ready for reading.session
- the session to readbuf
- the buffer to filljava.lang.Exception
- any exception thrown by the underlying system callsprotected abstract int write(T session, IoBuffer buf, int length) throws java.lang.Exception
IoSession
, means to be called when a session
was found ready for writing.session
- the session to writebuf
- the buffer to writelength
- the number of bytes to write can be superior to the number of bytes remaining
in the bufferjava.lang.Exception
- any exception thrown by the underlying system callsprotected abstract int transferFile(T session, FileRegion region, int length) throws java.lang.Exception
IoSession
, if the underlying API isn't supporting
system calls like sendfile(), you can throw a UnsupportedOperationException
so
the file will be send using usual write(AbstractIoSession, IoBuffer, int)
call.session
- the session to writeregion
- the file region to writelength
- the length of the portion to sendjava.lang.Exception
- any exception thrown by the underlying system callspublic final void add(T session)
session
to the I/O processor so that
the I/O processor starts to perform any I/O operations related
with the session
.add
in interface IoProcessor<T extends AbstractIoSession>
public final void remove(T session)
session
from the I/O
processor so that the I/O processor closes the connection
associated with the session
and releases any other related
resources.remove
in interface IoProcessor<T extends AbstractIoSession>
public final void flush(T session)
session
.flush
in interface IoProcessor<T extends AbstractIoSession>
public final void updateTrafficMask(T session)
public void updateTrafficControl(T session)
IoProcessor
session
depending of the
IoSession.isReadSuspended()
and IoSession.isWriteSuspended()
flagsupdateTrafficControl
in interface IoProcessor<T extends AbstractIoSession>
Copyright © 2004-2019 Apache MINA Project. All Rights Reserved.