Package org.apache.catalina.tribes.transport.nio

## Class NioSender

- java.lang.Object
- - org.apache.catalina.tribes.transport.AbstractSender
  - - org.apache.catalina.tribes.transport.nio.NioSender

All Implemented Interfaces:
  `DataSender`

    public class NioSender
    extends AbstractSender

This class is NOT thread safe and should never be used with more than one thread at a time This is a state machine, handled by the process method States are: - NOT_CONNECTED -> connect() -> CONNECTED - CONNECTED -> setMessage() -> READY TO WRITE - READY_TO_WRITE -> write() -> READY TO WRITE | READY TO READ - READY_TO_READ -> read() -> READY_TO_READ | TRANSFER_COMPLETE - TRANSFER_COMPLETE -> CONNECTED

### Field Summary

Fields
`protected XByteBuffer` `ackbuf`
`protected boolean` `complete`
`protected boolean` `connecting`
`protected byte[]` `current`
`protected java.nio.channels.DatagramChannel` `dataChannel`
`protected java.nio.ByteBuffer` `readbuf`
`protected int` `remaining`
`protected java.nio.channels.Selector` `selector`
`protected static StringManager` `sm`
`protected java.nio.channels.SocketChannel` `socketChannel`
`protected java.nio.ByteBuffer` `writebuf`

### Constructor Summary

Constructors
`NioSender()`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `connect()` connect - blocking in this operation
`void` `disconnect()` disconnect TODO Implement this org.apache.catalina.tribes.transport.IDataSender method
`byte[]` `getMessage()`
`java.nio.channels.Selector` `getSelector()`
`boolean` `isComplete()`
`boolean` `process​(java.nio.channels.SelectionKey key, boolean waitForAck)` State machine to send data.
`protected boolean` `read()`
`void` `reset()`
`void` `setComplete​(boolean complete)`
`void` `setMessage​(byte[] data)` sendMessage
`void` `setMessage​(byte[] data, int offset, int length)`
`void` `setSelector​(java.nio.channels.Selector selector)`
`protected boolean` `write()`

### Methods inherited from class org.apache.catalina.tribes.transport.AbstractSender

`getAddress, getAttempt, getConnectTime, getDestination, getDirectBuffer, getKeepAliveCount, getKeepAliveTime, getMaxRetryAttempts, getOoBInline, getPort, getRequestCount, getRxBufSize, getSoKeepAlive, getSoLingerOn, getSoLingerTime, getSoReuseAddress, getSoTrafficClass, getTcpNoDelay, getThrowOnFailedAck, getTimeout, getTxBufSize, getUdpPort, getUdpRxBufSize, getUdpTxBufSize, isConnected, isUdpBased, keepalive, setAddress, setAttempt, setConnected, setConnectTime, setDestination, setDirectBuffer, setKeepAliveCount, setKeepAliveTime, setMaxRetryAttempts, setOoBInline, setPort, setRequestCount, setRxBufSize, setSoKeepAlive, setSoLingerOn, setSoLingerTime, setSoReuseAddress, setSoTrafficClass, setTcpNoDelay, setThrowOnFailedAck, setTimeout, setTxBufSize, setUdpBased, setUdpPort, setUdpRxBufSize, setUdpTxBufSize, transferProperties`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### sm

    protected static final StringManager sm

#### selector

    protected java.nio.channels.Selector selector

#### socketChannel

    protected java.nio.channels.SocketChannel socketChannel

#### dataChannel

    protected java.nio.channels.DatagramChannel dataChannel

#### readbuf

    protected java.nio.ByteBuffer readbuf

#### writebuf

    protected java.nio.ByteBuffer writebuf

#### current

    protected volatile byte[] current

#### ackbuf

    protected final XByteBuffer ackbuf

#### remaining

    protected int remaining

#### complete

    protected boolean complete

#### connecting

    protected boolean connecting

### Constructor Detail

#### NioSender

    public NioSender()

### Method Detail

#### process

    public boolean process​(java.nio.channels.SelectionKey key,
                           boolean waitForAck)
                    throws java.io.IOException

State machine to send data.

Parameters:
  `key` - The key to use
  `waitForAck` - Wait for an ack
Returns:
  `true` if the processing was successful
Throws:
  `java.io.IOException` - An IO error occurred

#### read

    protected boolean read()
                    throws java.io.IOException

Throws:
  `java.io.IOException`

#### write

    protected boolean write()
                     throws java.io.IOException

Throws:
  `java.io.IOException`

#### connect

    public void connect()
                 throws java.io.IOException

connect - blocking in this operation

Specified by:
  `connect` in interface `DataSender`
Specified by:
  `connect` in class `AbstractSender`
Throws:
  `java.io.IOException` - TODO Implement this org.apache.catalina.tribes.transport.IDataSender method

#### disconnect

    public void disconnect()

disconnect TODO Implement this org.apache.catalina.tribes.transport.IDataSender method

Specified by:
  `disconnect` in interface `DataSender`
Specified by:
  `disconnect` in class `AbstractSender`

#### reset

    public void reset()

#### setMessage

    public void setMessage​(byte[] data)
                    throws java.io.IOException

sendMessage

Parameters:
  `data` - ChannelMessage
Throws:
  `java.io.IOException` - TODO Implement this org.apache.catalina.tribes.transport.IDataSender method

#### setMessage

    public void setMessage​(byte[] data,
                           int offset,
                           int length)
                    throws java.io.IOException

Throws:
  `java.io.IOException`

#### getMessage

    public byte[] getMessage()

#### isComplete

    public boolean isComplete()

#### getSelector

    public java.nio.channels.Selector getSelector()

#### setSelector

    public void setSelector​(java.nio.channels.Selector selector)

#### setComplete

    public void setComplete​(boolean complete)