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, Filip Hanik

### Field Summary

Fields
`protected XByteBuffer` `ackbuf`
`protected static StringManager` `sm` The string manager for this package.

### Constructor Summary

Constructors
Constructor and Description
`BioSender()`

### Method Summary

Methods
`protected void` `closeSocket()` Close socket.
`void` `connect()` Connect other cluster member receiver
`void` `disconnect()` disconnect and close socket
`String` `getInfo()` Return descriptive information about this implementation and the corresponding version number, in the format `<description>/<version>`.
`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.
`String` `toString()` Name of this SockerSender
`protected void` `waitForAck()` Wait for Acknowledgement from other server.

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

`getAddress, getAttempt, getConnectTime, getDestination, getDirect, 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, setDirect, 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 XByteBuffer ackbuf

### Constructor Detail

#### BioSender

    public BioSender()

### Method Detail

#### getInfo

    public String getInfo()

Return descriptive information about this implementation and the corresponding version number, in the format `<description>/<version>`.

#### connect

    public void connect()
                 throws IOException

Connect other cluster member receiver

Specified by:
  `connect` in interface `DataSender`
Specified by:
  `connect` in class `AbstractSender`
Throws:
  `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 IOException

Send message.

Throws:
  `IOException`

#### toString

    public String toString()

Name of this SockerSender

Overrides:
  `toString` in class `Object`

#### openSocket

    protected void openSocket()
                       throws IOException

open real socket and set time out when waitForAck is enabled is socket open return directly

Throws:
  `IOException`

#### closeSocket

    protected void closeSocket()

Close socket.

See Also:
  `disconnect()`

#### pushMessage

    protected void pushMessage(byte[] data,
                   boolean reconnect,
                   boolean waitForAck)
                        throws 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
Throws:
  `IOException`
Since:
  5.5.10
See Also:
  `closeSocket()`, `openSocket()`, `sendMessage(byte[], boolean)`

#### waitForAck

    protected void waitForAck()
                       throws 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:
  `IOException`
  `SocketTimeoutException`