public class EmbeddedChannel extends AbstractChannel
Channel implementations that are used in an embedded fashion.| Modifier and Type | Class and Description |
|---|---|
private class |
EmbeddedChannel.DefaultUnsafe |
private class |
EmbeddedChannel.EmbeddedChannelPipeline |
private static class |
EmbeddedChannel.State |
AbstractChannel.AbstractUnsafeChannel.Unsafe| Modifier and Type | Field and Description |
|---|---|
private ChannelConfig |
config |
private static ChannelHandler[] |
EMPTY_HANDLERS |
private java.util.Queue<java.lang.Object> |
inboundMessages |
private java.lang.Throwable |
lastException |
private static java.net.SocketAddress |
LOCAL_ADDRESS |
private static InternalLogger |
logger |
private EmbeddedEventLoop |
loop |
private ChannelMetadata |
metadata |
private static ChannelMetadata |
METADATA_DISCONNECT |
private static ChannelMetadata |
METADATA_NO_DISCONNECT |
private java.util.Queue<java.lang.Object> |
outboundMessages |
private ChannelFutureListener |
recordExceptionListener |
private static java.net.SocketAddress |
REMOTE_ADDRESS |
private EmbeddedChannel.State |
state |
| Constructor and Description |
|---|
EmbeddedChannel()
Create a new instance with an
EmbeddedChannelId and an empty pipeline. |
EmbeddedChannel(boolean hasDisconnect,
ChannelHandler... handlers)
Create a new instance with the pipeline initialized with the specified handlers.
|
EmbeddedChannel(ChannelHandler... handlers)
Create a new instance with the pipeline initialized with the specified handlers.
|
EmbeddedChannel(ChannelId channelId)
Create a new instance with the specified ID and an empty pipeline.
|
EmbeddedChannel(ChannelId channelId,
boolean hasDisconnect,
ChannelConfig config,
ChannelHandler... handlers)
Create a new instance with the channel ID set to the given ID and the pipeline
initialized with the specified handlers.
|
EmbeddedChannel(ChannelId channelId,
boolean hasDisconnect,
ChannelHandler... handlers)
Create a new instance with the channel ID set to the given ID and the pipeline
initialized with the specified handlers.
|
EmbeddedChannel(ChannelId channelId,
ChannelHandler... handlers)
Create a new instance with the channel ID set to the given ID and the pipeline
initialized with the specified handlers.
|
| Modifier and Type | Method and Description |
|---|---|
void |
checkException()
Check if there was any
Throwable received and if so rethrow it. |
private ChannelFuture |
checkException(ChannelPromise promise)
Checks for the presence of an
Exception. |
private boolean |
checkOpen(boolean recordException)
|
ChannelFuture |
close()
Request to close the
Channel and notify the ChannelFuture once the operation completes,
either because the operation was successful or because of
an error. |
ChannelFuture |
close(ChannelPromise promise)
Request to close the
Channel and notify the ChannelFuture once the operation completes,
either because the operation was successful or because of
an error. |
ChannelConfig |
config()
Returns the configuration of this channel.
|
ChannelFuture |
disconnect()
Request to disconnect from the remote peer and notify the
ChannelFuture once the operation completes,
either because the operation was successful or because of an error. |
ChannelFuture |
disconnect(ChannelPromise promise)
Request to disconnect from the remote peer and notify the
ChannelFuture once the operation completes,
either because the operation was successful or because of an error. |
protected void |
doBeginRead()
Schedule a read operation.
|
protected void |
doBind(java.net.SocketAddress localAddress)
Bind the
Channel to the SocketAddress |
protected void |
doClose()
Close the
Channel |
protected void |
doDisconnect()
Disconnect this
Channel from its remote peer |
protected void |
doRegister()
|
protected void |
doWrite(ChannelOutboundBuffer in)
Flush the content of the given buffer to the remote peer.
|
protected void |
ensureOpen()
Ensure the
Channel is open and if not throw an exception. |
boolean |
finish()
Mark this
Channel as finished. |
private boolean |
finish(boolean releaseAll)
Mark this
Channel as finished. |
boolean |
finishAndReleaseAll()
Mark this
Channel as finished and release all pending message in the inbound and outbound buffer. |
private void |
finishPendingTasks(boolean cancel) |
EmbeddedChannel |
flushInbound()
Flushes the inbound of this
Channel. |
private ChannelFuture |
flushInbound(boolean recordException,
ChannelPromise promise) |
EmbeddedChannel |
flushOutbound()
Flushes the outbound of this
Channel. |
private void |
flushOutbound0() |
protected void |
handleInboundMessage(java.lang.Object msg)
Called for each inbound message.
|
protected void |
handleOutboundMessage(java.lang.Object msg)
Called for each outbound message.
|
java.util.Queue<java.lang.Object> |
inboundMessages()
|
boolean |
isActive()
Return
true if the Channel is active and so connected. |
protected boolean |
isCompatible(EventLoop loop)
Return
true if the given EventLoop is compatible with this instance. |
private static boolean |
isNotEmpty(java.util.Queue<java.lang.Object> queue) |
boolean |
isOpen()
Returns
true if the Channel is open and may get active later |
java.util.Queue<java.lang.Object> |
lastInboundBuffer()
Deprecated.
|
java.util.Queue<java.lang.Object> |
lastOutboundBuffer()
Deprecated.
|
protected java.net.SocketAddress |
localAddress0()
Returns the
SocketAddress which is bound locally. |
ChannelMetadata |
metadata()
|
private static ChannelMetadata |
metadata(boolean hasDisconnect) |
protected DefaultChannelPipeline |
newChannelPipeline()
Returns a new
DefaultChannelPipeline instance. |
protected AbstractChannel.AbstractUnsafe |
newUnsafe()
Create a new
AbstractChannel.AbstractUnsafe instance which will be used for the life-time of the Channel |
java.util.Queue<java.lang.Object> |
outboundMessages()
|
private static java.lang.Object |
poll(java.util.Queue<java.lang.Object> queue) |
<T> T |
readInbound()
Return received data from this
Channel |
<T> T |
readOutbound()
Read data from the outbound.
|
private void |
recordException(ChannelFuture future) |
private void |
recordException(java.lang.Throwable cause) |
private static boolean |
releaseAll(java.util.Queue<java.lang.Object> queue) |
boolean |
releaseInbound()
Release all buffered inbound messages and return
true if any were in the inbound buffer, false
otherwise. |
boolean |
releaseOutbound()
Release all buffered outbound messages and return
true if any were in the outbound buffer, false
otherwise. |
protected java.net.SocketAddress |
remoteAddress0()
Return the
SocketAddress which the Channel is connected to. |
void |
runPendingTasks()
|
long |
runScheduledPendingTasks()
|
private void |
setup(ChannelHandler... handlers) |
boolean |
writeInbound(java.lang.Object... msgs)
Write messages to the inbound of this
Channel. |
ChannelFuture |
writeOneInbound(java.lang.Object msg)
Writes one message to the inbound of this
Channel and does not flush it. |
ChannelFuture |
writeOneInbound(java.lang.Object msg,
ChannelPromise promise)
Writes one message to the inbound of this
Channel and does not flush it. |
ChannelFuture |
writeOneOutbound(java.lang.Object msg)
Writes one message to the outbound of this
Channel and does not flush it. |
ChannelFuture |
writeOneOutbound(java.lang.Object msg,
ChannelPromise promise)
Writes one message to the outbound of this
Channel and does not flush it. |
boolean |
writeOutbound(java.lang.Object... msgs)
Write messages to the outbound of this
Channel. |
alloc, bind, bind, bytesBeforeUnwritable, bytesBeforeWritable, closeFuture, compareTo, connect, connect, connect, connect, deregister, deregister, doDeregister, equals, eventLoop, filterOutboundMessage, flush, hashCode, id, invalidateLocalAddress, invalidateRemoteAddress, isRegistered, isWritable, localAddress, newFailedFuture, newId, newProgressivePromise, newPromise, newSucceededFuture, parent, pipeline, read, remoteAddress, toString, unsafe, voidPromise, write, write, writeAndFlush, writeAndFlushattr, hasAttrclone, finalize, getClass, notify, notifyAll, wait, wait, waitattr, hasAttrprivate static final java.net.SocketAddress LOCAL_ADDRESS
private static final java.net.SocketAddress REMOTE_ADDRESS
private static final ChannelHandler[] EMPTY_HANDLERS
private static final InternalLogger logger
private static final ChannelMetadata METADATA_NO_DISCONNECT
private static final ChannelMetadata METADATA_DISCONNECT
private final EmbeddedEventLoop loop
private final ChannelFutureListener recordExceptionListener
private final ChannelMetadata metadata
private final ChannelConfig config
private java.util.Queue<java.lang.Object> inboundMessages
private java.util.Queue<java.lang.Object> outboundMessages
private java.lang.Throwable lastException
private EmbeddedChannel.State state
public EmbeddedChannel()
EmbeddedChannelId and an empty pipeline.public EmbeddedChannel(ChannelId channelId)
channelId - the ChannelId that will be used to identify this channelpublic EmbeddedChannel(ChannelHandler... handlers)
handlers - the ChannelHandlers which will be add in the ChannelPipelinepublic EmbeddedChannel(boolean hasDisconnect,
ChannelHandler... handlers)
hasDisconnect - false if this Channel will delegate disconnect()
to close(), false otherwise.handlers - the ChannelHandlers which will be add in the ChannelPipelinepublic EmbeddedChannel(ChannelId channelId, ChannelHandler... handlers)
channelId - the ChannelId that will be used to identify this channelhandlers - the ChannelHandlers which will be add in the ChannelPipelinepublic EmbeddedChannel(ChannelId channelId, boolean hasDisconnect, ChannelHandler... handlers)
channelId - the ChannelId that will be used to identify this channelhasDisconnect - false if this Channel will delegate disconnect()
to close(), false otherwise.handlers - the ChannelHandlers which will be add in the ChannelPipelinepublic EmbeddedChannel(ChannelId channelId, boolean hasDisconnect, ChannelConfig config, ChannelHandler... handlers)
channelId - the ChannelId that will be used to identify this channelhasDisconnect - false if this Channel will delegate disconnect()
to close(), false otherwise.config - the ChannelConfig which will be returned by config().handlers - the ChannelHandlers which will be add in the ChannelPipelineprivate static ChannelMetadata metadata(boolean hasDisconnect)
private void setup(ChannelHandler... handlers)
protected final DefaultChannelPipeline newChannelPipeline()
AbstractChannelDefaultChannelPipeline instance.newChannelPipeline in class AbstractChannelpublic ChannelMetadata metadata()
Channelpublic ChannelConfig config()
Channelpublic boolean isOpen()
Channeltrue if the Channel is open and may get active laterpublic boolean isActive()
Channeltrue if the Channel is active and so connected.public java.util.Queue<java.lang.Object> inboundMessages()
@Deprecated public java.util.Queue<java.lang.Object> lastInboundBuffer()
inboundMessages()public java.util.Queue<java.lang.Object> outboundMessages()
@Deprecated public java.util.Queue<java.lang.Object> lastOutboundBuffer()
outboundMessages()public <T> T readInbound()
Channelpublic <T> T readOutbound()
null if nothing is readable.public boolean writeInbound(java.lang.Object... msgs)
Channel.msgs - the messages to be writtentrue if the write operation did add something to the inbound bufferpublic ChannelFuture writeOneInbound(java.lang.Object msg)
Channel and does not flush it. This
method is conceptually equivalent to AbstractChannel.write(Object).writeOneOutbound(Object)public ChannelFuture writeOneInbound(java.lang.Object msg, ChannelPromise promise)
Channel and does not flush it. This
method is conceptually equivalent to AbstractChannel.write(Object, ChannelPromise).writeOneOutbound(Object, ChannelPromise)public EmbeddedChannel flushInbound()
Channel. This method is conceptually equivalent to AbstractChannel.flush().flushOutbound()private ChannelFuture flushInbound(boolean recordException, ChannelPromise promise)
public boolean writeOutbound(java.lang.Object... msgs)
Channel.msgs - the messages to be writtentrue if the write operation did add something to the outbound bufferpublic ChannelFuture writeOneOutbound(java.lang.Object msg)
Channel and does not flush it. This
method is conceptually equivalent to AbstractChannel.write(Object).writeOneInbound(Object)public ChannelFuture writeOneOutbound(java.lang.Object msg, ChannelPromise promise)
Channel and does not flush it. This
method is conceptually equivalent to AbstractChannel.write(Object, ChannelPromise).writeOneInbound(Object, ChannelPromise)public EmbeddedChannel flushOutbound()
Channel. This method is conceptually equivalent to AbstractChannel.flush().flushInbound()private void flushOutbound0()
public boolean finish()
Channel as finished. Any further try to write data to it will fail.true if any of the used buffers has something left to readpublic boolean finishAndReleaseAll()
Channel as finished and release all pending message in the inbound and outbound buffer.
Any further try to write data to it will fail.true if any of the used buffers has something left to readprivate boolean finish(boolean releaseAll)
Channel as finished. Any further try to write data to it will fail.releaseAll - if true all pending message in the inbound and outbound buffer are released.true if any of the used buffers has something left to readpublic boolean releaseInbound()
true if any were in the inbound buffer, false
otherwise.public boolean releaseOutbound()
true if any were in the outbound buffer, false
otherwise.private static boolean releaseAll(java.util.Queue<java.lang.Object> queue)
private void finishPendingTasks(boolean cancel)
public final ChannelFuture close()
ChannelOutboundInvokerChannel and notify the 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.
This will result in having the
ChannelOutboundHandler.close(ChannelHandlerContext, ChannelPromise)
method called of the next ChannelOutboundHandler contained in the ChannelPipeline of the
Channel.
close in interface ChannelOutboundInvokerclose in class AbstractChannelpublic final ChannelFuture disconnect()
ChannelOutboundInvokerChannelFuture once the operation completes,
either because the operation was successful or because of an error.
This will result in having the
ChannelOutboundHandler.disconnect(ChannelHandlerContext, ChannelPromise)
method called of the next ChannelOutboundHandler contained in the ChannelPipeline of the
Channel.
disconnect in interface ChannelOutboundInvokerdisconnect in class AbstractChannelpublic final ChannelFuture close(ChannelPromise promise)
ChannelOutboundInvokerChannel and notify the 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 ChannelPromise will be notified.
This will result in having the
ChannelOutboundHandler.close(ChannelHandlerContext, ChannelPromise)
method called of the next ChannelOutboundHandler contained in the ChannelPipeline of the
Channel.
close in interface ChannelOutboundInvokerclose in class AbstractChannelpublic final ChannelFuture disconnect(ChannelPromise promise)
ChannelOutboundInvokerChannelFuture once the operation completes,
either because the operation was successful or because of an error.
The given ChannelPromise will be notified.
This will result in having the
ChannelOutboundHandler.disconnect(ChannelHandlerContext, ChannelPromise)
method called of the next ChannelOutboundHandler contained in the ChannelPipeline of the
Channel.
disconnect in interface ChannelOutboundInvokerdisconnect in class AbstractChannelprivate static boolean isNotEmpty(java.util.Queue<java.lang.Object> queue)
private static java.lang.Object poll(java.util.Queue<java.lang.Object> queue)
public void runPendingTasks()
public long runScheduledPendingTasks()
private void recordException(ChannelFuture future)
private void recordException(java.lang.Throwable cause)
private ChannelFuture checkException(ChannelPromise promise)
Exception.public void checkException()
Throwable received and if so rethrow it.private boolean checkOpen(boolean recordException)
protected final void ensureOpen()
Channel is open and if not throw an exception.protected boolean isCompatible(EventLoop loop)
AbstractChanneltrue if the given EventLoop is compatible with this instance.isCompatible in class AbstractChannelprotected java.net.SocketAddress localAddress0()
AbstractChannelSocketAddress which is bound locally.localAddress0 in class AbstractChannelprotected java.net.SocketAddress remoteAddress0()
AbstractChannelSocketAddress which the Channel is connected to.remoteAddress0 in class AbstractChannelprotected void doRegister()
throws java.lang.Exception
AbstractChannelChannel is registered with its EventLoop as part of the register process.
Sub-classes may override this methoddoRegister in class AbstractChanneljava.lang.Exceptionprotected void doBind(java.net.SocketAddress localAddress)
throws java.lang.Exception
AbstractChannelChannel to the SocketAddressdoBind in class AbstractChanneljava.lang.Exceptionprotected void doDisconnect()
throws java.lang.Exception
AbstractChannelChannel from its remote peerdoDisconnect in class AbstractChanneljava.lang.Exceptionprotected void doClose()
throws java.lang.Exception
AbstractChannelChanneldoClose in class AbstractChanneljava.lang.Exceptionprotected void doBeginRead()
throws java.lang.Exception
AbstractChanneldoBeginRead in class AbstractChanneljava.lang.Exceptionprotected AbstractChannel.AbstractUnsafe newUnsafe()
AbstractChannelAbstractChannel.AbstractUnsafe instance which will be used for the life-time of the ChannelnewUnsafe in class AbstractChannelprotected void doWrite(ChannelOutboundBuffer in) throws java.lang.Exception
AbstractChanneldoWrite in class AbstractChanneljava.lang.Exceptionprotected void handleOutboundMessage(java.lang.Object msg)
doWrite(ChannelOutboundBuffer)protected void handleInboundMessage(java.lang.Object msg)