12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package com.tidecloud.dataacceptance.service;
- import javax.xml.bind.DatatypeConverter;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.slf4j.MDC;
- import io.netty.buffer.ByteBuf;
- import io.netty.channel.Channel;
- import io.netty.channel.ChannelHandlerContext;
- /**
- * 16 进制 2进制 抽象
- */
- public abstract class HexBinaryAcceptanceHandlerAdapter extends AcceptanceInboundHandlerAdapter {
- private static final Logger logger = LoggerFactory.getLogger(HexBinaryAcceptanceHandlerAdapter.class);
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
- ByteBuf in = (ByteBuf) msg;
- if (!in.isReadable()) {
- return;
- }
- printAcceptanceData(in, ctx);
- try {
- handle(in, ctx.channel());
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- } finally {
- in.release();
- //ReferenceCountUtil.release(msg);// 显示丢弃已经接受的消息
- }
- ctx.flush();
- }
- protected void printAcceptanceData(ByteBuf dataByteBuf, ChannelHandlerContext ctx) {
- //ByteBuf dataByteBufCopy = dataByteBuf.copy();
- dataByteBuf.markReaderIndex();
- byte[] dataByteArray = new byte[dataByteBuf.readableBytes()];
- dataByteBuf.readBytes(dataByteArray);
- String printHexBinary = DatatypeConverter.printHexBinary(dataByteArray);
- if (channelDeviceMap.get(ctx.channel()) != null) {
- MDC.put(MDC_DEVICEID, channelDeviceMap.get(ctx.channel()));
- logger.info("设备: [{}] 传入数据为 : {}", channelDeviceMap.get(ctx.channel()), printHexBinary);
- } else {
- logger.info("设备传入数据为 : {}", printHexBinary);
- }
- dataByteBuf.resetReaderIndex();
- //dataByteBufCopy.release();
- }
- abstract protected void handle(ByteBuf in, Channel channel) throws Exception;
- }
|