| 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<Channel> { | 
|   | 
|     @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<Map<String, Object>> coolTrackAttr = channel.attr(ChannelAttrKey.DATA_MAP_ATTR); | 
|         Map<String, Object> trackMap = new HashMap<>(); | 
|         coolTrackAttr.setIfAbsent(trackMap); | 
|     } | 
|   | 
| } |