package Netty; 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.util.concurrent.GlobalEventExecutor; import rtkanchor.Dell_jizhan; import rtkanchor.Dell_urt; import java.net.InetSocketAddress; import java.text.SimpleDateFormat; import java.util.Iterator; import Method.BaoWenShow; import Method.GetNowTime; import PbuliClass.Systems; public class GroupChatServerHandler extends SimpleChannelInboundHandler { static String tport=Systems.getTcpreceiveport();//ϵͳÉèÖô¦TCP½ÓÊÕ¶Ë¿Ú //¶¨ÒåÒ»¸öchannle ×飬¹ÜÀíËùÓеÄchannel //GlobalEventExecutor.INSTANCE) ÊÇÈ«¾ÖµÄʼþÖ´ÐÐÆ÷£¬ÊÇÒ»¸öµ¥Àý public static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //handlerAdded ±íʾÁ¬½Ó½¨Á¢£¬Ò»µ©Á¬½Ó£¬µÚÒ»¸ö±»Ö´ÐÐ //½«µ±Ç°channel ¼ÓÈëµ½ channelGroup @Override public void handlerAdded(ChannelHandlerContext ctx) throws Exception { Channel channel = ctx.channel(); //½«¸Ã¿Í»§¼ÓÈëÁÄÌìµÄÐÅÏ¢ÍÆË͸øÆäËüÔÚÏߵĿͻ§¶Ë /* ¸Ã·½·¨»á½« channelGroup ÖÐËùÓеÄchannel ±éÀú£¬²¢·¢ËÍ ÏûÏ¢£¬ÎÒÃDz»ÐèÒª×Ô¼º±éÀú */ channelGroup.add(channel); } //¶Ï¿ªÁ¬½Ó, ½«xx¿Í»§À뿪ÐÅÏ¢ÍÆË͸øµ±Ç°ÔÚÏߵĿͻ§ // @Override // public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { // // Channel channel = ctx.channel(); // channelGroup.writeAndFlush("[¿Í»§¶Ë]" + channel.remoteAddress() + " À뿪ÁË\n"); // System.out.println("channelGroup size" + channelGroup.size()); // // } //±íʾchannel ´¦Óڻ״̬, Ìáʾ xxÉÏÏß @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress(); String ip=insocket.getAddress().getHostAddress(); String port=String.valueOf(insocket.getPort()); InetSocketAddress insocket2 = (InetSocketAddress)ctx.channel().localAddress(); String port1=String.valueOf(insocket2.getPort()); String message=port1+","+ip+":"+port+",ÉÏÏßÁË,"+GetNowTime.now(); BaoWenShow.tcpshow(message,message); if(port1.equals(tport)) { Dell_urt.add_urt(ip, port); }else { Dell_jizhan.alertiport(port1, ip, port); } } //±íʾchannel ´¦ÓÚ²»»î¶¯×´Ì¬, Ìáʾ xxÀëÏßÁË @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress(); InetSocketAddress insocket2 = (InetSocketAddress)ctx.channel().localAddress(); String ip=insocket.getAddress().getHostAddress(); String port1=String.valueOf(insocket2.getPort()); String message=port1+","+ip+", ÀëÏßÁË,"+GetNowTime.now(); BaoWenShow.tcpshow(message,message); Dell_urt.delete(ip); if(Dell_jizhan.get_2ip_jizhan(ip) !=null) { Dell_jizhan.get_2ip_jizhan(ip).setState("ÀëÏß"); } } //¶ÁÈ¡Êý¾Ý @Override protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception { //»ñÈ¡µ½µ±Ç°channel Channel channel = ctx.channel(); //ÕâʱÎÒÃDZéÀúchannelGroup, ¸ù¾Ý²»Í¬µÄÇé¿ö£¬»ØËͲ»Í¬µÄÏûÏ¢ channelGroup.forEach(ch -> { if(channel != ch) { //²»Êǵ±Ç°µÄchannel,ת·¢ÏûÏ¢ ch.writeAndFlush("[¿Í»§]" + channel.remoteAddress() + " ·¢ËÍÁËÏûÏ¢" + msg + "\n"); }else {//»ØÏÔ×Ô¼º·¢Ë͵ÄÏûÏ¢¸ø×Ô¼º ch.writeAndFlush("[×Ô¼º]·¢ËÍÁËÏûÏ¢" + msg + "\n"); } }); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { //¹Ø±ÕͨµÀ ctx.close(); } /**»ñȡij¸öÉÏÏßµÄÉ豸¶ÔÏó*/ public static Channel get_chanel (String ip) { Channel channel=null; Iterator it=GroupChatServerHandler.channelGroup.iterator(); while(it.hasNext()) { Channel channel1=it.next(); InetSocketAddress insocket = (InetSocketAddress) channel1.remoteAddress(); String ip1=insocket.getAddress().getHostAddress(); if(ip1.equals(ip)) { channel=channel1; break; } } return channel; } }