public abstract class AbstractIoSession extends java.lang.Object implements IoSession
IoSession
.Modifier and Type | Field and Description |
---|---|
protected IoSessionConfig |
config
The session config
|
Modifier | Constructor and Description |
---|---|
protected |
AbstractIoSession(IoService service)
TODO Add method documentation
|
Modifier and Type | Method and Description |
---|---|
CloseFuture |
close()
Closes this session after all queued write requests
are flushed.
|
CloseFuture |
close(boolean rightNow)
Closes this session immediately or after all queued write requests
are flushed.
|
boolean |
containsAttribute(java.lang.Object key)
Returns true if this session contains the attribute with
the specified key.
|
void |
decreaseReadBufferSize()
TODO Add method documentation
|
void |
decreaseScheduledBytesAndMessages(WriteRequest request)
TODO Add method documentation
|
boolean |
equals(java.lang.Object o)
TODO This is a ridiculous implementation.
|
java.lang.Object |
getAttachment()
Returns an attachment of this session.
|
java.lang.Object |
getAttribute(java.lang.Object key)
Returns the value of the user-defined attribute of this session.
|
java.lang.Object |
getAttribute(java.lang.Object key,
java.lang.Object defaultValue)
Returns the value of user defined attribute associated with the
specified key.
|
java.util.Set<java.lang.Object> |
getAttributeKeys()
Returns the set of keys of all user-defined attributes.
|
IoSessionAttributeMap |
getAttributeMap()
TODO Add method documentation
|
int |
getBothIdleCount()
Returns the number of the fired continuous sessionIdle events
for
IdleStatus.BOTH_IDLE . |
CloseFuture |
getCloseFuture()
Returns the
CloseFuture of this session. |
IoSessionConfig |
getConfig() |
long |
getCreationTime() |
java.lang.Object |
getCurrentWriteMessage()
Returns the message which is being written by
IoService . |
WriteRequest |
getCurrentWriteRequest()
Returns the
WriteRequest which is being processed by
IoService . |
IoHandler |
getHandler() |
long |
getId()
We use an AtomicLong to guarantee that the session ID are unique.
|
int |
getIdleCount(IdleStatus status)
Returns the number of the fired continuous sessionIdle events
for the specified
IdleStatus . |
long |
getLastBothIdleTime()
Returns the time in milliseconds when the last sessionIdle event
is fired for
IdleStatus.BOTH_IDLE . |
long |
getLastIdleTime(IdleStatus status)
Returns the time in milliseconds when the last sessionIdle event
is fired for the specified
IdleStatus . |
long |
getLastIoTime()
Returns the time in millis when I/O occurred lastly.
|
long |
getLastReaderIdleTime()
Returns the time in milliseconds when the last sessionIdle event
is fired for
IdleStatus.READER_IDLE . |
long |
getLastReadTime()
Returns the time in millis when read operation occurred lastly.
|
long |
getLastWriterIdleTime()
Returns the time in milliseconds when the last sessionIdle event
is fired for
IdleStatus.WRITER_IDLE . |
long |
getLastWriteTime()
Returns the time in millis when write operation occurred lastly.
|
abstract IoProcessor |
getProcessor() |
long |
getReadBytes()
Returns the total number of bytes which were read from this session.
|
double |
getReadBytesThroughput()
Returns the number of read bytes per second.
|
int |
getReaderIdleCount()
Returns the number of the fired continuous sessionIdle events
for
IdleStatus.READER_IDLE . |
long |
getReadMessages()
Returns the total number of messages which were read and decoded from this session.
|
double |
getReadMessagesThroughput()
Returns the number of read messages per second.
|
long |
getScheduledWriteBytes()
Returns the number of bytes which are scheduled to be written to this
session.
|
int |
getScheduledWriteMessages()
Returns the number of messages which are scheduled to be written to this session.
|
IoService |
getService() |
java.net.SocketAddress |
getServiceAddress()
Returns the socket address of the
IoService listens to to manage
this session. |
WriteRequestQueue |
getWriteRequestQueue()
TODO Add method documentation
|
int |
getWriterIdleCount()
Returns the number of the fired continuous sessionIdle events
for
IdleStatus.WRITER_IDLE . |
long |
getWrittenBytes()
Returns the total number of bytes which were written to this session.
|
double |
getWrittenBytesThroughput()
Returns the number of written bytes per second.
|
long |
getWrittenMessages()
Returns the total number of messages which were written and encoded by this session.
|
double |
getWrittenMessagesThroughput()
Returns the number of written messages per second.
|
int |
hashCode() |
void |
increaseIdleCount(IdleStatus status,
long currentTime)
TODO Add method documentation
|
void |
increaseReadBufferSize()
TODO Add method documentation
|
void |
increaseReadBytes(long increment,
long currentTime)
TODO Add method documentation
|
void |
increaseReadMessages(long currentTime)
TODO Add method documentation
|
void |
increaseScheduledWriteBytes(int increment)
TODO Add method documentation
|
void |
increaseScheduledWriteMessages()
TODO Add method documentation
|
void |
increaseWrittenBytes(int increment,
long currentTime)
TODO Add method documentation
|
void |
increaseWrittenMessages(WriteRequest request,
long currentTime)
TODO Add method documentation
|
boolean |
isBothIdle()
Returns
true if this session is IdleStatus.BOTH_IDLE . |
boolean |
isClosing()
Returns
true if and only if this session is being closed
(but not disconnected yet) or is closed. |
boolean |
isConnected()
Returns
true if this session is connected with remote peer. |
boolean |
isIdle(IdleStatus status)
Returns
true if this session is idle for the specified
IdleStatus . |
boolean |
isReaderIdle()
Returns
true if this session is IdleStatus.READER_IDLE . |
boolean |
isReadSuspended()
Is read operation is suspended for this session.
|
boolean |
isScheduledForFlush()
Tells if the session is scheduled for flushed
|
boolean |
isWriterIdle()
Returns
true if this session is IdleStatus.WRITER_IDLE . |
boolean |
isWriteSuspended()
Is write operation is suspended for this session.
|
static void |
notifyIdleness(java.util.Iterator<? extends IoSession> sessions,
long currentTime)
Fires a
IoEventType.SESSION_IDLE event to any applicable sessions
in the specified collection. |
static void |
notifyIdleSession(IoSession session,
long currentTime)
Fires a
IoEventType.SESSION_IDLE event if applicable for the
specified session . |
void |
offerClosedReadFuture()
TODO Add method documentation
|
void |
offerFailedReadFuture(java.lang.Throwable exception)
TODO Add method documentation
|
void |
offerReadFuture(java.lang.Object message)
TODO Add method documentation
|
ReadFuture |
read()
TODO This javadoc is wrong.
|
java.lang.Object |
removeAttribute(java.lang.Object key)
Removes a user-defined attribute with the specified key.
|
boolean |
removeAttribute(java.lang.Object key,
java.lang.Object value)
Removes a user defined attribute with the specified key if the current
attribute value is equal to the specified value.
|
boolean |
replaceAttribute(java.lang.Object key,
java.lang.Object oldValue,
java.lang.Object newValue)
Replaces a user defined attribute with the specified key if the
value of the attribute is equals to the specified old value.
|
void |
resumeRead()
Resumes read operations for this session.
|
void |
resumeWrite()
Resumes write operations for this session.
|
void |
scheduledForFlush()
Schedule the session for flushed
|
java.lang.Object |
setAttachment(java.lang.Object attachment)
Sets an attachment of this session.
|
java.lang.Object |
setAttribute(java.lang.Object key)
Sets a user defined attribute without a value.
|
java.lang.Object |
setAttribute(java.lang.Object key,
java.lang.Object value)
Sets a user-defined attribute.
|
java.lang.Object |
setAttributeIfAbsent(java.lang.Object key)
Sets a user defined attribute without a value if the attribute with
the specified key is not set yet.
|
java.lang.Object |
setAttributeIfAbsent(java.lang.Object key,
java.lang.Object value)
Sets a user defined attribute if the attribute with the specified key
is not set yet.
|
void |
setAttributeMap(IoSessionAttributeMap attributes)
TODO Add method documentation
|
void |
setCurrentWriteRequest(WriteRequest currentWriteRequest)
TODO setWriteRequestQueue.
|
boolean |
setScheduledForFlush(boolean schedule)
Set the scheduledForFLush flag.
|
protected void |
setScheduledWriteBytes(int byteCount)
TODO Add method documentation
|
protected void |
setScheduledWriteMessages(int messages)
TODO Add method documentation
|
void |
setWriteRequestQueue(WriteRequestQueue writeRequestQueue)
Create a new close aware write queue, based on the given write queue.
|
void |
suspendRead()
Suspends read operations for this session.
|
void |
suspendWrite()
Suspends write operations for this session.
|
java.lang.String |
toString() |
void |
unscheduledForFlush()
Change the session's status : it's not anymore scheduled for flush
|
void |
updateThroughput(long currentTime,
boolean force)
Update all statistical properties related with throughput assuming
the specified time is the current time.
|
WriteFuture |
write(java.lang.Object message)
Writes the specified
message to remote peer. |
WriteFuture |
write(java.lang.Object message,
java.net.SocketAddress remoteAddress)
(Optional) Writes the specified message to the specified destination.
|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
getFilterChain, getLocalAddress, getRemoteAddress, getTransportMetadata
protected IoSessionConfig config
protected AbstractIoSession(IoService service)
public final long getId()
getId
in interface IoSession
public abstract IoProcessor getProcessor()
public final boolean isConnected()
true
if this session is connected with remote peer.isConnected
in interface IoSession
public final boolean isClosing()
true if and only if this session is being closed
(but not disconnected yet) or is closed.
public final CloseFuture getCloseFuture()
CloseFuture
of this session. This method returns
the same instance whenever user calls it.getCloseFuture
in interface IoSession
public final boolean isScheduledForFlush()
true
- if the session is scheduled for flushpublic final void scheduledForFlush()
public final void unscheduledForFlush()
public final boolean setScheduledForFlush(boolean schedule)
schedule
- the new value to set if not already set.public final CloseFuture close(boolean rightNow)
CloseFuture
if you want to wait for the session actually closed.close
in interface IoSession
rightNow
- true
to close this session immediately
(i.e. IoSession.close()
). The pending write requests
will simply be discarded.
false
to close this session after all queued
write requests are flushed (i.e. #closeOnFlush()
).public final CloseFuture close()
CloseFuture
if you want to wait for the session actually closed.public IoHandler getHandler()
getHandler
in interface IoSession
IoHandler
which handles this session.public IoSessionConfig getConfig()
public final ReadFuture read()
read
in interface IoSession
ReadFuture
which is notified when a new message is
received, the connection is closed or an exception is caught. This
operation is especially useful when you implement a client application.
TODO : Describe here how we enable this feature.
However, please note that this operation is disabled by default and
throw IllegalStateException
because all received events must be
queued somewhere to support this operation, possibly leading to memory
leak. This means you have to keep calling IoSession.read()
once you
enabled this operation. To enable this operation, please call
IoSessionConfig.setUseReadOperation(boolean)
with true.public final void offerReadFuture(java.lang.Object message)
public final void offerFailedReadFuture(java.lang.Throwable exception)
public final void offerClosedReadFuture()
public WriteFuture write(java.lang.Object message)
message
to remote peer. This
operation is asynchronous; IoHandler.messageSent(IoSession,Object)
will be invoked when the message is actually sent to remote peer.
You can also wait for the returned WriteFuture
if you want
to wait for the message actually written.public WriteFuture write(java.lang.Object message, java.net.SocketAddress remoteAddress)
IoHandler.messageSent(IoSession, Object)
will be invoked when the message is actually sent to remote peer. You can
also wait for the returned WriteFuture
if you want to wait for
the message actually written.
When you implement a client that receives a broadcast message from a server
such as DHCP server, the client might need to send a response message for the
broadcast message the server sent. Because the remote address of the session
is not the address of the server in case of broadcasting, there should be a
way to specify the destination when you write the response message.
This interface provides IoSession.write(Object, SocketAddress)
method so you
can specify the destination.
public final java.lang.Object getAttachment()
getAttachment
in interface IoSession
public final java.lang.Object setAttachment(java.lang.Object attachment)
setAttachment
in interface IoSession
public final java.lang.Object getAttribute(java.lang.Object key)
getAttribute
in interface IoSession
key
- the key of the attributepublic final java.lang.Object getAttribute(java.lang.Object key, java.lang.Object defaultValue)
if (containsAttribute(key)) { return getAttribute(key); } else { setAttribute(key, defaultValue); return defaultValue; }
getAttribute
in interface IoSession
public final java.lang.Object setAttribute(java.lang.Object key, java.lang.Object value)
setAttribute
in interface IoSession
key
- the key of the attributevalue
- the value of the attributepublic final java.lang.Object setAttribute(java.lang.Object key)
Boolean.TRUE
.setAttribute
in interface IoSession
key
- the key of the attributepublic final java.lang.Object setAttributeIfAbsent(java.lang.Object key, java.lang.Object value)
if (containsAttribute(key)) { return getAttribute(key); } else { return setAttribute(key, value); }
setAttributeIfAbsent
in interface IoSession
public final java.lang.Object setAttributeIfAbsent(java.lang.Object key)
Boolean.TRUE
.
This method is same with the following code except that the operation
is performed atomically.
if (containsAttribute(key)) { return getAttribute(key); // might not always be Boolean.TRUE. } else { return setAttribute(key); }
setAttributeIfAbsent
in interface IoSession
public final java.lang.Object removeAttribute(java.lang.Object key)
removeAttribute
in interface IoSession
public final boolean removeAttribute(java.lang.Object key, java.lang.Object value)
if (containsAttribute(key) && getAttribute(key).equals(value)) { removeAttribute(key); return true; } else { return false; }
removeAttribute
in interface IoSession
public final boolean replaceAttribute(java.lang.Object key, java.lang.Object oldValue, java.lang.Object newValue)
if (containsAttribute(key) && getAttribute(key).equals(oldValue)) { setAttribute(key, newValue); return true; } else { return false; }
replaceAttribute
in interface IoSession
public final boolean containsAttribute(java.lang.Object key)
containsAttribute
in interface IoSession
public final java.util.Set<java.lang.Object> getAttributeKeys()
getAttributeKeys
in interface IoSession
public final IoSessionAttributeMap getAttributeMap()
public final void setAttributeMap(IoSessionAttributeMap attributes)
public final void setWriteRequestQueue(WriteRequestQueue writeRequestQueue)
writeRequestQueue
- The write request queuepublic final void suspendRead()
suspendRead
in interface IoSession
public final void suspendWrite()
suspendWrite
in interface IoSession
public final void resumeRead()
resumeRead
in interface IoSession
public final void resumeWrite()
resumeWrite
in interface IoSession
public boolean isReadSuspended()
isReadSuspended
in interface IoSession
true
if suspendedpublic boolean isWriteSuspended()
isWriteSuspended
in interface IoSession
true
if suspendedpublic final long getReadBytes()
getReadBytes
in interface IoSession
public final long getWrittenBytes()
getWrittenBytes
in interface IoSession
public final long getReadMessages()
getReadMessages
in interface IoSession
public final long getWrittenMessages()
getWrittenMessages
in interface IoSession
public final double getReadBytesThroughput()
getReadBytesThroughput
in interface IoSession
public final double getWrittenBytesThroughput()
getWrittenBytesThroughput
in interface IoSession
public final double getReadMessagesThroughput()
getReadMessagesThroughput
in interface IoSession
public final double getWrittenMessagesThroughput()
getWrittenMessagesThroughput
in interface IoSession
public final void updateThroughput(long currentTime, boolean force)
calculation interval
.
If, however, force is specified as true, this method
updates the throughput properties immediately.updateThroughput
in interface IoSession
currentTime
- the current time in millisecondspublic final long getScheduledWriteBytes()
getScheduledWriteBytes
in interface IoSession
public final int getScheduledWriteMessages()
getScheduledWriteMessages
in interface IoSession
protected void setScheduledWriteBytes(int byteCount)
protected void setScheduledWriteMessages(int messages)
public final void increaseReadBytes(long increment, long currentTime)
public final void increaseReadMessages(long currentTime)
public final void increaseWrittenBytes(int increment, long currentTime)
public final void increaseWrittenMessages(WriteRequest request, long currentTime)
public final void increaseScheduledWriteBytes(int increment)
public final void increaseScheduledWriteMessages()
public final void decreaseScheduledBytesAndMessages(WriteRequest request)
public final WriteRequestQueue getWriteRequestQueue()
getWriteRequestQueue
in interface IoSession
public final WriteRequest getCurrentWriteRequest()
WriteRequest
which is being processed by
IoService
.getCurrentWriteRequest
in interface IoSession
public final java.lang.Object getCurrentWriteMessage()
IoService
.getCurrentWriteMessage
in interface IoSession
public final void setCurrentWriteRequest(WriteRequest currentWriteRequest)
setCurrentWriteRequest
in interface IoSession
public final void increaseReadBufferSize()
public final void decreaseReadBufferSize()
public final long getCreationTime()
getCreationTime
in interface IoSession
public final long getLastIoTime()
getLastIoTime
in interface IoSession
public final long getLastReadTime()
getLastReadTime
in interface IoSession
public final long getLastWriteTime()
getLastWriteTime
in interface IoSession
public final boolean isIdle(IdleStatus status)
true
if this session is idle for the specified
IdleStatus
.public final boolean isBothIdle()
true
if this session is IdleStatus.BOTH_IDLE
.isBothIdle
in interface IoSession
IoSession.isIdle(IdleStatus)
public final boolean isReaderIdle()
true
if this session is IdleStatus.READER_IDLE
.isReaderIdle
in interface IoSession
IoSession.isIdle(IdleStatus)
public final boolean isWriterIdle()
true
if this session is IdleStatus.WRITER_IDLE
.isWriterIdle
in interface IoSession
IoSession.isIdle(IdleStatus)
public final int getIdleCount(IdleStatus status)
IdleStatus
.
If sessionIdle event is fired first after some time after I/O,
idleCount becomes 1. idleCount resets to
0 if any I/O occurs again, otherwise it increases to
2 and so on if sessionIdle event is fired again without
any I/O between two (or more) sessionIdle events.getIdleCount
in interface IoSession
public final long getLastIdleTime(IdleStatus status)
IdleStatus
.getLastIdleTime
in interface IoSession
public final void increaseIdleCount(IdleStatus status, long currentTime)
public final int getBothIdleCount()
IdleStatus.BOTH_IDLE
.getBothIdleCount
in interface IoSession
IoSession.getIdleCount(IdleStatus)
public final long getLastBothIdleTime()
IdleStatus.BOTH_IDLE
.getLastBothIdleTime
in interface IoSession
IoSession.getLastIdleTime(IdleStatus)
public final long getLastReaderIdleTime()
IdleStatus.READER_IDLE
.getLastReaderIdleTime
in interface IoSession
IoSession.getLastIdleTime(IdleStatus)
public final long getLastWriterIdleTime()
IdleStatus.WRITER_IDLE
.getLastWriterIdleTime
in interface IoSession
IoSession.getLastIdleTime(IdleStatus)
public final int getReaderIdleCount()
IdleStatus.READER_IDLE
.getReaderIdleCount
in interface IoSession
IoSession.getIdleCount(IdleStatus)
public final int getWriterIdleCount()
IdleStatus.WRITER_IDLE
.getWriterIdleCount
in interface IoSession
IoSession.getIdleCount(IdleStatus)
public java.net.SocketAddress getServiceAddress()
IoService
listens to to manage
this session. If this session is managed by IoAcceptor
, it
returns the SocketAddress
which is specified as a parameter of
IoAcceptor.bind()
. If this session is managed by
IoConnector
, this method returns the same address with
that of IoSession.getRemoteAddress()
.getServiceAddress
in interface IoSession
public final int hashCode()
hashCode
in class java.lang.Object
public final boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object
public IoService getService()
getService
in interface IoSession
IoService
which provides I/O service to this session.public static void notifyIdleness(java.util.Iterator<? extends IoSession> sessions, long currentTime)
IoEventType.SESSION_IDLE
event to any applicable sessions
in the specified collection.currentTime
- the current time (i.e. System.currentTimeMillis()
)public static void notifyIdleSession(IoSession session, long currentTime)
IoEventType.SESSION_IDLE
event if applicable for the
specified session
.currentTime
- the current time (i.e. System.currentTimeMillis()
)Copyright © 2004-2019 Apache MINA Project. All Rights Reserved.