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 final XByteBuffer`
`ackbuf`
`protected static final StringManager`
`sm`
The string manager for this package.

## Constructor Summary

Constructors
Constructor
Description
`BioSender()`

## Method Summary

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.
`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 Details

### sm

protected static final StringManager sm
The string manager for this package.

### ackbuf

protected final XByteBuffer ackbuf

## Constructor Details

### BioSender

public BioSender()

## Method Details

### 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.

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

### toString

public String toString()

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` - Error opening socket

### 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
  `reconnect` - Do a reconnect (close socket then reopen)
  `waitForAck` - Wait for an acknowledgement
Throws:
  `IOException` - IO error writing data
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` - An IO error occurred