All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
io.netty.microbench.channel.EmbeddedChannelHandlerContext Maven / Gradle / Ivy
/*
* Copyright 2017 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:
*
* https://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.microbench.channel;
import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.ChannelProgressivePromise;
import io.netty.channel.ChannelPromise;
import io.netty.channel.EventLoop;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.util.Attribute;
import io.netty.util.AttributeKey;
import io.netty.util.ReferenceCountUtil;
import io.netty.util.concurrent.EventExecutor;
import java.net.SocketAddress;
import static io.netty.util.internal.ObjectUtil.checkNotNull;
public abstract class EmbeddedChannelHandlerContext implements ChannelHandlerContext {
private static final String HANDLER_NAME = "microbench-delegator-ctx";
private final EventLoop eventLoop;
private final Channel channel;
private final ByteBufAllocator alloc;
private final ChannelHandler handler;
private SocketAddress localAddress;
protected EmbeddedChannelHandlerContext(ByteBufAllocator alloc, ChannelHandler handler, EmbeddedChannel channel) {
this.alloc = checkNotNull(alloc, "alloc");
this.channel = checkNotNull(channel, "channel");
this.handler = checkNotNull(handler, "handler");
this.eventLoop = checkNotNull(channel.eventLoop(), "eventLoop");
}
protected abstract void handleException(Throwable t);
@Override
public final Attribute attr(AttributeKey key) {
return null;
}
@Override
public final boolean hasAttr(AttributeKey key) {
return false;
}
@Override
public final Channel channel() {
return channel;
}
@Override
public final EventExecutor executor() {
return eventLoop;
}
@Override
public final String name() {
return HANDLER_NAME;
}
@Override
public final ChannelHandler handler() {
return handler;
}
@Override
public final boolean isRemoved() {
return false;
}
@Override
public final ChannelHandlerContext fireChannelRegistered() {
return this;
}
@Override
public final ChannelHandlerContext fireChannelUnregistered() {
return this;
}
@Override
public final ChannelHandlerContext fireChannelActive() {
return this;
}
@Override
public final ChannelHandlerContext fireChannelInactive() {
return this;
}
@Override
public final ChannelHandlerContext fireExceptionCaught(Throwable cause) {
try {
handler().exceptionCaught(this, cause);
} catch (Exception e) {
handleException(e);
}
return null;
}
@Override
public final ChannelHandlerContext fireUserEventTriggered(Object event) {
ReferenceCountUtil.release(event);
return this;
}
@Override
public final ChannelHandlerContext fireChannelRead(Object msg) {
ReferenceCountUtil.release(msg);
return this;
}
@Override
public final ChannelHandlerContext fireChannelReadComplete() {
return this;
}
@Override
public final ChannelHandlerContext fireChannelWritabilityChanged() {
return this;
}
@Override
public final ChannelFuture bind(SocketAddress localAddress) {
return bind(localAddress, newPromise());
}
@Override
public final ChannelFuture connect(SocketAddress remoteAddress) {
return connect(remoteAddress, newPromise());
}
@Override
public final ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) {
return connect(remoteAddress, localAddress, newPromise());
}
@Override
public final ChannelFuture disconnect() {
return disconnect(newPromise());
}
@Override
public final ChannelFuture close() {
return close(newPromise());
}
@Override
public final ChannelFuture deregister() {
return deregister(newPromise());
}
@Override
public final ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise) {
try {
channel().bind(localAddress, promise);
this.localAddress = localAddress;
} catch (Exception e) {
promise.setFailure(e);
handleException(e);
}
return promise;
}
@Override
public final ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise) {
try {
channel().connect(remoteAddress, localAddress, promise);
} catch (Exception e) {
promise.setFailure(e);
handleException(e);
}
return promise;
}
@Override
public final ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress,
ChannelPromise promise) {
try {
channel().connect(remoteAddress, localAddress, promise);
} catch (Exception e) {
promise.setFailure(e);
handleException(e);
}
return promise;
}
@Override
public final ChannelFuture disconnect(ChannelPromise promise) {
try {
channel().disconnect(promise);
} catch (Exception e) {
promise.setFailure(e);
handleException(e);
}
return promise;
}
@Override
public final ChannelFuture close(ChannelPromise promise) {
try {
channel().close(promise);
} catch (Exception e) {
promise.setFailure(e);
handleException(e);
}
return promise;
}
@Override
public final ChannelFuture deregister(ChannelPromise promise) {
try {
channel().deregister(promise);
} catch (Exception e) {
promise.setFailure(e);
handleException(e);
}
return promise;
}
@Override
public final ChannelHandlerContext read() {
try {
channel().read();
} catch (Exception e) {
handleException(e);
}
return this;
}
@Override
public ChannelFuture write(Object msg) {
return channel().write(msg);
}
@Override
public ChannelFuture write(Object msg, ChannelPromise promise) {
return channel().write(msg, promise);
}
@Override
public final ChannelHandlerContext flush() {
channel().flush();
return this;
}
@Override
public ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) {
return channel().writeAndFlush(msg, promise);
}
@Override
public ChannelFuture writeAndFlush(Object msg) {
return writeAndFlush(msg, newPromise());
}
@Override
public final ChannelPipeline pipeline() {
return channel().pipeline();
}
@Override
public final ByteBufAllocator alloc() {
return alloc;
}
@Override
public final ChannelPromise newPromise() {
return channel().newPromise();
}
@Override
public final ChannelProgressivePromise newProgressivePromise() {
return channel().newProgressivePromise();
}
@Override
public final ChannelFuture newSucceededFuture() {
return channel().newSucceededFuture();
}
@Override
public final ChannelFuture newFailedFuture(Throwable cause) {
return channel().newFailedFuture(cause);
}
@Override
public final ChannelPromise voidPromise() {
return channel().voidPromise();
}
}