@Override public EventExecutor executor() { if (executor == null) { return channel().eventLoop(); } else { return executor; } }
@Override public <T> Attribute<T> attr(AttributeKey<T> key) { return channel().attr(key); }
@Override public EventExecutor executor() { if (executor == null) { return channel().eventLoop(); } else { return executor; } }
@Override public <T> Attribute<T> attr(AttributeKey<T> key) { return channel().attr(key); }
@Override public ChannelPromise voidPromise() { return channel().voidPromise(); }
@Override public <T> boolean hasAttr(AttributeKey<T> key) { return channel().hasAttr(key); }
@Override public String toString() { return StringUtil.simpleClassName(ChannelHandlerContext.class) + '(' + name + ", " + channel() + ')'; }
@Override public String toString() { return StringUtil.simpleClassName(ChannelHandlerContext.class) + '(' + name + ", " + channel() + ')'; }
@Override public ChannelFuture newSucceededFuture() { ChannelFuture succeededFuture = this.succeededFuture; if (succeededFuture == null) { this.succeededFuture = succeededFuture = new SucceededChannelFuture(channel(), executor()); } return succeededFuture; }
@Override public void run() { if (!channel().metadata().hasDisconnect()) { next.invokeClose(promise); } else { next.invokeDisconnect(promise); } } }, promise, null);
@Override public ChannelPromise newPromise() { return new DefaultChannelPromise(channel(), executor()); }
@Override public ChannelProgressivePromise newProgressivePromise() { return new DefaultChannelProgressivePromise(channel(), executor()); }
@Override public ChannelFuture newFailedFuture(Throwable cause) { return new FailedChannelFuture(channel(), executor(), cause); }
@Override public ByteBufAllocator alloc() { return channel().config().getAllocator(); }
@Override public void run() { if (!channel().metadata().hasDisconnect()) { next.invokeClose(promise); } else { next.invokeDisconnect(promise); } } }, promise, null);
@Override public ChannelFuture newSucceededFuture() { ChannelFuture succeededFuture = this.succeededFuture; if (succeededFuture == null) { this.succeededFuture = succeededFuture = new SucceededChannelFuture(channel(), executor()); } return succeededFuture; }
@Override public ChannelProgressivePromise newProgressivePromise() { return new DefaultChannelProgressivePromise(channel(), executor()); }
@Override public ByteBufAllocator alloc() { return channel().config().getAllocator(); }
@Override public ChannelPromise newPromise() { return new DefaultChannelPromise(channel(), executor()); }
@Override public ChannelHandlerContext flush() { final AbstractChannelHandlerContext next = findContextOutbound(); EventExecutor executor = next.executor(); if (executor.inEventLoop()) { next.invokeFlush(); } else { Tasks tasks = next.invokeTasks; if (tasks == null) { next.invokeTasks = tasks = new Tasks(next); } safeExecute(executor, tasks.invokeFlushTask, channel().voidPromise(), null); } return this; }