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
Thread-safety / synchronisation is managed by ParallelNioSender
  • Field Details

    • sm

      protected static final StringManager sm
      String manager for this class.
    • selector

      protected Selector selector
      The NIO selector for multiplexing channels.
    • socketChannel

      protected SocketChannel socketChannel
      The TCP socket channel.
    • dataChannel

      protected DatagramChannel dataChannel
      The UDP datagram channel.
    • readbuf

      protected ByteBuffer readbuf
      Buffer for reading from the channel.
    • writebuf

      protected ByteBuffer writebuf
      Buffer for writing to the channel.
    • current

      protected volatile byte[] current
      Current message being processed.
    • ackbuf

      protected final XByteBuffer ackbuf
      Acknowledgment buffer.
    • remaining

      protected int remaining
      Number of remaining bytes to send.
    • complete

      protected boolean complete
      Flag indicating send completion.
    • connecting

      protected boolean connecting
      Flag indicating connection in progress.
  • Constructor Details

    • NioSender

      public NioSender()
      Default constructor.
  • 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
      Reads acknowledgment data from the channel.
      Returns:
      true if there is more data to read
      Throws:
      IOException - If an I/O error occurs
    • write

      protected boolean write() throws IOException
      Writes the current message to the channel.
      Returns:
      true if the message was fully written
      Throws:
      IOException - If an I/O error occurs
    • 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()
      Resets the sender state for reuse.
    • 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
      Sets the message to be sent.
      Parameters:
      data - The message data
      offset - The offset in the data array
      length - The length of the data to send
      Throws:
      IOException - If an I/O error occurs
    • getMessage

      public byte[] getMessage()
      Returns the current message being sent.
      Returns:
      the current message byte array
    • isComplete

      public boolean isComplete()
      Checks if the send operation is complete.
      Returns:
      true if the send is complete
    • getSelector

      public Selector getSelector()
      Returns the NIO selector.
      Returns:
      the selector
    • setSelector

      public void setSelector(Selector selector)
      Sets the NIO selector.
      Parameters:
      selector - the selector
    • setComplete

      public void setComplete(boolean complete)
      Sets the completion flag.
      Parameters:
      complete - the completion status