FreeClientHandler.java 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package cn.com.zyjblogs.chat.netty.handler;
  2. import cn.com.zyjblogs.chat.netty.channel.UserChannelContext;
  3. import cn.com.zyjblogs.chat.netty.po.Msg;
  4. import io.netty.channel.ChannelHandler;
  5. import io.netty.channel.ChannelHandlerContext;
  6. import io.netty.channel.ChannelInboundHandlerAdapter;
  7. import io.netty.handler.timeout.IdleStateEvent;
  8. import org.springframework.stereotype.Component;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. @Component
  12. @ChannelHandler.Sharable
  13. public class FreeClientHandler extends ChannelInboundHandlerAdapter {
  14. Logger logger = LoggerFactory.getLogger(FreeClientHandler.class);
  15. /***
  16. * 事件
  17. * @param ctx 上下文
  18. * @param evt 事件
  19. * @throws Exception
  20. */
  21. @Override
  22. public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
  23. if (evt instanceof IdleStateEvent){
  24. //将evt 向下转型 IdleStateEvent
  25. IdleStateEvent event = (IdleStateEvent) evt;
  26. String eventType = null;
  27. switch (event.state()){
  28. case READER_IDLE:
  29. eventType = "读空闲";
  30. break;
  31. case WRITER_IDLE:
  32. eventType = "读空闲";
  33. break;
  34. case ALL_IDLE:
  35. eventType = "读写空闲";
  36. break;
  37. default:
  38. eventType = "类型未识别";
  39. break;
  40. }
  41. logger.info("{}",ctx.channel().remoteAddress()+"--TimeOut Type--"+eventType);
  42. //如果发生空闲,我们关闭通道
  43. Msg.DataContent build = Msg.DataContent.newBuilder().setDataType(Msg.DataContent.DataType.CLOSING).build();
  44. ctx.writeAndFlush(build);
  45. ctx.close();
  46. }
  47. }
  48. }