// Path: redant-core/src/main/java/com/redant/core/context/RedantContext.java
// public class RedantContext {
// 
//     private static final Logger LOGGER = LoggerFactory.getLogger(RedantContext.class);
// 
//     /**
//      * 使用FastThreadLocal替代JDK自带的ThreadLocal以提升并发性能
//      */
//     private static final FastThreadLocal<RedantContext> CONTEXT_HOLDER = new FastThreadLocal<>();
// 
//     private HttpRequest request;
// 
//     private ChannelHandlerContext context;
// 
//     private HttpResponse response;
// 
//     private Set<Cookie> cookies;
// 
//     private RedantContext(){
// 
//     }
// 
//     public RedantContext setRequest(HttpRequest request){
//         this.request = request;
//         return this;
//     }
// 
//     public RedantContext setContext(ChannelHandlerContext context){
//         this.context = context;
//         return this;
//     }
// 
//     public RedantContext setResponse(HttpResponse response){
//         this.response = response;
//         return this;
//     }
// 
//     public RedantContext addCookie(Cookie cookie){
//         if(cookie!=null){
//             if(CollectionUtil.isEmpty(cookies)){
//                 cookies = new HashSet<>();
//             }
//             cookies.add(cookie);
//         }
//         return this;
//     }
// 
//     public RedantContext addCookies(Set<Cookie> cookieSet){
//         if(CollectionUtil.isNotEmpty(cookieSet)){
//             if(CollectionUtil.isEmpty(cookies)){
//                 cookies = new HashSet<>();
//             }
//             cookies.addAll(cookieSet);
//         }
//         return this;
//     }
// 
//     public HttpRequest getRequest() {
//         return request;
//     }
// 
//     public ChannelHandlerContext getContext() {
//         return context;
//     }
// 
//     public HttpResponse getResponse() {
//         return response;
//     }
// 
//     public Set<Cookie> getCookies() {
//         return cookies;
//     }
// 
//     public static RedantContext currentContext(){
//         RedantContext context = CONTEXT_HOLDER.get();
//         if(context==null){
//             context = new RedantContext();
//             CONTEXT_HOLDER.set(context);
//         }
//         return context;
//     }
// 
//     public static void clear(){
//         CONTEXT_HOLDER.remove();
//     }
// 
// 
// }


import cn.hutool.core.util.StrUtil;
import com.redant.core.context.RedantContext;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.cookie.Cookie;
import io.netty.handler.codec.http.cookie.DefaultCookie;
import io.netty.handler.codec.http.cookie.ServerCookieDecoder;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
package com.redant.core.cookie;



/**
 * Cookie管理器
 *
 * @author houyi.wh
 * @date 2019-01-16
 */

public class DefaultCookieManager implements CookieManager {

    private static final class DefaultCookieManagerHolder {
        private static DefaultCookieManager cookieManager = new DefaultCookieManager();
    }

    private DefaultCookieManager() {

    }

    public static CookieManager getInstance() {
        return DefaultCookieManagerHolder.cookieManager;
    }


    @Override
    public Set<Cookie> getCookies() {
// Path: redant-core/src/main/java/com/redant/core/context/RedantContext.java
// public class RedantContext {
// 
//     private static final Logger LOGGER = LoggerFactory.getLogger(RedantContext.class);
// 
//     /**
//      * 使用FastThreadLocal替代JDK自带的ThreadLocal以提升并发性能
//      */
//     private static final FastThreadLocal<RedantContext> CONTEXT_HOLDER = new FastThreadLocal<>();
// 
//     private HttpRequest request;
// 
//     private ChannelHandlerContext context;
// 
//     private HttpResponse response;
// 
//     private Set<Cookie> cookies;
// 
//     private RedantContext(){
// 
//     }
// 
//     public RedantContext setRequest(HttpRequest request){
//         this.request = request;
//         return this;
//     }
// 
//     public RedantContext setContext(ChannelHandlerContext context){
//         this.context = context;
//         return this;
//     }
// 
//     public RedantContext setResponse(HttpResponse response){
//         this.response = response;
//         return this;
//     }
// 
//     public RedantContext addCookie(Cookie cookie){
//         if(cookie!=null){
//             if(CollectionUtil.isEmpty(cookies)){
//                 cookies = new HashSet<>();
//             }
//             cookies.add(cookie);
//         }
//         return this;
//     }
// 
//     public RedantContext addCookies(Set<Cookie> cookieSet){
//         if(CollectionUtil.isNotEmpty(cookieSet)){
//             if(CollectionUtil.isEmpty(cookies)){
//                 cookies = new HashSet<>();
//             }
//             cookies.addAll(cookieSet);
//         }
//         return this;
//     }
// 
//     public HttpRequest getRequest() {
//         return request;
//     }
// 
//     public ChannelHandlerContext getContext() {
//         return context;
//     }
// 
//     public HttpResponse getResponse() {
//         return response;
//     }
// 
//     public Set<Cookie> getCookies() {
//         return cookies;
//     }
// 
//     public static RedantContext currentContext(){
//         RedantContext context = CONTEXT_HOLDER.get();
//         if(context==null){
//             context = new RedantContext();
//             CONTEXT_HOLDER.set(context);
//         }
//         return context;
//     }
// 
//     public static void clear(){
//         CONTEXT_HOLDER.remove();
//     }
// 
// 
// }


// Path: redant-core/src/main/java/com/redant/core/cookie/DefaultCookieManager.java
import cn.hutool.core.util.StrUtil;
import com.redant.core.context.RedantContext;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.cookie.Cookie;
import io.netty.handler.codec.http.cookie.DefaultCookie;
import io.netty.handler.codec.http.cookie.ServerCookieDecoder;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

package com.redant.core.cookie;



/**
 * Cookie管理器
 *
 * @author houyi.wh
 * @date 2019-01-16
 */

public class DefaultCookieManager implements CookieManager {

    private static final class DefaultCookieManagerHolder {
        private static DefaultCookieManager cookieManager = new DefaultCookieManager();
    }

    private DefaultCookieManager() {

    }

    public static CookieManager getInstance() {
        return DefaultCookieManagerHolder.cookieManager;
    }


    @Override
    public Set<Cookie> getCookies() {
        HttpRequest request = RedantContext.currentContext().getRequest();