Package org.apache.hc.core5.reactor
Class IOSessionImpl
- java.lang.Object
-
- org.apache.hc.core5.reactor.IOSessionImpl
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,java.nio.channels.ByteChannel,java.nio.channels.Channel,java.nio.channels.ReadableByteChannel,java.nio.channels.WritableByteChannel,SocketModalCloseable,ModalCloseable,IOSession,Identifiable
class IOSessionImpl extends java.lang.Object implements IOSession
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.hc.core5.reactor.IOSession
IOSession.Status
-
-
Field Summary
Fields Modifier and Type Field Description private java.nio.channels.SocketChannelchannelprivate java.util.Deque<Command>commandQueueprivate static java.util.concurrent.atomic.AtomicLongCOUNTCounts instances created.private java.util.concurrent.atomic.AtomicReference<IOEventHandler>handlerRefprivate java.lang.Stringidprivate java.nio.channels.SelectionKeykeyprivate longlastEventTimeprivate longlastReadTimeprivate longlastWriteTimeprivate java.util.concurrent.locks.Locklockprivate TimeoutsocketTimeoutprivate java.util.concurrent.atomic.AtomicReference<IOSession.Status>status
-
Constructor Summary
Constructors Constructor Description IOSessionImpl(java.lang.String type, java.nio.channels.SelectionKey key, java.nio.channels.SocketChannel socketChannel)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.nio.channels.ByteChannelchannel()Returns the underlying I/O channel associated with this session.voidclearEvent(int op)Clears interest in a particular I/O event type by updating the event mask associated with the session.voidclose()Terminates the session gracefully and closes the underlying I/O channel.voidclose(CloseMode closeMode)Closes this process or endpoint and releases any system resources associated with it.voidenqueue(Command command, Command.Priority priority)InsertsCommandat the end of the command queue.private static voidformatOps(java.lang.StringBuilder buffer, int ops)intgetEventMask()Returns mask of I/O evens this session declared interest in.IOEventHandlergetHandler()Returns event handler associated with the session.java.lang.StringgetId()longgetLastEventTime()Returns timestamp of the last I/O event including socket timeout reset.longgetLastReadTime()Returns timestamp of the last read event.longgetLastWriteTime()Returns timestamp of the last write event.java.net.SocketAddressgetLocalAddress()Returns local address.java.util.concurrent.locks.LockgetLock()Returns session lock that should be used by I/O event handlers to synchronize access to the session.java.net.SocketAddressgetRemoteAddress()Returns address of the remote peer.TimeoutgetSocketTimeout()Returns value of the socket timeout in milliseconds.IOSession.StatusgetStatus()Returns status of the session:booleanhasCommands()Tests if there enqueued commands pending execution.booleanisOpen()private booleanisStatusClosed()Commandpoll()Removes firstCommandfrom the command queue if available.intread(java.nio.ByteBuffer dst)voidsetEvent(int op)Declares interest in a particular I/O event type by updating the event mask associated with the session.voidsetEventMask(int newValue)Declares interest in I/O event notifications by setting the event mask associated with the sessionvoidsetSocketTimeout(Timeout timeout)Sets value of the socket timeout in milliseconds.java.lang.StringtoString()voidupdateReadTime()Updates the timestamp of the last read eventvoidupdateWriteTime()Updates the timestamp of the last write eventvoidupgrade(IOEventHandler handler)Upgrades event handler associated with the session.intwrite(java.nio.ByteBuffer src)
-
-
-
Field Detail
-
COUNT
private static final java.util.concurrent.atomic.AtomicLong COUNT
Counts instances created.
-
key
private final java.nio.channels.SelectionKey key
-
channel
private final java.nio.channels.SocketChannel channel
-
commandQueue
private final java.util.Deque<Command> commandQueue
-
lock
private final java.util.concurrent.locks.Lock lock
-
id
private final java.lang.String id
-
handlerRef
private final java.util.concurrent.atomic.AtomicReference<IOEventHandler> handlerRef
-
status
private final java.util.concurrent.atomic.AtomicReference<IOSession.Status> status
-
socketTimeout
private volatile Timeout socketTimeout
-
lastReadTime
private volatile long lastReadTime
-
lastWriteTime
private volatile long lastWriteTime
-
lastEventTime
private volatile long lastEventTime
-
-
Method Detail
-
getId
public java.lang.String getId()
- Specified by:
getIdin interfaceIdentifiable
-
getHandler
public IOEventHandler getHandler()
Description copied from interface:IOSessionReturns event handler associated with the session.- Specified by:
getHandlerin interfaceIOSession
-
upgrade
public void upgrade(IOEventHandler handler)
Description copied from interface:IOSessionUpgrades event handler associated with the session.
-
getLock
public java.util.concurrent.locks.Lock getLock()
Description copied from interface:IOSessionReturns session lock that should be used by I/O event handlers to synchronize access to the session.
-
enqueue
public void enqueue(Command command, Command.Priority priority)
Description copied from interface:IOSessionInsertsCommandat the end of the command queue.
-
hasCommands
public boolean hasCommands()
Description copied from interface:IOSessionTests if there enqueued commands pending execution.- Specified by:
hasCommandsin interfaceIOSession
-
poll
public Command poll()
Description copied from interface:IOSessionRemoves firstCommandfrom the command queue if available.
-
channel
public java.nio.channels.ByteChannel channel()
Description copied from interface:IOSessionReturns the underlying I/O channel associated with this session.
-
getLocalAddress
public java.net.SocketAddress getLocalAddress()
Description copied from interface:IOSessionReturns local address.- Specified by:
getLocalAddressin interfaceIOSession- Returns:
- socket address.
-
getRemoteAddress
public java.net.SocketAddress getRemoteAddress()
Description copied from interface:IOSessionReturns address of the remote peer.- Specified by:
getRemoteAddressin interfaceIOSession- Returns:
- socket address.
-
getEventMask
public int getEventMask()
Description copied from interface:IOSessionReturns mask of I/O evens this session declared interest in.- Specified by:
getEventMaskin interfaceIOSession- Returns:
- I/O event mask.
-
setEventMask
public void setEventMask(int newValue)
Description copied from interface:IOSessionDeclares interest in I/O event notifications by setting the event mask associated with the session- Specified by:
setEventMaskin interfaceIOSession- Parameters:
newValue- new I/O event mask.
-
setEvent
public void setEvent(int op)
Description copied from interface:IOSessionDeclares interest in a particular I/O event type by updating the event mask associated with the session.
-
clearEvent
public void clearEvent(int op)
Description copied from interface:IOSessionClears interest in a particular I/O event type by updating the event mask associated with the session.- Specified by:
clearEventin interfaceIOSession- Parameters:
op- I/O event type.
-
getSocketTimeout
public Timeout getSocketTimeout()
Description copied from interface:IOSessionReturns value of the socket timeout in milliseconds. The value of0signifies the session cannot time out.- Specified by:
getSocketTimeoutin interfaceIOSession- Specified by:
getSocketTimeoutin interfaceSocketModalCloseable- Returns:
- socket timeout.
-
setSocketTimeout
public void setSocketTimeout(Timeout timeout)
Description copied from interface:IOSessionSets value of the socket timeout in milliseconds. The value of0signifies the session cannot time out.Please note this operation may affect the last event time.
- Specified by:
setSocketTimeoutin interfaceIOSession- Specified by:
setSocketTimeoutin interfaceSocketModalCloseable- Parameters:
timeout- socket timeout.- See Also:
IOSession.getLastEventTime()
-
read
public int read(java.nio.ByteBuffer dst) throws java.io.IOException- Specified by:
readin interfacejava.nio.channels.ReadableByteChannel- Throws:
java.io.IOException
-
write
public int write(java.nio.ByteBuffer src) throws java.io.IOException- Specified by:
writein interfacejava.nio.channels.WritableByteChannel- Throws:
java.io.IOException
-
updateReadTime
public void updateReadTime()
Description copied from interface:IOSessionUpdates the timestamp of the last read event- Specified by:
updateReadTimein interfaceIOSession
-
updateWriteTime
public void updateWriteTime()
Description copied from interface:IOSessionUpdates the timestamp of the last write event- Specified by:
updateWriteTimein interfaceIOSession
-
getLastReadTime
public long getLastReadTime()
Description copied from interface:IOSessionReturns timestamp of the last read event.- Specified by:
getLastReadTimein interfaceIOSession- Returns:
- timestamp.
-
getLastWriteTime
public long getLastWriteTime()
Description copied from interface:IOSessionReturns timestamp of the last write event.- Specified by:
getLastWriteTimein interfaceIOSession- Returns:
- timestamp.
-
getLastEventTime
public long getLastEventTime()
Description copied from interface:IOSessionReturns timestamp of the last I/O event including socket timeout reset.- Specified by:
getLastEventTimein interfaceIOSession- Returns:
- timestamp.
- See Also:
IOSession.getSocketTimeout()
-
getStatus
public IOSession.Status getStatus()
Description copied from interface:IOSessionReturns status of the session:IOSession.Status.ACTIVE: session is active.IOSession.Status.CLOSING: session is being closed.IOSession.Status.CLOSED: session has been terminated.
-
isStatusClosed
private boolean isStatusClosed()
-
isOpen
public boolean isOpen()
- Specified by:
isOpenin interfacejava.nio.channels.Channel
-
close
public void close()
Description copied from interface:IOSessionTerminates the session gracefully and closes the underlying I/O channel. This method ensures that session termination handshake, such as the one used by the SSL/TLS protocol, is correctly carried out.
-
close
public void close(CloseMode closeMode)
Description copied from interface:ModalCloseableCloses this process or endpoint and releases any system resources associated with it. If the endpoint or the process is already closed then invoking this method has no effect.- Specified by:
closein interfaceModalCloseable- Parameters:
closeMode- How to close the receiver.
-
formatOps
private static void formatOps(java.lang.StringBuilder buffer, int ops)
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-