update 将桩与连接channel的关系改为一对多

This commit is contained in:
Lemon
2025-05-27 10:34:35 +08:00
parent 8ec72f0f12
commit 9731a53205
6 changed files with 333 additions and 9 deletions

View File

@@ -1,11 +1,17 @@
package com.jsowell.common.enums.ykc;
import com.google.common.collect.Lists;
import com.jsowell.common.util.StringUtils;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelId;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -18,6 +24,9 @@ public class PileChannelEntity {
* 管理一个全局map保存连接进服务端的通道数量
*/
private static final ConcurrentHashMap<String, ChannelHandlerContext> manager = new ConcurrentHashMap<>();
// 桩号--channelId 一对多
public static final ConcurrentHashMap<String, List<ChannelHandlerContext>> pileMap = new ConcurrentHashMap<>();
/**
* 校验channel是否保存
@@ -49,6 +58,38 @@ public class PileChannelEntity {
}
}
public static void checkChannelV2(String pileSn, ChannelHandlerContext ctx) {
List<ChannelHandlerContext> list = pileMap.get(pileSn);
// 如果该桩当前没有保存过该channel则进行保存
if (!list.contains(ctx)) {
list.add(ctx);
pileMap.put(pileSn, list);
}
}
/**
* 删除某台桩的某个channel连接
* @param pileSn
* @param ctx
*/
public static void deleteChannel(String pileSn, ChannelHandlerContext ctx) {
String channelId = ctx.channel().id().asLongText();
// 从map中删除该ctx
List<ChannelHandlerContext> list = pileMap.get(pileSn);
if (CollectionUtils.isEmpty(list)) {
return;
}
for (ChannelHandlerContext channelHandlerContext : list) {
String id = channelHandlerContext.channel().id().asLongText();
if (StringUtils.equals(id, channelId)) {
// 传来的channelId与已保存的channel中有一致的进行删除
list.remove(channelHandlerContext);
// 同时关闭连接
channelHandlerContext.close();
}
}
}
/**
* 通过桩编号获取channel链接信息
* @param pileSn