| package com.zy.acs.gateway.handler; | 
|   | 
| import com.zy.acs.gateway.AbstractInboundHandler; | 
| import com.zy.acs.gateway.cache.ChannelCache; | 
| import com.zy.acs.gateway.config.SystemProperties; | 
| import com.zy.acs.gateway.constant.PacErrorType; | 
| import com.zy.acs.gateway.domain.AgvPackage; | 
| import com.zy.acs.gateway.utils.ValidUtil; | 
| import io.netty.buffer.ByteBuf; | 
| import io.netty.buffer.ByteBufUtil; | 
| import io.netty.channel.ChannelHandler; | 
| import io.netty.channel.ChannelHandlerContext; | 
| import org.slf4j.Logger; | 
| import org.slf4j.LoggerFactory; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
|   | 
| /** | 
|  * 协议校验码验证handler | 
|  * Created by vincent on 2019-04-02 | 
|  */ | 
| @Component("validateHandler") | 
| @ChannelHandler.Sharable | 
| public class ValidateHandler extends AbstractInboundHandler<AgvPackage> { | 
|   | 
|     private static final Logger log = LoggerFactory.getLogger(ValidateHandler.class); | 
|   | 
|     @Autowired | 
|     private SystemProperties systemProperties; | 
|   | 
|     @Override | 
|     protected boolean channelRead0(ChannelHandlerContext ctx, AgvPackage pac) { | 
|         if (pac.isErrorPac()) { | 
|             log.error("收到一个异常包[{}], 原始消息[{}]", pac.getPacErrorType().getDes(), pac.getSourceHexStr()); | 
|             return false; | 
|         } | 
|         ByteBuf buf = pac.getSourceBuff(); | 
|         if (systemProperties.isPrintPacLog()) { | 
|             log.info("Agv [{}] 上行 [{}] <<< {}", pac.getHeader().getUniqueNo(), pac.getHeader().getProtocolType().getDes(), ByteBufUtil.hexDump(buf).toUpperCase()); | 
|         } | 
|         // crc 计算包含帧头 | 
|         if(!ValidUtil.validPac(pac)) { | 
|             pac.setErrorPac(Boolean.TRUE).setPacErrorType(PacErrorType.PAC_VALID_ERROR); | 
|             log.error("收到一个校验异常包:{}", pac.toLogString()); | 
|             return false; | 
|         } | 
|   | 
|                 ChannelCache.setChannel(pac.getHeader().getUniqueNo(), ctx.channel()); | 
|   | 
|   | 
|         return true; | 
|     } | 
|   | 
|   | 
| } |