package com.manning.nettyinaction.chapter4; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.util.CharsetUtil; import java.util.concurrent.Executor; import java.util.concurrent.Executors; /** * Listing 4.5 and 4.6 of <i>Netty in Action</i> * * @author <a href="mailto:nmaurer@redhat.com">Norman Maurer</a> */ public class ChannelOperationExamples { /** * Listing 4.5 */ public static void writingToChannel() { Channel channel = null; // Get the channel reference from somewhere ByteBuf buf = Unpooled.copiedBuffer("your data", CharsetUtil.UTF_8); ChannelFuture cf = channel.writeAndFlush(buf); cf.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) { if (future.isSuccess()) { System.out.println("Write successful"); } else { System.err.println("Write error"); future.cause().printStackTrace(); } } }); } /** * Listing 4.6 */ public static void writingToChannelManyThreads() { final Channel channel = null; // Get the channel reference from somewhere final ByteBuf buf = Unpooled.copiedBuffer("your data", CharsetUtil.UTF_8).retain(); Runnable writer = new Runnable() { @Override public void run() { channel.writeAndFlush(buf.duplicate()); } }; Executor executor = Executors.newCachedThreadPool(); // write in one thread executor.execute(writer); // write in another thread executor.execute(writer); } }