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 { 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; } }