| 
					
				 | 
			
			
				@@ -0,0 +1,38 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package cn.nosum.gateway.handler.build; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.nosum.common.annotation.Adaptive; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.nosum.gateway.handler.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import io.netty.channel.ChannelInitializer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import io.netty.channel.socket.SocketChannel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import io.netty.handler.codec.http.HttpObjectAggregator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import io.netty.handler.codec.http.HttpRequestDecoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import io.netty.handler.codec.http.HttpResponseEncoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Adaptive 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class ContextHandlerBuilder implements HandlerBuilder{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Logger logger= LoggerFactory.getLogger(this.getClass()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static ChannelInitializer<SocketChannel> channelInitializer=null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public ChannelInitializer<SocketChannel> build() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (channelInitializer==null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            channelInitializer = new ChannelInitializer<SocketChannel>() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 客户端初始化处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                protected void initChannel(SocketChannel client) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // Netty对HTTP协议的封装,顺序有要求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    client.pipeline().addLast(new HttpRequestDecoder()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    client.pipeline().addLast(new HttpObjectAggregator(65535));//将多个消息转化成一个 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    client.pipeline().addLast(new HttpResponseEncoder()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    client.pipeline().addLast(new FullHttpRequestHandler()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    client.pipeline().addLast(new SlotProcessHandler()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // TODO 根据激活扩展点优化 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    client.pipeline().addLast(new PreProcessHandler()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    client.pipeline().addLast(new FinalProcessHandler()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return channelInitializer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |