import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.group.ChannelGroup; import io.netty.channel.group.DefaultChannelGroup; import io.netty.handler.ssl.SslHandler; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; import io.netty.util.concurrent.GlobalEventExecutor; import java.net.InetAddress; import java.util.HashMap; import java.util.Map; import backtype.storm.tuple.Tuple; import backtype.storm.tuple.Values; /** * Handles a server-side channel. */ public class NettySpoutServerHandler extends SimpleChannelInboundHandler<String> { static final ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); NettySpout spout; public NettySpoutServerHandler(NettySpout spout) { this.spout = spout; } @Override public void channelActive(final ChannelHandlerContext ctx) { // Once session is secured, send a greeting and register the channel to the global channel // list so the channel received the messages from others. ctx.pipeline().get(SslHandler.class).handshakeFuture().addListener( new GenericFutureListener<Future<Channel>>() { public void operationComplete(Future<Channel> future) throws Exception { ctx.writeAndFlush( "Welcome to " + InetAddress.getLocalHost().getHostName() + " secure remote monitoring service!\n"); ctx.writeAndFlush( "Your session is protected by " + ctx.pipeline().get(SslHandler.class).engine().getSession().getCipherSuite() + " cipher suite.\n"); channels.add(ctx.channel()); } }); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { cause.printStackTrace(); ctx.close(); } @Override // Message Receiver protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception { spout.messageReceived(ctx, msg); // Channel incoming = ctx.channel(); // //System.out.println("[" + incoming.remoteAddress() + "] " + msg + '\n'); // String host = incoming.remoteAddress().toString(); // Values message = new Values(host, msg); // spout.feedQueue.add(message); // // // Close the connection if the client has sent 'bye'. // if ("bye".equals(msg.toLowerCase())) { // ctx.close(); // } } }