diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java index a5cdb29..0826d29 100644 --- a/src/main/java/com/casic/handler/ReceiverDecoder.java +++ b/src/main/java/com/casic/handler/ReceiverDecoder.java @@ -3,6 +3,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToMessageDecoder; import lombok.extern.slf4j.Slf4j; @@ -15,10 +16,29 @@ * @create: 2019-01-11 15:15 **/ @Slf4j -public class ReceiverDecoder extends MessageToMessageDecoder { +public class ReceiverDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { - log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); - out.add(msg.toString(Charset.defaultCharset())); + if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) { +// log.info(" String : " + msg.toString(Charset.defaultCharset())); +// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) { + pareDeviceHex(msg); +// out.add(msg); +// } + } } + + private static void pareDeviceHex(ByteBuf byteBuf) { + //去掉补位 + log.info(" String : " + byteBuf.toString(Charset.defaultCharset())); + String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset()); + log.info(" devcode : " + devcode); + byteBuf.resetReaderIndex();//重置位判断 + String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset()); + log.info(" valueStr : " + valueStr); + long defaultValue = Long.valueOf(valueStr); + log.info("设备编号为" + devcode + ",设备数据为" + defaultValue); +// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue); + } + } diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java index a5cdb29..0826d29 100644 --- a/src/main/java/com/casic/handler/ReceiverDecoder.java +++ b/src/main/java/com/casic/handler/ReceiverDecoder.java @@ -3,6 +3,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToMessageDecoder; import lombok.extern.slf4j.Slf4j; @@ -15,10 +16,29 @@ * @create: 2019-01-11 15:15 **/ @Slf4j -public class ReceiverDecoder extends MessageToMessageDecoder { +public class ReceiverDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { - log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); - out.add(msg.toString(Charset.defaultCharset())); + if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) { +// log.info(" String : " + msg.toString(Charset.defaultCharset())); +// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) { + pareDeviceHex(msg); +// out.add(msg); +// } + } } + + private static void pareDeviceHex(ByteBuf byteBuf) { + //去掉补位 + log.info(" String : " + byteBuf.toString(Charset.defaultCharset())); + String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset()); + log.info(" devcode : " + devcode); + byteBuf.resetReaderIndex();//重置位判断 + String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset()); + log.info(" valueStr : " + valueStr); + long defaultValue = Long.valueOf(valueStr); + log.info("设备编号为" + devcode + ",设备数据为" + defaultValue); +// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue); + } + } diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java index 17dd948..6894a00 100644 --- a/src/main/java/com/casic/handler/ReceiverServer.java +++ b/src/main/java/com/casic/handler/ReceiverServer.java @@ -10,6 +10,8 @@ import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.LineBasedFrameDecoder; import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -52,7 +54,9 @@ serverBootstrap.childHandler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel socketChannel) { - socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024)); +// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024)); + socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO)); + socketChannel.pipeline().addLast(new ReceiverDecoder()); socketChannel.pipeline().addLast(new StringDecoder()); socketChannel.pipeline().addLast(receiverServerHandler); } diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java index a5cdb29..0826d29 100644 --- a/src/main/java/com/casic/handler/ReceiverDecoder.java +++ b/src/main/java/com/casic/handler/ReceiverDecoder.java @@ -3,6 +3,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToMessageDecoder; import lombok.extern.slf4j.Slf4j; @@ -15,10 +16,29 @@ * @create: 2019-01-11 15:15 **/ @Slf4j -public class ReceiverDecoder extends MessageToMessageDecoder { +public class ReceiverDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { - log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); - out.add(msg.toString(Charset.defaultCharset())); + if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) { +// log.info(" String : " + msg.toString(Charset.defaultCharset())); +// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) { + pareDeviceHex(msg); +// out.add(msg); +// } + } } + + private static void pareDeviceHex(ByteBuf byteBuf) { + //去掉补位 + log.info(" String : " + byteBuf.toString(Charset.defaultCharset())); + String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset()); + log.info(" devcode : " + devcode); + byteBuf.resetReaderIndex();//重置位判断 + String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset()); + log.info(" valueStr : " + valueStr); + long defaultValue = Long.valueOf(valueStr); + log.info("设备编号为" + devcode + ",设备数据为" + defaultValue); +// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue); + } + } diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java index 17dd948..6894a00 100644 --- a/src/main/java/com/casic/handler/ReceiverServer.java +++ b/src/main/java/com/casic/handler/ReceiverServer.java @@ -10,6 +10,8 @@ import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.LineBasedFrameDecoder; import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -52,7 +54,9 @@ serverBootstrap.childHandler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel socketChannel) { - socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024)); +// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024)); + socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO)); + socketChannel.pipeline().addLast(new ReceiverDecoder()); socketChannel.pipeline().addLast(new StringDecoder()); socketChannel.pipeline().addLast(receiverServerHandler); } diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java index 5868fd5..f432e06 100644 --- a/src/main/java/com/casic/handler/ReceiverServerHandler.java +++ b/src/main/java/com/casic/handler/ReceiverServerHandler.java @@ -49,15 +49,19 @@ // msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr); } - //ByteBuf byteBuf +// //ByteBuf byteBuf public static void main(String[] main) { byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94, 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44}; ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer(); out.writeBytes(hexBytes); - pareDeviceHex(out); + + if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) { + pareDeviceHex(out); + } } + private static void pareDeviceHex(ByteBuf byteBuf) { //去掉补位 String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8)); @@ -71,7 +75,8 @@ long tempLong = byteBuf.readByte() & 0xff; defaultValue = defaultValue * 256 + tempLong; } - System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue); + log.info("设备编号为" + devcode + ",设备数据为" + defaultValue); +// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue); }