package com.zy.core.netty; import com.core.common.SnowflakeIdWorker; import com.zy.core.netty.cache.ChannelAttrKey; import com.zy.core.netty.handle.PackageServerHandler; import com.zy.core.netty.handle.ProtectorHandler; import com.zy.core.netty.handle.ProtocolDecoder; import com.zy.core.netty.handle.ProtocolEncoder; import com.zy.core.netty.properties.TcpProperties; 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 SnowflakeIdWorker snowflakeIdWorker; @Autowired private TcpProperties tcpProperties; @Autowired private ProtocolEncoder protocolEncoder; @Autowired private PackageServerHandler packageServerHandler; @Autowired private ProtectorHandler protectorHandler; /** * Set some channel handlers on channel pipeline */ @Override protected void initChannel(Channel channel) { channel.pipeline() // 心跳 .addLast(new IdleStateHandler(tcpProperties.getHeartSeconds(), 0, 0)) // 编码器 .addLast(protocolEncoder) // 解码器 .addLast(new ProtocolDecoder(snowflakeIdWorker)) // 校验码处理器 // .addLast(validateHandler) // 认证处理器 // .addLast(vehAuthHandler) // 业务处理器 .addLast(packageServerHandler) // 通道保护器 .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); } }