package com.zy.acs.gateway; import com.zy.acs.gateway.cache.ChannelAttrKey; import com.zy.acs.gateway.config.SystemProperties; import com.zy.acs.gateway.handler.*; import com.zy.acs.gateway.handler.coder.ProtocolDecoder; import com.zy.acs.gateway.handler.coder.ProtocolEncoder; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelInitializer; import io.netty.handler.timeout.IdleStateHandler; import io.netty.util.Attribute; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; /** * handler管道 * 控制所有netty handler流向 * 待完成: 动态管理handler * Created by vincent on 2019-04-02 */ @Component @ChannelHandler.Sharable public class HandlerInitializer extends ChannelInitializer { @Autowired private SystemProperties systemProperties; @Autowired private ProtocolEncoder protocolEncoder; @Autowired private ValidateHandler validateHandler; @Autowired private MessageBodyHandler messageBodyHandler; @Autowired private AgvAuthHandler agvAuthHandler; @Autowired private AgvPackageServerHandler agvPackageServerHandler; @Autowired private ProtectorHandler protectorHandler; /** * Set some channel handlers on channel pipeline */ @Override protected void initChannel(Channel channel) { channel.pipeline() // 心跳 .addLast(new IdleStateHandler(systemProperties.getHeartSeconds(), 0, 0)) // 编码器 .addLast(protocolEncoder) // 解码器 .addLast(new ProtocolDecoder(4096)) // 校验码处理器 .addLast(validateHandler) // 报文分解处理器 .addLast(messageBodyHandler) // 认证处理器 .addLast(agvAuthHandler) // 业务处理器 .addLast(agvPackageServerHandler) // 通道保护器 .addLast(protectorHandler) ; // Channel局部变量,相当于线程的ThreadLocal // initAttrTrack(channel); } /** * Init channel attr track */ private void initAttrTrack(Channel channel){ Attribute> coolTrackAttr = channel.attr(ChannelAttrKey.DATA_MAP_ATTR); Map trackMap = new HashMap<>(); coolTrackAttr.setIfAbsent(trackMap); } }