From 8a15e3fcf6d4a193b4e3aab22f0ef687a5f463b4 Mon Sep 17 00:00:00 2001 From: zeaslity Date: Wed, 1 Mar 2023 16:19:52 +0800 Subject: [PATCH] =?UTF-8?q?[server][=20xray]-=20=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E7=9A=84=E6=95=B0=E6=8D=AE=E5=BA=93=E5=86=85?= =?UTF-8?q?=E5=AE=B9=20-=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wdd/func/controller/XrayController.java | 22 +++++++++++++---- .../func/xray/beans/node/ProxyNodeType.java | 7 ++++-- .../func/xray/persisit/XrayDBOperator.java | 24 ++++++++++++++++++- .../func/xray/service/XrayCoreService.java | 9 +++++++ .../xray/service/XrayCoreServiceImpl.java | 13 ++++++++++ .../io/wdd/server/beans/po/ServerInfoPO.java | 11 +++++---- .../io/wdd/server/beans/vo/ServerInfoVO.java | 11 ++++----- 7 files changed, 80 insertions(+), 17 deletions(-) diff --git a/server/src/main/java/io/wdd/func/controller/XrayController.java b/server/src/main/java/io/wdd/func/controller/XrayController.java index 1084875..fb61ffa 100644 --- a/server/src/main/java/io/wdd/func/controller/XrayController.java +++ b/server/src/main/java/io/wdd/func/controller/XrayController.java @@ -11,10 +11,7 @@ import io.wdd.func.xray.service.XrayCoreService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; import static io.wdd.func.xray.persisit.cache.ProxyNodeCache.*; @@ -57,6 +54,23 @@ public class XrayController { ); } + @PostMapping("/cache/manual") + @ApiOperation("[缓存] - 手动更新代理链缓存") + public R> manualUpdateProxyNodeListCache() { + + return R.ok( + xrayCoreService.manualUpdateProxyNodeListCache() + ); + } + + @GetMapping("/cache/get") + @ApiOperation("[缓存] - 获取代理链缓存") + public R> getProxyNodeListCache() { + + return R.ok(ProxyNodeMap); + + } + @GetMapping("/test") public void test() { diff --git a/server/src/main/java/io/wdd/func/xray/beans/node/ProxyNodeType.java b/server/src/main/java/io/wdd/func/xray/beans/node/ProxyNodeType.java index aae30a6..104817a 100644 --- a/server/src/main/java/io/wdd/func/xray/beans/node/ProxyNodeType.java +++ b/server/src/main/java/io/wdd/func/xray/beans/node/ProxyNodeType.java @@ -13,7 +13,10 @@ public enum ProxyNodeType { RELAY, - // 数据库中标记为0 - EXTERNAL + // 数据库中标记为2 + EXTERNAL, + + UNKNOWN + } diff --git a/server/src/main/java/io/wdd/func/xray/persisit/XrayDBOperator.java b/server/src/main/java/io/wdd/func/xray/persisit/XrayDBOperator.java index 92baf00..3e6b443 100644 --- a/server/src/main/java/io/wdd/func/xray/persisit/XrayDBOperator.java +++ b/server/src/main/java/io/wdd/func/xray/persisit/XrayDBOperator.java @@ -1,6 +1,7 @@ package io.wdd.func.xray.persisit; import io.wdd.func.xray.beans.node.ProxyNode; +import io.wdd.func.xray.beans.node.ProxyNodeType; import io.wdd.func.xray.beans.node.XrayConfigInfo; import io.wdd.server.beans.vo.ServerInfoVO; import io.wdd.server.coreService.CoreServerService; @@ -55,7 +56,7 @@ public class XrayDBOperator { private void transferServerInfoToProxyNode(List serverInfoVOList) { // 临时内容 - int[] bitmap = new int[ALL_SERVER_CITY_INDEX.size()]; + int[] bitmap = new int[ALL_SERVER_CITY_INDEX.size() * 10]; // int[] finalBitmap = bitmap; @@ -85,6 +86,9 @@ public class XrayDBOperator { .publicIPv6(serverInfoVO.getServerIpPbV6()) .name(serverCity + serverGraphNum) .agentName(serverInfoVO.getServerName()) + .proxyNodeType( + convertNodeType(serverInfoVO.getProxyType()) + ) .location(serverCity) .xrayConfigInfo(new XrayConfigInfo()) .build(); @@ -131,4 +135,22 @@ public class XrayDBOperator { } + private ProxyNodeType convertNodeType(Integer proxyType) { + + if (null == proxyType) { + return ProxyNodeType.UNKNOWN; + } + + switch (proxyType) { + case 0: + return ProxyNodeType.INTERFACE; + case 1: + return ProxyNodeType.RELAY; + case 2: + return ProxyNodeType.EXTERNAL; + default: + return ProxyNodeType.UNKNOWN; + } + } + } diff --git a/server/src/main/java/io/wdd/func/xray/service/XrayCoreService.java b/server/src/main/java/io/wdd/func/xray/service/XrayCoreService.java index 5326601..d3d50cf 100644 --- a/server/src/main/java/io/wdd/func/xray/service/XrayCoreService.java +++ b/server/src/main/java/io/wdd/func/xray/service/XrayCoreService.java @@ -3,6 +3,7 @@ package io.wdd.func.xray.service; import io.wdd.func.xray.beans.node.ProxyNode; import io.wdd.func.xray.beans.node.XrayConfigInfo; +import java.util.HashMap; import java.util.List; public interface XrayCoreService { @@ -18,4 +19,12 @@ public interface XrayCoreService { List generateXrayConfigFromNodeList(List> allNetworkPathList); + + /** + * 手动更新代理链缓存, 并返回结果 + * + * @return + */ + HashMap manualUpdateProxyNodeListCache(); + } diff --git a/server/src/main/java/io/wdd/func/xray/service/XrayCoreServiceImpl.java b/server/src/main/java/io/wdd/func/xray/service/XrayCoreServiceImpl.java index ef748cd..8b64058 100644 --- a/server/src/main/java/io/wdd/func/xray/service/XrayCoreServiceImpl.java +++ b/server/src/main/java/io/wdd/func/xray/service/XrayCoreServiceImpl.java @@ -11,6 +11,7 @@ import io.wdd.func.xray.beans.xray.protocol.inbound.vmess.VMESS; import io.wdd.func.xray.beans.xray.protocol.outbound.Freedom; import io.wdd.func.xray.beans.xray.protocol.outbound.OutboundConfigurationObject; import io.wdd.func.xray.beans.xray.transport.OutboundObject; +import io.wdd.func.xray.persisit.XrayDBOperator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.BeanUtils; import org.springframework.stereotype.Service; @@ -24,6 +25,7 @@ import static io.wdd.func.xray.beans.config.InboundVmessHTTPTemplateClass.Inboun import static io.wdd.func.xray.beans.config.InboundVmessHTTPTemplateClass.ListenAddress; import static io.wdd.func.xray.beans.config.LogTemplateClass.LogTemplate; import static io.wdd.func.xray.beans.config.OutboundVmessHTTPTemplateClass.*; +import static io.wdd.func.xray.persisit.cache.ProxyNodeCache.ProxyNodeMap; import static io.wdd.func.xray.service.XrayConfigPersistor.cleanVersion; @Service @@ -33,6 +35,9 @@ public class XrayCoreServiceImpl implements XrayCoreService { @Resource XrayConfigPersistor xrayConfigPersistor; + @Resource + XrayDBOperator xrayDBOperator; + private static final String ProxyChainSplitor = "->"; @Override @@ -104,6 +109,14 @@ public class XrayCoreServiceImpl implements XrayCoreService { } + @Override + public HashMap manualUpdateProxyNodeListCache() { + + xrayDBOperator.CacheAllProxyNodeInfo(); + + return ProxyNodeMap; + } + private void generateXrayJsonSinglePath(List networkPathList) { int pathLength = networkPathList.size(); diff --git a/server/src/main/java/io/wdd/server/beans/po/ServerInfoPO.java b/server/src/main/java/io/wdd/server/beans/po/ServerInfoPO.java index ca29e1e..9ad670e 100644 --- a/server/src/main/java/io/wdd/server/beans/po/ServerInfoPO.java +++ b/server/src/main/java/io/wdd/server/beans/po/ServerInfoPO.java @@ -1,13 +1,11 @@ package io.wdd.server.beans.po; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; -import java.util.Date; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; /** * @@ -65,6 +63,11 @@ public class ServerInfoPO implements Serializable { @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; + /** + * 服务器节点的代理类型,0代表INTERFACE, 1代表relay,2代表external + */ + private Integer proxyType; + /** * server location , type City Country */ diff --git a/server/src/main/java/io/wdd/server/beans/vo/ServerInfoVO.java b/server/src/main/java/io/wdd/server/beans/vo/ServerInfoVO.java index b70fe8d..0b84bc3 100644 --- a/server/src/main/java/io/wdd/server/beans/vo/ServerInfoVO.java +++ b/server/src/main/java/io/wdd/server/beans/vo/ServerInfoVO.java @@ -1,20 +1,14 @@ package io.wdd.server.beans.vo; import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import javax.annotation.Nullable; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Date; @Data @AllArgsConstructor @@ -68,6 +62,11 @@ public class ServerInfoVO { @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; + /** + * 服务器节点的代理类型,0代表INTERFACE, 1代表relay,2代表external + */ + private Integer proxyType; + /** * server location , type City Country */