package com.zy.core.netty.cache; 
 | 
  
 | 
import io.netty.channel.Channel; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.springframework.web.bind.annotation.RestController; 
 | 
  
 | 
import java.util.Map; 
 | 
import java.util.concurrent.ConcurrentHashMap; 
 | 
  
 | 
/** 
 | 
 * Channel缓存 ==>> { 
 | 
 *                   key: uuid 
 | 
 *                   value: Channel 
 | 
 *                 } 
 | 
 * Created by vincent on 2019-04-02 
 | 
 */ 
 | 
@Slf4j 
 | 
@RestController 
 | 
public class ChannelCache { 
 | 
  
 | 
    private static Map<String, Channel> channelGroup = new ConcurrentHashMap<>(); 
 | 
  
 | 
    public static void setChannel(String uuid, Channel channel){ 
 | 
        // todo 缓存标记 ===>> 分布式系统 
 | 
//        String hostName = SystemProperties.HOST_NAME; 
 | 
        if (getChannel(uuid) == channel){ 
 | 
            return; 
 | 
        } 
 | 
        removeChannel(uuid); 
 | 
        channelGroup.put(uuid, channel); 
 | 
    } 
 | 
  
 | 
    public static Channel getChannel(String uuid){ 
 | 
        return channelGroup.get(uuid); 
 | 
    } 
 | 
  
 | 
    public static void removeChannel(String uuid) { 
 | 
        Channel channel = getChannel(uuid); 
 | 
        if (null == channel){ 
 | 
            return; 
 | 
        } 
 | 
        channelGroup.remove(uuid); 
 | 
        channel.close(); 
 | 
    } 
 | 
  
 | 
    public static String removeChannel(Channel channel){ 
 | 
        String key = null; 
 | 
        for (Map.Entry<String, Channel> entry : channelGroup.entrySet()){ 
 | 
            if (entry.getValue() == channel){ 
 | 
                key = entry.getKey(); 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
        if (null != key){ 
 | 
            channelGroup.remove(key); 
 | 
            return key; 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
} 
 |