New file |
| | |
| | | package com.zy.acs.gateway.mock; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.zy.acs.common.domain.protocol.AGV_12_UP; |
| | | import com.zy.acs.common.domain.protocol.IMessageBody; |
| | | import com.zy.acs.common.utils.Utils; |
| | | import com.zy.acs.framework.common.RadixTools; |
| | | import com.zy.acs.gateway.constant.ProtocolType; |
| | | import com.zy.acs.gateway.domain.AgvPackage; |
| | | import com.zy.acs.gateway.handler.MessageBodyHandler; |
| | | import com.zy.acs.gateway.handler.coder.ProtocolDecoder; |
| | | import io.netty.buffer.ByteBuf; |
| | | import io.netty.buffer.ByteBufAllocator; |
| | | import io.netty.channel.ChannelHandlerContext; |
| | | |
| | | public class ParseProtocolUtils { |
| | | |
| | | public static void main(String[] args) { |
| | | String protocolMsg = "AA30000F0000003DF06C67124B000000DCFFDDFF358EB043000029BAC0358EB043000000000000000000000000A6FF40020C031909"; |
| | | |
| | | byte[] bytes = RadixTools.hexStringToBytes(protocolMsg); |
| | | |
| | | ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(256); |
| | | |
| | | buffer.writeBytes(bytes); |
| | | |
| | | |
| | | ProtocolDecoder protocolDecoder = new ProtocolDecoder(1024); |
| | | |
| | | AgvPackage pac = AgvPackage.valueOfEmpty(); |
| | | pac.setSourceBuff(buffer); |
| | | |
| | | protocolDecoder.analyzeProtocol(pac); |
| | | |
| | | |
| | | Boolean b = msgChannelRead(pac); |
| | | |
| | | |
| | | System.out.println(JSON.toJSONString(pac)); |
| | | |
| | | IMessageBody messageBody = pac.getBody().getMessageBody(); |
| | | if (messageBody instanceof AGV_12_UP) { |
| | | AGV_12_UP agv_12_up = (AGV_12_UP) messageBody; |
| | | System.out.println(agv_12_up.getQrCode()); |
| | | } |
| | | } |
| | | |
| | | |
| | | private static Boolean msgChannelRead(AgvPackage pac) { |
| | | String namespace = IMessageBody.class.getPackage().getName(); |
| | | |
| | | ProtocolType protocolType = pac.getHeader().getProtocolType(); |
| | | |
| | | |
| | | if (null == protocolType) { |
| | | |
| | | // 未知包 |
| | | return Boolean.FALSE; |
| | | } |
| | | |
| | | String className = namespace + ".AGV_" + Utils.zeroFill(Integer.toHexString(protocolType.getCode()).toUpperCase(), 2) |
| | | +"_" |
| | | |
| | | + pac.getHeader().getProtocolType().getDirection().toString().toUpperCase(); |
| | | |
| | | Class<?> cls = null; |
| | | try { |
| | | |
| | | |
| | | cls = Class.forName(className);; |
| | | |
| | | } catch (ClassNotFoundException e) { |
| | | |
| | | |
| | | return Boolean.FALSE; |
| | | } |
| | | |
| | | Object obj = null; |
| | | |
| | | if (null != cls) { |
| | | |
| | | |
| | | try { |
| | | obj = cls.newInstance(); |
| | | |
| | | } catch (ReflectiveOperationException reflectiveOperationException) { |
| | | |
| | | // 。。。 |
| | | return Boolean.FALSE; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | ByteBuf contentBuf = pac.getBody().getContent(); contentBuf.markReaderIndex(); // sign |
| | | // body.buf 属于切片获取, slice 与 channel中的缓冲区 为同一 refenec |
| | | |
| | | |
| | | |
| | | contentBuf.resetReaderIndex(); |
| | | |
| | | int len= contentBuf.readableBytes(); |
| | | |
| | | byte[] bytes = new byte[len]; |
| | | |
| | | |
| | | |
| | | pac.getBody().getContent().readBytes(bytes); |
| | | |
| | | |
| | | |
| | | // 读取字节数组 ===>> 实际报文类型 |
| | | IMessageBody iMessageBody = null; |
| | | |
| | | if (null != obj) { |
| | | |
| | | if ( obj instanceof IMessageBody) { |
| | | |
| | | iMessageBody = (IMessageBody) obj; |
| | | |
| | | |
| | | iMessageBody.readFromBytes(bytes); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | pac.getBody().setMessageBody(iMessageBody); contentBuf.resetReaderIndex(); |
| | | |
| | | return true; |
| | | } |
| | | |
| | | } |
| | | |
| | | // AA 30000F0000001DEE6C67120B0000001200EDFF8340B5420100E76FC28340B542000000000000000000000000A6FF40020C030674 |