/** * Copyright (c) 2013 by 苏州科大国创信息技术有限公司. */ package com.ustcinfo.netty.object.simple; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; /** * Handler implementation for the object echo client. It initiates the * ping-pong traffic between the object echo client and server by sending the * first message to the server. * * Create on @2013-8-15 @上午10:13:16 * @author bsli@ustcinfo.com */ public class ObjectEchoClientHandler extends ChannelInboundHandlerAdapter { private static final Logger logger = Logger.getLogger( ObjectEchoClientHandler.class.getName()); private final List<Integer> firstMessage; /** * Creates a client-side handler. */ public ObjectEchoClientHandler(int firstMessageSize) { if (firstMessageSize <= 0) { throw new IllegalArgumentException( "firstMessageSize: " + firstMessageSize); } firstMessage = new ArrayList<Integer>(firstMessageSize); for (int i = 0; i < firstMessageSize; i ++) { firstMessage.add(Integer.valueOf(i)); } } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { // Send the first message if this handler is a client-side handler. ctx.writeAndFlush(firstMessage); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { // Echo back the received object to the server. ctx.write(msg); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { ctx.flush(); } @Override public void exceptionCaught( ChannelHandlerContext ctx, Throwable cause) throws Exception { logger.log( Level.WARNING, "Unexpected exception from downstream.", cause); ctx.close(); } }