Package com.rabbitmq.client.impl
Class SocketFrameHandler
- java.lang.Object
-
- com.rabbitmq.client.impl.SocketFrameHandler
-
- All Implemented Interfaces:
FrameHandler
,NetworkConnection
public class SocketFrameHandler extends java.lang.Object implements FrameHandler
A socket-based frame handler.
-
-
Field Summary
Fields Modifier and Type Field Description private java.io.DataInputStream
_inputStream
Socket's inputstream - data from the broker - synchronized onprivate java.util.concurrent.locks.Lock
_inputStreamLock
private java.io.DataOutputStream
_outputStream
Socket's outputstream - data to the broker - synchronized onprivate java.util.concurrent.locks.Lock
_outputStreamLock
private java.util.concurrent.ExecutorService
_shutdownExecutor
OptionalExecutorService
for final flush.private java.net.Socket
_socket
The underlying socketprivate static org.slf4j.Logger
LOGGER
private int
maxInboundMessageBodySize
static int
SOCKET_CLOSING_TIMEOUT
Time to linger before closing the socket forcefully.
-
Constructor Summary
Constructors Constructor Description SocketFrameHandler(java.net.Socket socket)
SocketFrameHandler(java.net.Socket socket, java.util.concurrent.ExecutorService shutdownExecutor, int maxInboundMessageBodySize)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
Close the underlying data connection (complaint not permitted).void
flush()
Flush the underlying data connection.java.net.InetAddress
getAddress()
Retrieve address of peer.java.io.DataInputStream
getInputStream()
java.net.InetAddress
getLocalAddress()
Retrieve the local host.int
getLocalPort()
Retrieve the local port number.int
getPort()
Retrieve port number of peer.int
getTimeout()
Get the underlying socket's read timeout in milliseconds.void
initialize(AMQConnection connection)
Frame
readFrame()
Read aFrame
from the underlying data connection.void
sendHeader()
Send the initial connection header, thus kickstarting the AMQP protocol version negotiation process and putting the underlying connection in a state such that the next layer of startup can proceed.void
sendHeader(int major, int minor)
Write a 0-8-style connection header to the underlying socket, containing the specified version information, kickstarting the AMQP protocol version negotiation process.void
sendHeader(int major, int minor, int revision)
Write a 0-9-1-style connection header to the underlying socket, containing the specified version information, kickstarting the AMQP protocol version negotiation process.void
setTimeout(int timeoutMs)
Set the underlying socket's read timeout in milliseconds, if applicable.void
writeFrame(Frame frame)
Write aFrame
to the underlying data connection.
-
-
-
Field Detail
-
LOGGER
private static final org.slf4j.Logger LOGGER
-
_socket
private final java.net.Socket _socket
The underlying socket
-
_shutdownExecutor
private final java.util.concurrent.ExecutorService _shutdownExecutor
OptionalExecutorService
for final flush.
-
_inputStream
private final java.io.DataInputStream _inputStream
Socket's inputstream - data from the broker - synchronized on
-
_inputStreamLock
private final java.util.concurrent.locks.Lock _inputStreamLock
-
_outputStream
private final java.io.DataOutputStream _outputStream
Socket's outputstream - data to the broker - synchronized on
-
_outputStreamLock
private final java.util.concurrent.locks.Lock _outputStreamLock
-
maxInboundMessageBodySize
private final int maxInboundMessageBodySize
-
SOCKET_CLOSING_TIMEOUT
public static final int SOCKET_CLOSING_TIMEOUT
Time to linger before closing the socket forcefully.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
SocketFrameHandler
public SocketFrameHandler(java.net.Socket socket) throws java.io.IOException
- Parameters:
socket
- the socket to use- Throws:
java.io.IOException
-
SocketFrameHandler
public SocketFrameHandler(java.net.Socket socket, java.util.concurrent.ExecutorService shutdownExecutor, int maxInboundMessageBodySize) throws java.io.IOException
- Parameters:
socket
- the socket to use- Throws:
java.io.IOException
-
-
Method Detail
-
getAddress
public java.net.InetAddress getAddress()
Description copied from interface:NetworkConnection
Retrieve address of peer.- Specified by:
getAddress
in interfaceNetworkConnection
-
getLocalAddress
public java.net.InetAddress getLocalAddress()
Description copied from interface:NetworkConnection
Retrieve the local host.- Specified by:
getLocalAddress
in interfaceNetworkConnection
- Returns:
- the client socket address.
-
getInputStream
public java.io.DataInputStream getInputStream()
-
getPort
public int getPort()
Description copied from interface:NetworkConnection
Retrieve port number of peer.- Specified by:
getPort
in interfaceNetworkConnection
-
getLocalPort
public int getLocalPort()
Description copied from interface:NetworkConnection
Retrieve the local port number.- Specified by:
getLocalPort
in interfaceNetworkConnection
- Returns:
- the client socket port number
-
setTimeout
public void setTimeout(int timeoutMs) throws java.net.SocketException
Description copied from interface:FrameHandler
Set the underlying socket's read timeout in milliseconds, if applicable.- Specified by:
setTimeout
in interfaceFrameHandler
- Parameters:
timeoutMs
- The timeout in milliseconds- Throws:
java.net.SocketException
-
getTimeout
public int getTimeout() throws java.net.SocketException
Description copied from interface:FrameHandler
Get the underlying socket's read timeout in milliseconds.- Specified by:
getTimeout
in interfaceFrameHandler
- Returns:
- The timeout in milliseconds
- Throws:
java.net.SocketException
-
sendHeader
public void sendHeader(int major, int minor) throws java.io.IOException
Write a 0-8-style connection header to the underlying socket, containing the specified version information, kickstarting the AMQP protocol version negotiation process.- Parameters:
major
- major protocol version numberminor
- minor protocol version number- Throws:
java.io.IOException
- if there is a problem accessing the connection- See Also:
sendHeader()
-
sendHeader
public void sendHeader(int major, int minor, int revision) throws java.io.IOException
Write a 0-9-1-style connection header to the underlying socket, containing the specified version information, kickstarting the AMQP protocol version negotiation process.- Parameters:
major
- major protocol version numberminor
- minor protocol version numberrevision
- protocol revision number- Throws:
java.io.IOException
- if there is a problem accessing the connection- See Also:
sendHeader()
-
sendHeader
public void sendHeader() throws java.io.IOException
Description copied from interface:FrameHandler
Send the initial connection header, thus kickstarting the AMQP protocol version negotiation process and putting the underlying connection in a state such that the next layer of startup can proceed.- Specified by:
sendHeader
in interfaceFrameHandler
- Throws:
java.io.IOException
- if there is a problem accessing the connection
-
initialize
public void initialize(AMQConnection connection)
- Specified by:
initialize
in interfaceFrameHandler
-
readFrame
public Frame readFrame() throws java.io.IOException
Description copied from interface:FrameHandler
Read aFrame
from the underlying data connection.- Specified by:
readFrame
in interfaceFrameHandler
- Returns:
- an incoming Frame, or null if there is none
- Throws:
java.io.IOException
- if there is a problem accessing the connectionjava.net.SocketTimeoutException
- if the underlying read times out
-
writeFrame
public void writeFrame(Frame frame) throws java.io.IOException
Description copied from interface:FrameHandler
Write aFrame
to the underlying data connection.- Specified by:
writeFrame
in interfaceFrameHandler
- Parameters:
frame
- the Frame to transmit- Throws:
java.io.IOException
- if there is a problem accessing the connection
-
flush
public void flush() throws java.io.IOException
Description copied from interface:FrameHandler
Flush the underlying data connection.- Specified by:
flush
in interfaceFrameHandler
- Throws:
java.io.IOException
- if there is a problem accessing the connection
-
close
public void close()
Description copied from interface:FrameHandler
Close the underlying data connection (complaint not permitted).- Specified by:
close
in interfaceFrameHandler
-
-