Package org.apache.catalina.tribes.transport.bio

## Class BioSender

- java.lang.Object
- - org.apache.catalina.tribes.transport.AbstractSender
  - - org.apache.catalina.tribes.transport.bio.BioSender

- All Implemented Interfaces:
    `DataSender`

      public class BioSender
      extends AbstractSender

  Send cluster messages with only one socket. Ack and keep Alive Handling is supported
  Since:
    5.5.16
  Author:
    Peter Rossbach

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected XByteBuffer` | `ackbuf` |
    `protected static StringManager` | `sm` | The string manager for this package.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `BioSender()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected void` | `closeSocket()` | Close socket.
    `void` | `connect()` | Connect other cluster member receiver
    `void` | `disconnect()` | disconnect and close socket
    `protected void` | `openSocket()` | Open real socket and set time out when waitForAck is enabled is socket open return directly.
    `protected void` | `pushMessage​(byte[] data, boolean reconnect, boolean waitForAck)` | Push messages with only one socket at a time Wait for ack is needed and make auto retry when write message is failed.
    `void` | `sendMessage​(byte[] data, boolean waitForAck)` | Send message.
    `java.lang.String` | `toString()` |
    `protected void` | `waitForAck()` | Wait for Acknowledgement from other server.

    - ### 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, wait, wait, wait`

- - ### Field Detail

    - #### sm

          protected static final StringManager sm

      The string manager for this package.

    - #### ackbuf

          protected final XByteBuffer ackbuf

  - ### Constructor Detail

    - #### BioSender

          public BioSender()

  - ### Method Detail

    - #### connect

          public void connect()
                       throws java.io.IOException

      Connect other cluster member receiver
      Specified by:
        `connect` in interface `DataSender`
      Specified by:
        `connect` in class `AbstractSender`
      Throws:
        `java.io.IOException` - TODO Implement this org.apache.catalina.tribes.transport.DataSender method
      See Also:
        `DataSender.connect()`

    - #### disconnect

          public void disconnect()

      disconnect and close socket
      Specified by:
        `disconnect` in interface `DataSender`
      Specified by:
        `disconnect` in class `AbstractSender`
      See Also:
        `DataSender.disconnect()`

    - #### sendMessage

          public void sendMessage​(byte[] data,
                                  boolean waitForAck)
                           throws java.io.IOException

      Send message.
      Parameters:
        `data` - The data to send
        `waitForAck` - Wait for an ack
      Throws:
        `java.io.IOException` - An IO error occurred sending the message

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### openSocket

          protected void openSocket()
                             throws java.io.IOException

      Open real socket and set time out when waitForAck is enabled is socket open return directly.
      Throws:
        `java.io.IOException` - Error opening socket

    - #### closeSocket

          protected void closeSocket()

      Close socket.
      See Also:
        `disconnect()`

    - #### pushMessage

          protected void pushMessage​(byte[] data,
                                     boolean reconnect,
                                     boolean waitForAck)
                              throws java.io.IOException

      Push messages with only one socket at a time Wait for ack is needed and make auto retry when write message is failed. After sending error close and reopen socket again. After successful sending update stats WARNING: Subclasses must be very careful that only one thread call this pushMessage at once!!!
      Parameters:
        `data` - Data to send
        `reconnect` - Do a reconnect (close socket then reopen)
        `waitForAck` - Wait for an acknowledgement
      Throws:
        `java.io.IOException` - IO error writing data
      Since:
        5.5.10
      See Also:
        `closeSocket()`, `openSocket()`, `sendMessage(byte[], boolean)`

    - #### waitForAck

          protected void waitForAck()
                             throws java.io.IOException

      Wait for Acknowledgement from other server. FIXME Please, not wait only for three characters, better control that the wait ack message is correct.
      Throws:
        `java.io.IOException` - An IO error occurred