package com.intrbiz.bergamot.check.tcp; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import java.util.function.Consumer; import org.apache.log4j.Logger; public class TCPClientHandler extends ChannelInboundHandlerAdapter { private Logger logger = Logger.getLogger(TCPClientHandler.class); private long opened; private long connected; private Consumer<TCPCheckResponse> responseHandler; private Consumer<Throwable> errorHandler; public TCPClientHandler(Consumer<TCPCheckResponse> responseHandler, Consumer<Throwable> errorHandler) { super(); this.responseHandler = responseHandler; this.errorHandler = errorHandler; } @Override public void channelRegistered(ChannelHandlerContext ctx) throws Exception { System.out.println(System.currentTimeMillis() + ": Channel opened: " + ctx.channel().isOpen()); this.opened = System.currentTimeMillis(); } @Override public void channelActive(ChannelHandlerContext ctx) { System.out.println(System.currentTimeMillis() + ": TCP Connection connected"); this.connected = System.currentTimeMillis(); // invoke the response this.responseHandler.accept(new TCPCheckResponse(this.connected - this.opened)); // close if (ctx.channel().isActive()) ctx.close(); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { // TODO } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { logger.debug("Error processing HTTP request: " + cause); // invoke the callback this.errorHandler.accept(cause); } }