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