| 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; | 
|     } | 
|   | 
|   | 
|   | 
| } |