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
    Modifier and Type | Field | Description
    --- | --- | ---
    `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
    Constructor | Description
    --- | ---
    `NioSender()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `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)