Merge package private interfaces into public ones.
- Related: #1989 and #1991
This commit is contained in:
parent
110745b0eb
commit
974d1ebf0a
@ -15,12 +15,16 @@
|
||||
*/
|
||||
package io.netty.channel;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.ByteBufAllocator;
|
||||
import io.netty.channel.socket.DatagramChannel;
|
||||
import io.netty.channel.socket.DatagramPacket;
|
||||
import io.netty.channel.socket.ServerSocketChannel;
|
||||
import io.netty.channel.socket.SocketChannel;
|
||||
import io.netty.util.AttributeMap;
|
||||
import io.netty.util.concurrent.FutureListener;
|
||||
|
||||
import java.net.ConnectException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
|
||||
@ -66,7 +70,7 @@ import java.net.SocketAddress;
|
||||
* operations. For example, with the old I/O datagram transport, multicast
|
||||
* join / leave operations are provided by {@link DatagramChannel}.
|
||||
*/
|
||||
public interface Channel extends AttributeMap, ChannelOutboundOps, ChannelPropertyAccess, Comparable<Channel> {
|
||||
public interface Channel extends AttributeMap, Comparable<Channel> {
|
||||
|
||||
/**
|
||||
* Returns the globally unique identifier of this {@link Channel}.
|
||||
@ -152,17 +156,240 @@ public interface Channel extends AttributeMap, ChannelOutboundOps, ChannelProper
|
||||
*/
|
||||
boolean isWritable();
|
||||
|
||||
@Override
|
||||
Channel flush();
|
||||
|
||||
@Override
|
||||
Channel read();
|
||||
|
||||
/**
|
||||
* Returns an <em>internal-use-only</em> object that provides unsafe operations.
|
||||
*/
|
||||
Unsafe unsafe();
|
||||
|
||||
/**
|
||||
* Return the assigned {@link ChannelPipeline}
|
||||
*/
|
||||
ChannelPipeline pipeline();
|
||||
|
||||
/**
|
||||
* Return the assigned {@link ByteBufAllocator} which will be used to allocate {@link ByteBuf}s.
|
||||
*/
|
||||
ByteBufAllocator alloc();
|
||||
|
||||
/**
|
||||
* Return a new {@link ChannelPromise}.
|
||||
*/
|
||||
ChannelPromise newPromise();
|
||||
|
||||
/**
|
||||
* Return an new {@link ChannelProgressivePromise}
|
||||
*/
|
||||
ChannelProgressivePromise newProgressivePromise();
|
||||
|
||||
/**
|
||||
* Create a new {@link ChannelFuture} which is marked as succeeded already. So {@link ChannelFuture#isSuccess()}
|
||||
* will return {@code true}. All {@link FutureListener} added to it will be notified directly. Also
|
||||
* every call of blocking methods will just return without blocking.
|
||||
*/
|
||||
ChannelFuture newSucceededFuture();
|
||||
|
||||
/**
|
||||
* Create a new {@link ChannelFuture} which is marked as failed already. So {@link ChannelFuture#isSuccess()}
|
||||
* will return {@code false}. All {@link FutureListener} added to it will be notified directly. Also
|
||||
* every call of blocking methods will just return without blocking.
|
||||
*/
|
||||
ChannelFuture newFailedFuture(Throwable cause);
|
||||
|
||||
/**
|
||||
* Return a special ChannelPromise which can be reused for different operations.
|
||||
* <p>
|
||||
* It's only supported to use
|
||||
* it for {@link Channel#write(Object, ChannelPromise)}.
|
||||
* </p>
|
||||
* <p>
|
||||
* Be aware that the returned {@link ChannelPromise} will not support most operations and should only be used
|
||||
* if you want to save an object allocation for every write operation. You will not be able to detect if the
|
||||
* operation was complete, only if it failed as the implementation will call
|
||||
* {@link ChannelPipeline#fireExceptionCaught(Throwable)} in this case.
|
||||
* </p>
|
||||
* <strong>Be aware this is an expert feature and should be used with care!</strong>
|
||||
*/
|
||||
ChannelPromise voidPromise();
|
||||
|
||||
/**
|
||||
* Request to bind to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture bind(SocketAddress localAddress);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* If the connection fails because of a connection timeout, the {@link ChannelFuture} will get failed with
|
||||
* a {@link ConnectTimeoutException}. If it fails because of connection refused a {@link ConnectException}
|
||||
* will be used.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} while bind to the localAddress and notify the
|
||||
* {@link ChannelFuture} once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress);
|
||||
|
||||
/**
|
||||
* Request to disconnect from the remote peer and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#disconnect(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture disconnect();
|
||||
|
||||
/**
|
||||
* Request to close this {@link Channel} and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* After it is closed it is not possible to reuse it again.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#close(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture close();
|
||||
|
||||
/**
|
||||
* Request to bind to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelFuture} will be notified.
|
||||
*
|
||||
* <p>
|
||||
* If the connection fails because of a connection timeout, the {@link ChannelFuture} will get failed with
|
||||
* a {@link ConnectTimeoutException}. If it fails because of connection refused a {@link ConnectException}
|
||||
* will be used.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} while bind to the localAddress and notify the
|
||||
* {@link ChannelFuture} once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified and also returned.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to disconnect from the remote peer and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#disconnect(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture disconnect(ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to close this {@link Channel} and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* After it is closed it is not possible to reuse it again.
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#close(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture close(ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to Read data from the {@link Channel} into the first inbound buffer, triggers an
|
||||
* {@link ChannelHandler#channelRead(ChannelHandlerContext, Object)} event if data was
|
||||
* read, and triggers a
|
||||
* {@link ChannelHandler#channelReadComplete(ChannelHandlerContext) channelReadComplete} event so the
|
||||
* handler can decide to continue reading. If there's a pending read operation already, this method does nothing.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#read(ChannelHandlerContext)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
Channel read();
|
||||
|
||||
/**
|
||||
* Request to write a message via this {@link Channel} through the {@link ChannelPipeline}.
|
||||
* This method will not request to actual flush, so be sure to call {@link #flush()}
|
||||
* once you want to request to flush all pending data to the actual transport.
|
||||
*/
|
||||
ChannelFuture write(Object msg);
|
||||
|
||||
/**
|
||||
* Request to write a message via this {@link Channel} through the {@link ChannelPipeline}.
|
||||
* This method will not request to actual flush, so be sure to call {@link #flush()}
|
||||
* once you want to request to flush all pending data to the actual transport.
|
||||
*/
|
||||
ChannelFuture write(Object msg, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to flush all pending messages.
|
||||
*/
|
||||
Channel flush();
|
||||
|
||||
/**
|
||||
* Shortcut for call {@link #write(Object, ChannelPromise)} and {@link #flush()}.
|
||||
*/
|
||||
ChannelFuture writeAndFlush(Object msg, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Shortcut for call {@link #write(Object)} and {@link #flush()}.
|
||||
*/
|
||||
ChannelFuture writeAndFlush(Object msg);
|
||||
|
||||
/**
|
||||
* <em>Unsafe</em> operations that should <em>never</em> be called from user-code. These methods
|
||||
* are only provided to implement the actual transport, and must be invoked from an I/O thread except for the
|
||||
|
@ -16,11 +16,16 @@
|
||||
package io.netty.channel;
|
||||
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.ByteBufAllocator;
|
||||
import io.netty.util.Attribute;
|
||||
import io.netty.util.AttributeKey;
|
||||
import io.netty.util.AttributeMap;
|
||||
import io.netty.util.concurrent.EventExecutor;
|
||||
import io.netty.util.concurrent.FutureListener;
|
||||
|
||||
import java.net.ConnectException;
|
||||
import java.net.SocketAddress;
|
||||
import java.nio.channels.Channels;
|
||||
|
||||
/**
|
||||
@ -30,7 +35,12 @@ import java.nio.channels.Channels;
|
||||
*
|
||||
* <h3>Notify</h3>
|
||||
*
|
||||
<<<<<<< HEAD
|
||||
* You can notify the closest handler in the same {@link ChannelPipeline} by calling one of the various method.
|
||||
=======
|
||||
* You can notify the closest handler in the
|
||||
* same {@link ChannelPipeline} by calling one of the various methods provided here.
|
||||
>>>>>>> 7ec70d0... Merge package private interfaces into public ones. Related to [#1989] and [#1991]
|
||||
* Please refer to {@link ChannelPipeline} to understand how an event flows.
|
||||
*
|
||||
* <h3>Modifying a pipeline</h3>
|
||||
@ -120,8 +130,7 @@ import java.nio.channels.Channels;
|
||||
* what fundamental differences they have, how they flow in a pipeline, and how to handle
|
||||
* the operation in your application.
|
||||
*/
|
||||
public interface ChannelHandlerContext
|
||||
extends AttributeMap, ChannelPropertyAccess, ChannelInboundOps, ChannelOutboundOps {
|
||||
public interface ChannelHandlerContext extends AttributeMap {
|
||||
|
||||
/**
|
||||
* Return the {@link Channel} which is bound to the {@link ChannelHandlerContext}.
|
||||
@ -160,30 +169,299 @@ public interface ChannelHandlerContext
|
||||
*/
|
||||
boolean isRemoved();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} was registered to its {@link EventLoop}.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelRegistered(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelHandlerContext fireChannelRegistered();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} is active now, which means it is connected.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelActive(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelHandlerContext fireChannelActive();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} is inactive now, which means it is closed.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelInactive(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelHandlerContext fireChannelInactive();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} received an {@link Throwable} in one of its inbound operations.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#exceptionCaught(ChannelHandlerContext, Throwable)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelHandlerContext fireExceptionCaught(Throwable cause);
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} received an user defined event.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#userEventTriggered(ChannelHandlerContext, Object)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelHandlerContext fireUserEventTriggered(Object event);
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} received a message.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelRead(ChannelHandlerContext, Object)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelHandlerContext fireChannelRead(Object msg);
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Triggers an {@link ChannelHandler#channelWritabilityChanged(ChannelHandlerContext)}
|
||||
* event to the next {@link ChannelHandler} in the {@link ChannelPipeline}.
|
||||
*/
|
||||
ChannelHandlerContext fireChannelReadComplete();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Triggers an {@link ChannelHandler#channelWritabilityChanged(ChannelHandlerContext)}
|
||||
* event to the next {@link ChannelHandler} in the {@link ChannelPipeline}.
|
||||
*/
|
||||
ChannelHandlerContext fireChannelWritabilityChanged();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Request to bind to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture bind(SocketAddress localAddress);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* If the connection fails because of a connection timeout, the {@link ChannelFuture} will get failed with
|
||||
* a {@link ConnectTimeoutException}. If it fails because of connection refused a {@link ConnectException}
|
||||
* will be used.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} while bind to the localAddress and notify the
|
||||
* {@link ChannelFuture} once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress);
|
||||
|
||||
/**
|
||||
* Request to disconnect from the remote peer and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#disconnect(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture disconnect();
|
||||
|
||||
/**
|
||||
* Request to close the {@link Channel} and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* After it is closed it is not possible to reuse it again.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#close(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture close();
|
||||
|
||||
/**
|
||||
* Request to bind to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelFuture} will be notified.
|
||||
*
|
||||
* <p>
|
||||
* If the connection fails because of a connection timeout, the {@link ChannelFuture} will get failed with
|
||||
* a {@link ConnectTimeoutException}. If it fails because of connection refused a {@link ConnectException}
|
||||
* will be used.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} while bind to the localAddress and notify the
|
||||
* {@link ChannelFuture} once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified and also returned.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to disconnect from the remote peer and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#disconnect(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture disconnect(ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to close the {@link Channel} and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* After it is closed it is not possible to reuse it again.
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#close(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture close(ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to Read data from the {@link Channel} into the first inbound buffer, triggers an
|
||||
* {@link ChannelHandler#channelRead(ChannelHandlerContext, Object)} event if data was
|
||||
* read, and triggers a
|
||||
* {@link ChannelHandler#channelReadComplete(ChannelHandlerContext) channelReadComplete} event so the
|
||||
* handler can decide to continue reading. If there's a pending read operation already, this method does nothing.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#read(ChannelHandlerContext)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelHandlerContext read();
|
||||
|
||||
/**
|
||||
* Request to write a message via this {@link ChannelHandlerContext} through the {@link ChannelPipeline}.
|
||||
* This method will not request to actual flush, so be sure to call {@link #flush()}
|
||||
* once you want to request to flush all pending data to the actual transport.
|
||||
*/
|
||||
ChannelFuture write(Object msg);
|
||||
|
||||
/**
|
||||
* Request to write a message via this {@link ChannelHandlerContext} through the {@link ChannelPipeline}.
|
||||
* This method will not request to actual flush, so be sure to call {@link #flush()}
|
||||
* once you want to request to flush all pending data to the actual transport.
|
||||
*/
|
||||
ChannelFuture write(Object msg, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to flush all pending messages via this ChannelOutboundInvoker.
|
||||
*/
|
||||
ChannelHandlerContext flush();
|
||||
|
||||
/**
|
||||
* Shortcut for call {@link #write(Object, ChannelPromise)} and {@link #flush()}.
|
||||
*/
|
||||
ChannelFuture writeAndFlush(Object msg, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Shortcut for call {@link #write(Object)} and {@link #flush()}.
|
||||
*/
|
||||
ChannelFuture writeAndFlush(Object msg);
|
||||
|
||||
/**
|
||||
* Return the assigned {@link ChannelPipeline}
|
||||
*/
|
||||
ChannelPipeline pipeline();
|
||||
|
||||
/**
|
||||
* Return the assigned {@link ByteBufAllocator} which will be used to allocate {@link ByteBuf}s.
|
||||
*/
|
||||
ByteBufAllocator alloc();
|
||||
|
||||
/**
|
||||
* Return a new {@link ChannelPromise}.
|
||||
*/
|
||||
ChannelPromise newPromise();
|
||||
|
||||
/**
|
||||
* Return an new {@link ChannelProgressivePromise}
|
||||
*/
|
||||
ChannelProgressivePromise newProgressivePromise();
|
||||
|
||||
/**
|
||||
* Create a new {@link ChannelFuture} which is marked as succeeded already. So {@link ChannelFuture#isSuccess()}
|
||||
* will return {@code true}. All {@link FutureListener} added to it will be notified directly. Also
|
||||
* every call of blocking methods will just return without blocking.
|
||||
*/
|
||||
ChannelFuture newSucceededFuture();
|
||||
|
||||
/**
|
||||
* Create a new {@link ChannelFuture} which is marked as failed already. So {@link ChannelFuture#isSuccess()}
|
||||
* will return {@code false}. All {@link FutureListener} added to it will be notified directly. Also
|
||||
* every call of blocking methods will just return without blocking.
|
||||
*/
|
||||
ChannelFuture newFailedFuture(Throwable cause);
|
||||
|
||||
/**
|
||||
* Return a special ChannelPromise which can be reused for different operations.
|
||||
* <p>
|
||||
* It's only supported to use
|
||||
* it for {@link ChannelHandlerContext#write(Object, ChannelPromise)}.
|
||||
* </p>
|
||||
* <p>
|
||||
* Be aware that the returned {@link ChannelPromise} will not support most operations and should only be used
|
||||
* if you want to save an object allocation for every write operation. You will not be able to detect if the
|
||||
* operation was complete, only if it failed as the implementation will call
|
||||
* {@link ChannelPipeline#fireExceptionCaught(Throwable)} in this case.
|
||||
* </p>
|
||||
* <strong>Be aware this is an expert feature and should be used with care!</strong>
|
||||
*/
|
||||
ChannelPromise voidPromise();
|
||||
|
||||
}
|
||||
|
@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 The Netty Project
|
||||
*
|
||||
* The Netty Project licenses this file to you under the Apache License,
|
||||
* version 2.0 (the "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at:
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package io.netty.channel;
|
||||
|
||||
|
||||
/**
|
||||
* Interface which is shared by others which need to fire inbound events
|
||||
*/
|
||||
interface ChannelInboundOps {
|
||||
|
||||
/**
|
||||
* A {@link Channel} was registered to its {@link EventLoop}.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelRegistered(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelInboundOps fireChannelRegistered();
|
||||
|
||||
/**
|
||||
* A {@link Channel} is active now, which means it is connected.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelActive(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelInboundOps fireChannelActive();
|
||||
|
||||
/**
|
||||
* A {@link Channel} is inactive now, which means it is closed.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelInactive(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelInboundOps fireChannelInactive();
|
||||
|
||||
/**
|
||||
* A {@link Channel} received an {@link Throwable} in one of its inbound operations.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#exceptionCaught(ChannelHandlerContext, Throwable)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelInboundOps fireExceptionCaught(Throwable cause);
|
||||
|
||||
/**
|
||||
* A {@link Channel} received an user defined event.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#userEventTriggered(ChannelHandlerContext, Object)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelInboundOps fireUserEventTriggered(Object event);
|
||||
|
||||
/**
|
||||
* A {@link Channel} received a message.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelRead(ChannelHandlerContext, Object)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelInboundOps fireChannelRead(Object msg);
|
||||
|
||||
ChannelInboundOps fireChannelReadComplete();
|
||||
|
||||
/**
|
||||
* Triggers an {@link ChannelHandler#channelWritabilityChanged(ChannelHandlerContext)}
|
||||
* event to the next {@link ChannelHandler} in the {@link ChannelPipeline}.
|
||||
*/
|
||||
ChannelInboundOps fireChannelWritabilityChanged();
|
||||
}
|
@ -1,204 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 The Netty Project
|
||||
*
|
||||
* The Netty Project licenses this file to you under the Apache License,
|
||||
* version 2.0 (the "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at:
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package io.netty.channel;
|
||||
|
||||
import java.net.ConnectException;
|
||||
import java.net.SocketAddress;
|
||||
|
||||
/**
|
||||
* Interface which is shared by others which need to execute outbound logic.
|
||||
*/
|
||||
interface ChannelOutboundOps {
|
||||
|
||||
/**
|
||||
* Request to bind to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture bind(SocketAddress localAddress);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* If the connection fails because of a connection timeout, the {@link ChannelFuture} will get failed with
|
||||
* a {@link ConnectTimeoutException}. If it fails because of connection refused a {@link ConnectException}
|
||||
* will be used.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} while bind to the localAddress and notify the
|
||||
* {@link ChannelFuture} once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress);
|
||||
|
||||
/**
|
||||
* Request to disconnect from the remote peer and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#disconnect(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture disconnect();
|
||||
|
||||
/**
|
||||
* Request to close this ChannelOutboundInvoker and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* After it is closed it is not possible to reuse it again.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#close(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture close();
|
||||
|
||||
/**
|
||||
* Request to bind to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelFuture} will be notified.
|
||||
*
|
||||
* <p>
|
||||
* If the connection fails because of a connection timeout, the {@link ChannelFuture} will get failed with
|
||||
* a {@link ConnectTimeoutException}. If it fails because of connection refused a {@link ConnectException}
|
||||
* will be used.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} while bind to the localAddress and notify the
|
||||
* {@link ChannelFuture} once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified and also returned.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to disconnect from the remote peer and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#disconnect(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture disconnect(ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to close this ChannelOutboundInvoker and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* After it is closed it is not possible to reuse it again.
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#close(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture close(ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to Read data from the {@link Channel} into the first inbound buffer, triggers an
|
||||
* {@link ChannelHandler#channelRead(ChannelHandlerContext, Object)} event if data was
|
||||
* read, and triggers a
|
||||
* {@link ChannelHandler#channelReadComplete(ChannelHandlerContext) channelReadComplete} event so the
|
||||
* handler can decide to continue reading. If there's a pending read operation already, this method does nothing.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#read(ChannelHandlerContext)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelOutboundOps read();
|
||||
|
||||
/**
|
||||
* Request to write a message via this ChannelOutboundInvoker through the {@link ChannelPipeline}.
|
||||
* This method will not request to actual flush, so be sure to call {@link #flush()}
|
||||
* once you want to request to flush all pending data to the actual transport.
|
||||
*/
|
||||
ChannelFuture write(Object msg);
|
||||
|
||||
/**
|
||||
* Request to write a message via this ChannelOutboundInvoker through the {@link ChannelPipeline}.
|
||||
* This method will not request to actual flush, so be sure to call {@link #flush()}
|
||||
* once you want to request to flush all pending data to the actual transport.
|
||||
*/
|
||||
ChannelFuture write(Object msg, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to flush all pending messages via this ChannelOutboundInvoker.
|
||||
*/
|
||||
ChannelOutboundOps flush();
|
||||
|
||||
/**
|
||||
* Shortcut for call {@link #write(Object, ChannelPromise)} and {@link #flush()}.
|
||||
*/
|
||||
ChannelFuture writeAndFlush(Object msg, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Shortcut for call {@link #write(Object)} and {@link #flush()}.
|
||||
*/
|
||||
ChannelFuture writeAndFlush(Object msg);
|
||||
}
|
@ -19,6 +19,7 @@ import io.netty.buffer.ByteBuf;
|
||||
import io.netty.util.concurrent.DefaultEventExecutorGroup;
|
||||
import io.netty.util.concurrent.EventExecutorGroup;
|
||||
|
||||
import java.net.ConnectException;
|
||||
import java.net.SocketAddress;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.SocketChannel;
|
||||
@ -189,8 +190,7 @@ import java.util.NoSuchElementException;
|
||||
* For example, you can insert an encryption handler when sensitive information is about to be exchanged, and remove it
|
||||
* after the exchange.
|
||||
*/
|
||||
public interface ChannelPipeline
|
||||
extends ChannelInboundOps, ChannelOutboundOps, Iterable<Entry<String, ChannelHandler>> {
|
||||
public interface ChannelPipeline extends Iterable<Entry<String, ChannelHandler>> {
|
||||
|
||||
/**
|
||||
* Inserts a {@link ChannelHandler} at the first position of this pipeline.
|
||||
@ -652,33 +652,248 @@ public interface ChannelPipeline
|
||||
*/
|
||||
Map<String, ChannelHandler> toMap();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} was registered to its {@link EventLoop}.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelRegistered(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelPipeline fireChannelRegistered();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} is active now, which means it is connected.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelActive(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelPipeline fireChannelActive();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} is inactive now, which means it is closed.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelInactive(ChannelHandlerContext)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelPipeline fireChannelInactive();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} received an {@link Throwable} in one of its inbound operations.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#exceptionCaught(ChannelHandlerContext, Throwable)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelPipeline fireExceptionCaught(Throwable cause);
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} received an user defined event.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#userEventTriggered(ChannelHandlerContext, Object)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelPipeline fireUserEventTriggered(Object event);
|
||||
|
||||
@Override
|
||||
/**
|
||||
* A {@link Channel} received a message.
|
||||
*
|
||||
* This will result in having the {@link ChannelHandler#channelRead(ChannelHandlerContext, Object)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelPipeline fireChannelRead(Object msg);
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Triggers an {@link ChannelHandler#channelWritabilityChanged(ChannelHandlerContext)}
|
||||
* event to the next {@link ChannelHandler} in the {@link ChannelPipeline}.
|
||||
*/
|
||||
ChannelPipeline fireChannelReadComplete();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Triggers an {@link ChannelHandler#channelWritabilityChanged(ChannelHandlerContext)}
|
||||
* event to the next {@link ChannelHandler} in the {@link ChannelPipeline}.
|
||||
*/
|
||||
ChannelPipeline fireChannelWritabilityChanged();
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Request to bind to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture bind(SocketAddress localAddress);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* If the connection fails because of a connection timeout, the {@link ChannelFuture} will get failed with
|
||||
* a {@link ConnectTimeoutException}. If it fails because of connection refused a {@link ConnectException}
|
||||
* will be used.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} while bind to the localAddress and notify the
|
||||
* {@link ChannelFuture} once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress);
|
||||
|
||||
/**
|
||||
* Request to disconnect from the remote peer and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of an error.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#disconnect(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture disconnect();
|
||||
|
||||
/**
|
||||
* Request to close the {@link Channel} and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* After it is closed it is not possible to reuse it again.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#close(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture close();
|
||||
|
||||
/**
|
||||
* Request to bind to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)} method
|
||||
* called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} and notify the {@link ChannelFuture} once the operation
|
||||
* completes, either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelFuture} will be notified.
|
||||
*
|
||||
* <p>
|
||||
* If the connection fails because of a connection timeout, the {@link ChannelFuture} will get failed with
|
||||
* a {@link ConnectTimeoutException}. If it fails because of connection refused a {@link ConnectException}
|
||||
* will be used.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to connect to the given {@link SocketAddress} while bind to the localAddress and notify the
|
||||
* {@link ChannelFuture} once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified and also returned.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to disconnect from the remote peer and notify the {@link ChannelFuture} once the operation completes,
|
||||
* either because the operation was successful or because of an error.
|
||||
*
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#disconnect(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture disconnect(ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to close the {@link Channel} bound to this {@link ChannelPipeline} and notify the {@link ChannelFuture}
|
||||
* once the operation completes, either because the operation was successful or because of
|
||||
* an error.
|
||||
*
|
||||
* After it is closed it is not possible to reuse it again.
|
||||
* The given {@link ChannelPromise} will be notified.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#close(ChannelHandlerContext, ChannelPromise)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelFuture close(ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to Read data from the {@link Channel} into the first inbound buffer, triggers an
|
||||
* {@link ChannelHandler#channelRead(ChannelHandlerContext, Object)} event if data was
|
||||
* read, and triggers a
|
||||
* {@link ChannelHandler#channelReadComplete(ChannelHandlerContext) channelReadComplete} event so the
|
||||
* handler can decide to continue reading. If there's a pending read operation already, this method does nothing.
|
||||
* <p>
|
||||
* This will result in having the
|
||||
* {@link ChannelHandler#read(ChannelHandlerContext)}
|
||||
* method called of the next {@link ChannelHandler} contained in the {@link ChannelPipeline} of the
|
||||
* {@link Channel}.
|
||||
*/
|
||||
ChannelPipeline read();
|
||||
|
||||
/**
|
||||
* Request to write a message via this {@link ChannelPipeline}.
|
||||
* This method will not request to actual flush, so be sure to call {@link #flush()}
|
||||
* once you want to request to flush all pending data to the actual transport.
|
||||
*/
|
||||
ChannelFuture write(Object msg);
|
||||
|
||||
/**
|
||||
* Request to write a message via this {@link ChannelPipeline}.
|
||||
* This method will not request to actual flush, so be sure to call {@link #flush()}
|
||||
* once you want to request to flush all pending data to the actual transport.
|
||||
*/
|
||||
ChannelFuture write(Object msg, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Request to flush all pending messages.
|
||||
*/
|
||||
ChannelPipeline flush();
|
||||
|
||||
@Override
|
||||
ChannelPipeline read();
|
||||
/**
|
||||
* Shortcut for call {@link #write(Object, ChannelPromise)} and {@link #flush()}.
|
||||
*/
|
||||
ChannelFuture writeAndFlush(Object msg, ChannelPromise promise);
|
||||
|
||||
/**
|
||||
* Shortcut for call {@link #write(Object)} and {@link #flush()}.
|
||||
*/
|
||||
ChannelFuture writeAndFlush(Object msg);
|
||||
}
|
||||
|
@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 The Netty Project
|
||||
*
|
||||
* The Netty Project licenses this file to you under the Apache License,
|
||||
* version 2.0 (the "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at:
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package io.netty.channel;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.ByteBufAllocator;
|
||||
import io.netty.util.concurrent.FutureListener;
|
||||
|
||||
/**
|
||||
* Provides common methods between {@link Channel} and {@link ChannelHandlerContext}.
|
||||
*/
|
||||
interface ChannelPropertyAccess {
|
||||
|
||||
/**
|
||||
* Return the assigned {@link ChannelPipeline}
|
||||
*/
|
||||
ChannelPipeline pipeline();
|
||||
|
||||
/**
|
||||
* Return the assigned {@link ByteBufAllocator} which will be used to allocate {@link ByteBuf}s.
|
||||
*/
|
||||
ByteBufAllocator alloc();
|
||||
|
||||
/**
|
||||
* Return a new {@link ChannelPromise}.
|
||||
*/
|
||||
ChannelPromise newPromise();
|
||||
|
||||
/**
|
||||
* Return an new {@link ChannelProgressivePromise}
|
||||
*/
|
||||
ChannelProgressivePromise newProgressivePromise();
|
||||
|
||||
/**
|
||||
* Create a new {@link ChannelFuture} which is marked as succeeded already. So {@link ChannelFuture#isSuccess()}
|
||||
* will return {@code true}. All {@link FutureListener} added to it will be notified directly. Also
|
||||
* every call of blocking methods will just return without blocking.
|
||||
*/
|
||||
ChannelFuture newSucceededFuture();
|
||||
|
||||
/**
|
||||
* Create a new {@link ChannelFuture} which is marked as failed already. So {@link ChannelFuture#isSuccess()}
|
||||
* will return {@code false}. All {@link FutureListener} added to it will be notified directly. Also
|
||||
* every call of blocking methods will just return without blocking.
|
||||
*/
|
||||
ChannelFuture newFailedFuture(Throwable cause);
|
||||
|
||||
/**
|
||||
* Return a special ChannelPromise which can be reused for {@code write(..)} operations. Using it for other
|
||||
* outbound operations will fail with undetermined consequences.
|
||||
* <p>
|
||||
* Be aware that the returned {@link ChannelPromise} will not support most operations and should only be used
|
||||
* if you want to save an object allocation for every write operation. You will not be able to detect if the
|
||||
* operation was complete, only if it failed as the implementation will call
|
||||
* {@link ChannelPipeline#fireExceptionCaught(Throwable)} in this case.
|
||||
* </p>
|
||||
* <strong>Be aware this is an expert feature and should be used with care!</strong>
|
||||
*/
|
||||
ChannelPromise voidPromise();
|
||||
}
|
Loading…
Reference in New Issue
Block a user