diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/constant/ExceptionConstant.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/constant/ExceptionConstant.java index c1cc6505..672ac778 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/constant/ExceptionConstant.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/constant/ExceptionConstant.java @@ -50,7 +50,7 @@ public enum ExceptionConstant { LOGIN_PASSWORD_NO_CHANGE_MODIFY_FAIL(12004, "密码没有变化,修改失败"), // 端口池管理(13000) PORT_CANNOT_REPEAT(13000,"端口不能重复"), - PORT_NOT_EXIST(13001, "该端口在端口池中不存在,不允许映射"), + PORT_NOT_EXIST(13001, "该端口在端口池中不存在"), // 端口映射管理(14000) PORT_MAPPING_NOT_EXIST(14000, "端口映射记录不存在"), PORT_CANNOT_REPEAT_MAPPING(14001, "服务端口[{}]不能重复映射"), diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/dal/PortMappingMapper.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/dal/PortMappingMapper.java index a69f4f72..c7946b71 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/dal/PortMappingMapper.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/dal/PortMappingMapper.java @@ -74,6 +74,10 @@ public interface PortMappingMapper extends SqlMapper { @Select("select * from port_mapping where license_id = ? and enable = 1") List findEnableListByLicenseId(Integer licenseId); + @ResultType(PortMappingDO.class) + @Select("select * from port_mapping where server_port = :serverPort") + List findListByServerPort(@Param("serverPort") Integer serverPort); + @ResultType(PortMappingDO.class) @Select("select * from port_mapping where license_id = ?") List findListByLicenseId(Integer licenseId); diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/dal/PortPoolMapper.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/dal/PortPoolMapper.java index 035aefd9..d3ecbf52 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/dal/PortPoolMapper.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/dal/PortPoolMapper.java @@ -62,4 +62,7 @@ public interface PortPoolMapper extends SqlMapper { @Select("select * from port_pool where port = ? limit 0,1") PortPoolDO findByPort(Integer port); + + @Select("select * from port_pool where id = ?") + PortPoolDO findById(Integer id); } diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/PortPoolService.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/PortPoolService.java index 39db97ba..53257fdb 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/PortPoolService.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/PortPoolService.java @@ -52,6 +52,8 @@ public class PortPoolService { @Autowired private PortPoolMapper portPoolMapper; + @Autowired + private VisitorChannelService visitorChannelService; public Page page(PageQuery pageQuery, PortPoolListReq req) { Page page = Page.create(pageQuery); @@ -75,19 +77,31 @@ public class PortPoolService { .setCreateTime(now) .setUpdateTime(now) ); + // 更新visitorChannel + visitorChannelService.updateVisitorChannelByPortPool(req.getPort(), EnableStatusEnum.ENABLE.getStatus()); return new PortPoolCreateRes(); } public PortPoolUpdateEnableStatusRes updateEnableStatus(PortPoolUpdateEnableStatusReq req) { - + PortPoolDO portPoolDO = portPoolMapper.findById(req.getId()); + ParamCheckUtil.checkNotNull(portPoolDO, ExceptionConstant.PORT_NOT_EXIST); portPoolMapper.updateEnableStatus(req.getId(), req.getEnable(), new Date()); + // 更新visitorChannel + visitorChannelService.updateVisitorChannelByPortPool(portPoolDO.getPort(), req.getEnable()); + return new PortPoolUpdateEnableStatusRes(); } public void delete(Integer id) { + PortPoolDO portPoolDO = portPoolMapper.findById(id); + ParamCheckUtil.checkNotNull(portPoolDO, ExceptionConstant.PORT_NOT_EXIST); + portPoolMapper.delete(id); + + // 更新visitorChannel + visitorChannelService.updateVisitorChannelByPortPool(portPoolDO.getPort(), EnableStatusEnum.DISABLE.getStatus()); } } diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/VisitorChannelService.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/VisitorChannelService.java index 64a9726f..1d2013cb 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/VisitorChannelService.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/service/VisitorChannelService.java @@ -92,6 +92,30 @@ public class VisitorChannelService { startUserPortServer(ProxyUtil.getAttachInfo(cmdChannel), portMappingList); } + /** + * 更新 + * 触发时机:删除端口池、禁用端口池、启用端口池 + * @param serverPort + * @param enable + */ + public void updateVisitorChannelByPortPool(Integer serverPort, Integer enable) { + if (null == serverPort) { + return; + } + List portMappingDOList = portMappingMapper.findListByServerPort(serverPort); + if (CollectionUtil.isEmpty(portMappingDOList)) { + return; + } + EnableStatusEnum enableStatusEnum = EnableStatusEnum.of(enable); + for (PortMappingDO portMappingDO : portMappingDOList) { + if (EnableStatusEnum.DISABLE == enableStatusEnum) { + removeVisitorChannelByPortMapping(portMappingDO); + } else if (EnableStatusEnum.ENABLE == EnableStatusEnum.of(portMappingDO.getEnable())) { + addVisitorChannelByPortMapping(portMappingDO); + } + } + } + /** * 更新 * 触发时机:删除用户、禁用用户、启用用户 (新增、修改用户不涉及VisitorChannel的变更)