You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

46 lines
1.6 KiB

package com.bx.imserver.netty;
import io.netty.channel.ChannelHandlerContext;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class UserChannelCtxMap {
/**
* 维护userId和ctx的关联关系,格式:Map<userId,map<terminal,ctx>>
*/
private static Map<Long, Map<Integer, ChannelHandlerContext>> channelMap = new ConcurrentHashMap();
public static void addChannelCtx(Long userId, Integer channel, ChannelHandlerContext ctx) {
channelMap.computeIfAbsent(userId, key -> new ConcurrentHashMap()).put(channel, ctx);
}
public static void removeChannelCtx(Long userId, Integer terminal) {
if (userId != null && terminal != null && channelMap.containsKey(userId)) {
Map<Integer, ChannelHandlerContext> userChannelMap = channelMap.get(userId);
userChannelMap.remove(terminal);
if (userChannelMap.isEmpty()) {
channelMap.remove(userId);
}
}
}
public static ChannelHandlerContext getChannelCtx(Long userId, Integer terminal) {
if (userId != null && terminal != null && channelMap.containsKey(userId)) {
Map<Integer, ChannelHandlerContext> userChannelMap = channelMap.get(userId);
if (userChannelMap.containsKey(terminal)) {
return userChannelMap.get(terminal);
}
}
return null;
}
public static Map<Integer, ChannelHandlerContext> getChannelCtx(Long userId) {
if (userId == null) {
return null;
}
return channelMap.get(userId);
}
}