# 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
  Modifier and Type
  Field
  Description
  `protected final XByteBuffer`
  `ackbuf`
  `protected boolean`
  `complete`
  `protected boolean`
  `connecting`
  `protected byte[]`
  `current`
  `protected DatagramChannel`
  `dataChannel`
  `protected ByteBuffer`
  `readbuf`
  `protected int`
  `remaining`
  `protected Selector`
  `selector`
  `protected static final StringManager`
  `sm`
  `protected SocketChannel`
  `socketChannel`
  `protected ByteBuffer`
  `writebuf`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `NioSender()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `connect()`
  Connect.
  `void`
  `disconnect()`
  Disconnect.
  `byte[]`
  `getMessage()`
  `Selector`
  `getSelector()`
  `boolean`
  `isComplete()`
  `boolean`
  `process(SelectionKey key, boolean waitForAck)`
  State machine to send data.
  `protected boolean`
  `read()`
  `void`
  `reset()`
  `void`
  `setComplete(boolean complete)`
  `void`
  `setMessage(byte[] data)`
  Send message.
  `void`
  `setMessage(byte[] data, int offset, int length)`
  `void`
  `setSelector(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 Details

  - ### sm

    protected static final StringManager sm

  - ### selector

    protected Selector selector

  - ### socketChannel

    protected SocketChannel socketChannel

  - ### dataChannel

    protected DatagramChannel dataChannel

  - ### readbuf

    protected ByteBuffer readbuf

  - ### writebuf

    protected 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 Details

  - ### NioSender

    public NioSender()

- ## Method Details

  - ### process

    public boolean process(SelectionKey key, boolean waitForAck) throws 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:
      `IOException` - An IO error occurred

  - ### read

    protected boolean read() throws IOException
    Throws:
      `IOException`

  - ### write

    protected boolean write() throws IOException
    Throws:
      `IOException`

  - ### connect

    public void connect() throws IOException
    Description copied from interface: `DataSender`
    Connect.
    Throws:
      `IOException` - when an error occurs

  - ### disconnect

    public void disconnect()
    Description copied from interface: `DataSender`
    Disconnect.

  - ### reset

    public void reset()

  - ### setMessage

    public void setMessage(byte[] data) throws IOException
    Send message.
    Parameters:
      `data` - ChannelMessage
    Throws:
      `IOException` - if an error occurs

  - ### setMessage

    public void setMessage(byte[] data, int offset, int length) throws IOException
    Throws:
      `IOException`

  - ### getMessage

    public byte[] getMessage()

  - ### isComplete

    public boolean isComplete()

  - ### getSelector

    public Selector getSelector()

  - ### setSelector

    public void setSelector(Selector selector)

  - ### setComplete

    public void setComplete(boolean complete)