org.apache.mina.core.polling
Class AbstractPollingIoProcessor<T extends AbstractIoSession>

java.lang.Object
  extended by org.apache.mina.core.polling.AbstractPollingIoProcessor<T>
All Implemented Interfaces:
IoProcessor<T>
Direct Known Subclasses:
AprIoProcessor, NioProcessor

public abstract class AbstractPollingIoProcessor<T extends AbstractIoSession>
extends Object
implements IoProcessor<T>

An abstract implementation of 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.

Version:
$Rev: 680286 $, $Date: 2008-07-28 10:22:53 +0200 (lun, 28 jui 2008) $
Author:
The Apache MINA Project (dev@mina.apache.org)

Nested Class Summary
protected static class AbstractPollingIoProcessor.SessionState
           
 
Constructor Summary
protected AbstractPollingIoProcessor(Executor executor)
          Create an AbstractPollingIoProcessor with the given Executor for handling I/Os events.
 
Method Summary
 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  Iterator<T> allSessions()
          Get an Iterator for the list of IoSession polled by this IoProcessor
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)
          Reads a sequence of bytes from a IoSession into the given IoBuffer.
 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  boolean select(int timeout)
          poll those sessions for the given timeout
protected abstract  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 sate 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 updateTrafficMask(T session)
          Controls the traffic of the specified session as specified in IoSession.getTrafficMask().
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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AbstractPollingIoProcessor

protected AbstractPollingIoProcessor(Executor executor)
Create an AbstractPollingIoProcessor with the given Executor for handling I/Os events.

Parameters:
executor - the Executor for handling I/O events
Method Detail

isDisposing

public final boolean isDisposing()
Returns true if and if only IoProcessor.dispose() method has been called. Please note that this method will return true even after all the related resources are released.

Specified by:
isDisposing in interface IoProcessor<T extends AbstractIoSession>

isDisposed

public final boolean isDisposed()
Returns true if and if only all resources of this processor have been disposed.

Specified by:
isDisposed in interface IoProcessor<T extends AbstractIoSession>

dispose

public final void dispose()
Releases any resources allocated by this processor. Please note that the resources might not be released as long as there are any sessions managed by this processor. Most implementations will close all sessions immediately and release the related resources.

Specified by:
dispose in interface IoProcessor<T extends AbstractIoSession>

dispose0

protected abstract void dispose0()
                          throws Exception
Dispose the resources used by this IoProcessor for polling the client connections

Throws:
Exception - if some low level IO error occurs

select

protected abstract boolean select(int timeout)
                           throws Exception
poll those sessions for the given timeout

Parameters:
timeout - milliseconds before the call timeout if no event appear
Returns:
true if at least a session is ready for read or for write
Throws:
Exception - if some low level IO error occurs

isSelectorEmpty

protected abstract boolean isSelectorEmpty()
Say if the list of IoSession polled by this IoProcessor is empty

Returns:
true if at least a session is managed by this IoProcessor

wakeup

protected abstract void wakeup()
Interrupt the {@link AbstractPollingIoProcessor#select(int) call.


allSessions

protected abstract Iterator<T> allSessions()
Get an Iterator for the list of IoSession polled by this IoProcessor

Returns:
Iterator of IoSession

selectedSessions

protected abstract Iterator<T> selectedSessions()
Get an Iterator for the list of IoSession found selected by the last call of {@link AbstractPollingIoProcessor#select(int)

Returns:
Iterator of IoSession read for I/Os operation

state

protected abstract AbstractPollingIoProcessor.SessionState state(T session)
Get the sate of a session (preparing, open, closed)

Parameters:
session - the IoSession to inspect
Returns:
the state of the session

isWritable

protected abstract boolean isWritable(T session)
Is the session ready for writing

Parameters:
session - the session queried
Returns:
true is ready, false if not ready

isReadable

protected abstract boolean isReadable(T session)
Is the session ready for reading

Parameters:
session - the session queried
Returns:
true is ready, false if not ready

setInterestedInWrite

protected abstract void setInterestedInWrite(T session,
                                             boolean interested)
                                      throws Exception
register a session for writing

Parameters:
session - the session registered
interested - true for registering, false for removing
Throws:
Exception

setInterestedInRead

protected abstract void setInterestedInRead(T session,
                                            boolean interested)
                                     throws Exception
register a session for reading

Parameters:
session - the session registered
interested - true for registering, false for removing
Throws:
Exception

isInterestedInRead

protected abstract boolean isInterestedInRead(T session)
is this session registered for reading

Parameters:
session - the session queried
Returns:
true is registered for reading

isInterestedInWrite

protected abstract boolean isInterestedInWrite(T session)
is this session registered for writing

Parameters:
session - the session queried
Returns:
true is registered for writing

init

protected abstract void init(T session)
                      throws Exception
Initialize the polling of a session. Add it to the polling process.

Parameters:
session - the IoSession to add to the polling
Throws:
Exception - any exception thrown by the underlying system calls

destroy

protected abstract void destroy(T session)
                         throws Exception
Destroy the underlying client socket handle

Parameters:
session - the IoSession
Throws:
Exception - any exception thrown by the underlying system calls

read

protected abstract int read(T session,
                            IoBuffer buf)
                     throws Exception
Reads a sequence of bytes from a IoSession into the given IoBuffer. Is called when the session was found ready for reading.

Parameters:
session - the session to read
buf - the buffer to fill
Returns:
the number of bytes read
Throws:
Exception - any exception thrown by the underlying system calls

write

protected abstract int write(T session,
                             IoBuffer buf,
                             int length)
                      throws Exception
Write a sequence of bytes to a IoSession, means to be called when a session was found ready for writing.

Parameters:
session - the session to write
buf - the buffer to write
length - the number of bytes to write can be superior to the number of bytes remaining in the buffer
Returns:
the number of byte written
Throws:
Exception - any exception thrown by the underlying system calls

transferFile

protected abstract int transferFile(T session,
                                    FileRegion region,
                                    int length)
                             throws Exception
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.

Parameters:
session - the session to write
region - the file region to write
length - the length of the portion to send
Returns:
the number of written bytes
Throws:
Exception - any exception thrown by the underlying system calls

add

public final 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.

Specified by:
add in interface IoProcessor<T extends AbstractIoSession>

remove

public final 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.

Specified by:
remove in interface IoProcessor<T extends AbstractIoSession>

flush

public final void flush(T session)
Flushes the internal write request queue of the specified session.

Specified by:
flush in interface IoProcessor<T extends AbstractIoSession>

updateTrafficMask

public final void updateTrafficMask(T session)
Controls the traffic of the specified session as specified in IoSession.getTrafficMask().

Specified by:
updateTrafficMask in interface IoProcessor<T extends AbstractIoSession>


Copyright © 2004-2008 Apache MINA Project. All Rights Reserved.