NettyClientHandler.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package com.mes.netty;
  2. import com.mes.ui.MesClient;
  3. import com.mes.ui.MesRevice;
  4. import io.netty.channel.Channel;
  5. import io.netty.channel.ChannelHandlerContext;
  6. import io.netty.channel.ChannelInboundHandlerAdapter;
  7. import java.text.SimpleDateFormat;
  8. import java.util.Date;
  9. /**
  10. *处理网络通道的各种事件,如连接建立、数据读取、异常处理等
  11. *可以重写父类的方法来自定义事件处理逻辑,例如:
  12. *channelActive:处理连接激活事件
  13. *channelRead:处理接收到数据的事件
  14. *exceptionCaught:处理异常事件
  15. *作为Netty处理链中的一个节点,处理从网络接收的数据
  16. *这个类主要负责处理与MES服务器通信过程中的各种网络事件。
  17. */
  18. public class NettyClientHandler extends ChannelInboundHandlerAdapter {
  19. private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  20. public static byte[] responseByte;
  21. @Override
  22. public void channelActive(ChannelHandlerContext ctx) throws Exception {
  23. System.out.println("mes connecting:" + sdf.format(new Date()));
  24. }
  25. @Override
  26. public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
  27. Channel channel = ctx.channel();
  28. System.err.println("close tcp, ip:" + channel.remoteAddress());
  29. MesClient.tcp_connect_flag = false;
  30. MesClient.setTcpStatus();
  31. // 关闭通道
  32. channel.close();
  33. }
  34. @Override
  35. public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
  36. System.out.println("msg:"+msg);
  37. String mes_msg = formatResult(msg.toString());
  38. if(mes_msg == null || mes_msg.isEmpty()){ // error msg
  39. return;
  40. }
  41. String msg_type = ProtocolParam.getMsgType(mes_msg);
  42. System.out.println("msg_type="+msg_type);
  43. String processMsgRet = MesMsgUtils.processMsg(mes_msg, msg_type);
  44. System.out.println("processMsgRet="+processMsgRet);
  45. switch(msg_type) {
  46. case "AQDW": // 查询质量
  47. MesRevice.checkQualityRevice(processMsgRet,mes_msg);
  48. break;
  49. case "MKSW":
  50. MesRevice.startRevice(processMsgRet,mes_msg);
  51. break;
  52. case "MBDW":
  53. MesRevice.bindRevice(processMsgRet,mes_msg);
  54. break;
  55. case "MJBW":
  56. MesRevice.unbindRevice(processMsgRet,mes_msg);
  57. break;
  58. case "MQDW":
  59. MesRevice.updateResultRevice(processMsgRet,mes_msg);
  60. break;
  61. }
  62. }
  63. @Override
  64. public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
  65. ctx.close();
  66. }
  67. private String formatResult(String msg){
  68. System.err.println("length:" + msg.length() + " content:" + msg);
  69. String msgType = msg.substring(0,2).trim();
  70. if(msgType.equals("OK")){
  71. return msg.substring(3,msg.length());
  72. }else{
  73. return "";
  74. }
  75. }
  76. }