HexBinaryAcceptanceHandlerAdapter.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package com.tidecloud.dataacceptance.service;
  2. import javax.xml.bind.DatatypeConverter;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.slf4j.MDC;
  6. import io.netty.buffer.ByteBuf;
  7. import io.netty.channel.Channel;
  8. import io.netty.channel.ChannelHandlerContext;
  9. /**
  10. * 16 进制 2进制 抽象
  11. */
  12. public abstract class HexBinaryAcceptanceHandlerAdapter extends AcceptanceInboundHandlerAdapter {
  13. private static final Logger logger = LoggerFactory.getLogger(HexBinaryAcceptanceHandlerAdapter.class);
  14. @Override
  15. public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
  16. super.channelRead(ctx, msg);
  17. ByteBuf in = (ByteBuf) msg;
  18. if (!in.isReadable()) {
  19. return;
  20. }
  21. printAcceptanceData(in, ctx);
  22. try {
  23. handle(in, ctx.channel());
  24. } catch (Exception e) {
  25. logger.error(e.getMessage(), e);
  26. } finally {
  27. in.release();
  28. //ReferenceCountUtil.release(msg);// 显示丢弃已经接受的消息
  29. }
  30. ctx.flush();
  31. }
  32. protected void printAcceptanceData(ByteBuf dataByteBuf, ChannelHandlerContext ctx) {
  33. //ByteBuf dataByteBufCopy = dataByteBuf.copy();
  34. dataByteBuf.markReaderIndex();
  35. byte[] dataByteArray = new byte[dataByteBuf.readableBytes()];
  36. dataByteBuf.readBytes(dataByteArray);
  37. String printHexBinary = DatatypeConverter.printHexBinary(dataByteArray);
  38. if (channelDeviceMap.get(ctx.channel()) != null) {
  39. MDC.put(MDC_DEVICEID, channelDeviceMap.get(ctx.channel()));
  40. logger.info("设备: [{}] 传入数据为 : {}", channelDeviceMap.get(ctx.channel()), printHexBinary);
  41. } else {
  42. logger.info("设备传入数据为 : {}", printHexBinary);
  43. }
  44. dataByteBuf.resetReaderIndex();
  45. //dataByteBufCopy.release();
  46. }
  47. abstract protected void handle(ByteBuf in, Channel channel) throws Exception;
  48. }