package org.fastcatsearch.transport.common; import org.jboss.netty.channel.ChannelEvent; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelStateEvent; import org.jboss.netty.channel.ChildChannelStateEvent; import org.jboss.netty.channel.ExceptionEvent; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.channel.SimpleChannelHandler; import org.jboss.netty.channel.WriteCompletionEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CheckPointHandler extends SimpleChannelHandler { private Logger logger; public CheckPointHandler(String name){ logger = LoggerFactory.getLogger(name); } @Override public void handleUpstream( ChannelHandlerContext ctx, ChannelEvent e) throws Exception { logger.debug("{} handleUpstream e={}", this, e); if (e instanceof MessageEvent) { logger.debug("MessageEvent >> messageReceived"); messageReceived(ctx, (MessageEvent) e); } else if (e instanceof WriteCompletionEvent) { logger.debug("WriteCompletionEvent >> writeComplete"); WriteCompletionEvent evt = (WriteCompletionEvent) e; writeComplete(ctx, evt); } else if (e instanceof ChildChannelStateEvent) { ChildChannelStateEvent evt = (ChildChannelStateEvent) e; if (evt.getChildChannel().isOpen()) { logger.debug("ChildChannelStateEvent >> childChannelOpen"); childChannelOpen(ctx, evt); } else { logger.debug("ChildChannelStateEvent >> childChannelClosed"); childChannelClosed(ctx, evt); } } else if (e instanceof ChannelStateEvent) { ChannelStateEvent evt = (ChannelStateEvent) e; switch (evt.getState()) { case OPEN: if (Boolean.TRUE.equals(evt.getValue())) { logger.debug("ChannelStateEvent >> channelOpen"); channelOpen(ctx, evt); } else { logger.debug("ChannelStateEvent >> channelClosed"); channelClosed(ctx, evt); } break; case BOUND: if (evt.getValue() != null) { logger.debug("ChannelStateEvent >> channelBound"); channelBound(ctx, evt); } else { logger.debug("ChannelStateEvent >> channelUnbound"); channelUnbound(ctx, evt); } break; case CONNECTED: if (evt.getValue() != null) { logger.debug("ChannelStateEvent >> channelConnected"); channelConnected(ctx, evt); } else { logger.debug("ChannelStateEvent >> channelDisconnected"); channelDisconnected(ctx, evt); } break; case INTEREST_OPS: logger.debug("ChannelStateEvent >> channelInterestChanged"); channelInterestChanged(ctx, evt); break; default: logger.debug("ChannelStateEvent >> sendUpstream"); ctx.sendUpstream(e); } } else if (e instanceof ExceptionEvent) { logger.debug("ExceptionEvent >> exceptionCaught"); exceptionCaught(ctx, (ExceptionEvent) e); } else { logger.debug("------ >> sendUpstream"); ctx.sendUpstream(e); } } @Override public void handleDownstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception { logger.debug("handleDownstream e={}", e); if (e instanceof MessageEvent) { logger.debug("MessageEvent >> writeRequested"); writeRequested(ctx, (MessageEvent) e); } else if (e instanceof ChannelStateEvent) { ChannelStateEvent evt = (ChannelStateEvent) e; switch (evt.getState()) { case OPEN: if (!Boolean.TRUE.equals(evt.getValue())) { logger.debug("ChannelStateEvent >> closeRequested"); closeRequested(ctx, evt); } break; case BOUND: if (evt.getValue() != null) { logger.debug("ChannelStateEvent >> bindRequested"); bindRequested(ctx, evt); } else { logger.debug("ChannelStateEvent >> unbindRequested"); unbindRequested(ctx, evt); } break; case CONNECTED: if (evt.getValue() != null) { logger.debug("ChannelStateEvent >> connectRequested"); connectRequested(ctx, evt); } else { logger.debug("ChannelStateEvent >> disconnectRequested"); disconnectRequested(ctx, evt); } break; case INTEREST_OPS: logger.debug("ChannelStateEvent >> setInterestOpsRequested"); setInterestOpsRequested(ctx, evt); break; default: logger.debug("ChannelStateEvent >> sendDownstream"); ctx.sendDownstream(e); } } else { logger.debug("------ >> sendDownstream"); ctx.sendDownstream(e); } } }