Class TcpTransport
- java.lang.Object
-
- org.apache.qpid.protonj2.client.transport.TcpTransport
-
- All Implemented Interfaces:
Transport
- Direct Known Subclasses:
WebSocketTransport
public class TcpTransport extends java.lang.Object implements Transport
TCP based transport that uses Netty as the underlying IO layer.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classTcpTransport.NettyDefaultHandler<E>protected classTcpTransport.NettyTcpTransportHandler
-
Field Summary
Fields Modifier and Type Field Description protected io.netty.bootstrap.Bootstrapbootstrapprotected io.netty.channel.Channelchannelprotected java.util.concurrent.atomic.AtomicBooleanclosedprotected java.util.concurrent.atomic.AtomicBooleanconnectedprotected java.util.concurrent.CountDownLatchconnectedLatchprotected java.io.IOExceptionfailureCauseprotected java.lang.Stringhostprotected TransportListenerlistenerprotected TransportOptionsoptionsprotected intportprotected SslOptionssslOptions
-
Constructor Summary
Constructors Constructor Description TcpTransport(io.netty.bootstrap.Bootstrap bootstrap, TransportOptions options, SslOptions sslOptions)Create a newTcpTransportinstance with the given configuration.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddAdditionalHandlers(io.netty.channel.ChannelPipeline pipeline)voidawaitConnect()Waits interruptibly for theTransportto connect to the remote that was indicated in theTransport.connect(String, int, TransportListener)call.protected voidcheckConnected()voidclose()Close the Transport, no additional send operations are accepted.TcpTransportconnect(java.lang.String host, int port, TransportListener listener)Performs the connect operation for the implemented Transport type such as a TCP socket connection, SSL/TLS handshake etc.protected io.netty.channel.ChannelInboundHandlerAdaptercreateChannelHandler()TcpTransportflush()Request a flush of all pending writes to the underlying connection.ProtonBufferAllocatorgetBufferAllocator()Gets a buffer allocator that can produceProtonBufferinstance that may be optimized for use with the underlying transport implementation.java.lang.StringgetHost()java.security.PrincipalgetLocalPrincipal()intgetPort()java.net.URIgetRemoteURI()Returns a URI that contains some meaningful information about the remote connection such as a scheme that reflects the transport type and the remote host and port that the connection was instructed to connect to.protected java.lang.StringgetScheme()SslOptionsgetSslOptions()TransportListenergetTransportListener()Gets the currently set TransportListener instanceTransportOptionsgetTransportOptions()protected voidhandleConnected(io.netty.channel.Channel connectedChannel)protected voidhandleTransportFailure(io.netty.channel.Channel failedChannel, java.lang.Throwable cause)booleanisConnected()booleanisSecure()protected io.netty.buffer.ByteBuftoOutputBuffer(ProtonBuffer output)TcpTransportwrite(ProtonBuffer output)Writes a chunk of data over the Transport connection without performing an explicit flush on the transport.TcpTransportwrite(ProtonBuffer output, java.lang.Runnable onComplete)Writes a chunk of data over the Transport connection without performing an explicit flush on the transport.TcpTransportwriteAndFlush(ProtonBuffer output)Writes a chunk of data over the Transport connection and requests a flush of all pending queued write operationsTcpTransportwriteAndFlush(ProtonBuffer output, java.lang.Runnable onComplete)Writes a chunk of data over the Transport connection and requests a flush of all pending queued write operations
-
-
-
Field Detail
-
connected
protected final java.util.concurrent.atomic.AtomicBoolean connected
-
closed
protected final java.util.concurrent.atomic.AtomicBoolean closed
-
connectedLatch
protected final java.util.concurrent.CountDownLatch connectedLatch
-
options
protected final TransportOptions options
-
sslOptions
protected final SslOptions sslOptions
-
bootstrap
protected final io.netty.bootstrap.Bootstrap bootstrap
-
channel
protected io.netty.channel.Channel channel
-
failureCause
protected volatile java.io.IOException failureCause
-
host
protected java.lang.String host
-
port
protected int port
-
listener
protected TransportListener listener
-
-
Constructor Detail
-
TcpTransport
public TcpTransport(io.netty.bootstrap.Bootstrap bootstrap, TransportOptions options, SslOptions sslOptions)Create a newTcpTransportinstance with the given configuration.- Parameters:
bootstrap- the NettyBootstrapthat this transport's IO layer is bound to.options- theTransportOptionsused to configure the socket connection.sslOptions- theSslOptionsto use if the options indicate SSL is enabled.
-
-
Method Detail
-
connect
public TcpTransport connect(java.lang.String host, int port, TransportListener listener) throws java.io.IOException
Description copied from interface:TransportPerforms the connect operation for the implemented Transport type such as a TCP socket connection, SSL/TLS handshake etc. The connection operation itself will be performed as an asynchronous operation with the success or failure being communicated to the event pointTransportListener.transportError(Throwable). If the users wishes to perform a block on connect outcome theTransport.awaitConnect()method will wait for and or throw an error based on the connect outcome.- Specified by:
connectin interfaceTransport- Parameters:
host- The remote host that thisTransportshould attempt to connect to.port- The port on the remote host that thisTransportshould attempt to bind to.listener- TheTransportListenerthat will handleTransportevents.- Returns:
- this
Transportinstance. - Throws:
java.io.IOException- if an error occurs while attempting the connect.
-
awaitConnect
public void awaitConnect() throws java.lang.InterruptedException, java.io.IOExceptionDescription copied from interface:TransportWaits interruptibly for theTransportto connect to the remote that was indicated in theTransport.connect(String, int, TransportListener)call.- Specified by:
awaitConnectin interfaceTransport- Throws:
java.lang.InterruptedException- If the wait mechanism was interrupted while waiting for a successful connect.java.io.IOException- If theTransportfailed to connect or was closed before connected.
-
isConnected
public boolean isConnected()
- Specified by:
isConnectedin interfaceTransport- Returns:
- true if transport is connected or false if the connection is down.
-
isSecure
public boolean isSecure()
-
getHost
public java.lang.String getHost()
-
getPort
public int getPort()
-
close
public void close() throws java.io.IOExceptionDescription copied from interface:TransportClose the Transport, no additional send operations are accepted.
-
getBufferAllocator
public ProtonBufferAllocator getBufferAllocator()
Description copied from interface:TransportGets a buffer allocator that can produceProtonBufferinstance that may be optimized for use with the underlying transport implementation.- Specified by:
getBufferAllocatorin interfaceTransport- Returns:
- a
ProtonBufferAllocatorthat creates transport friendly buffers.
-
write
public TcpTransport write(ProtonBuffer output) throws java.io.IOException
Description copied from interface:TransportWrites a chunk of data over the Transport connection without performing an explicit flush on the transport.
-
write
public TcpTransport write(ProtonBuffer output, java.lang.Runnable onComplete) throws java.io.IOException
Description copied from interface:TransportWrites a chunk of data over the Transport connection without performing an explicit flush on the transport. This method allows for a completion callback that is signaled when the actual low level IO operation is completed which could be after this method has returned.- Specified by:
writein interfaceTransport- Parameters:
output- The buffer of data that is to be transmitted.onComplete- ARunnablethat is invoked when the IO operation completes successfully.- Returns:
- this
Transportinstance. - Throws:
java.io.IOException- if an error occurs during the write operation.
-
writeAndFlush
public TcpTransport writeAndFlush(ProtonBuffer output) throws java.io.IOException
Description copied from interface:TransportWrites a chunk of data over the Transport connection and requests a flush of all pending queued write operations- Specified by:
writeAndFlushin interfaceTransport- Parameters:
output- The buffer of data that is to be transmitted.- Returns:
- this
Transportinstance. - Throws:
java.io.IOException- if an error occurs during the write operation.
-
writeAndFlush
public TcpTransport writeAndFlush(ProtonBuffer output, java.lang.Runnable onComplete) throws java.io.IOException
Description copied from interface:TransportWrites a chunk of data over the Transport connection and requests a flush of all pending queued write operations- Specified by:
writeAndFlushin interfaceTransport- Parameters:
output- The buffer of data that is to be transmitted.onComplete- ARunnablethat is invoked when the IO operation completes successfully.- Returns:
- this
Transportinstance. - Throws:
java.io.IOException- if an error occurs during the write operation.
-
flush
public TcpTransport flush() throws java.io.IOException
Description copied from interface:TransportRequest a flush of all pending writes to the underlying connection.
-
getTransportListener
public TransportListener getTransportListener()
Description copied from interface:TransportGets the currently set TransportListener instance- Specified by:
getTransportListenerin interfaceTransport- Returns:
- the current TransportListener or null if none set.
-
getTransportOptions
public TransportOptions getTransportOptions()
- Specified by:
getTransportOptionsin interfaceTransport- Returns:
- a
TransportOptionsinstance copied from the immutable options given at create time..
-
getSslOptions
public SslOptions getSslOptions()
- Specified by:
getSslOptionsin interfaceTransport- Returns:
- a
SslOptionsinstance copied from the immutable options given at create time..
-
getLocalPrincipal
public java.security.Principal getLocalPrincipal()
- Specified by:
getLocalPrincipalin interfaceTransport- Returns:
- the local principal for a Transport that is using a secure connection.
-
toOutputBuffer
protected final io.netty.buffer.ByteBuf toOutputBuffer(ProtonBuffer output) throws java.io.IOException
- Throws:
java.io.IOException
-
addAdditionalHandlers
protected void addAdditionalHandlers(io.netty.channel.ChannelPipeline pipeline)
-
createChannelHandler
protected io.netty.channel.ChannelInboundHandlerAdapter createChannelHandler()
-
handleConnected
protected void handleConnected(io.netty.channel.Channel connectedChannel) throws java.lang.Exception- Throws:
java.lang.Exception
-
handleTransportFailure
protected void handleTransportFailure(io.netty.channel.Channel failedChannel, java.lang.Throwable cause)
-
checkConnected
protected final void checkConnected() throws java.io.IOException- Throws:
java.io.IOException
-
getRemoteURI
public java.net.URI getRemoteURI()
Description copied from interface:TransportReturns a URI that contains some meaningful information about the remote connection such as a scheme that reflects the transport type and the remote host and port that the connection was instructed to connect to. If called before theTransport.connect(String, int, TransportListener)method this method returnsnull.- Specified by:
getRemoteURIin interfaceTransport- Returns:
- a URI that reflects a meaningful view of the
Transportremote connection details.
-
getScheme
protected java.lang.String getScheme()
-
-