diff --git a/neutrino-proxy-client-sdk/pom.xml b/neutrino-proxy-client-sdk/pom.xml
index 9db95010..65325285 100644
--- a/neutrino-proxy-client-sdk/pom.xml
+++ b/neutrino-proxy-client-sdk/pom.xml
@@ -3,32 +3,67 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- neutrino-proxy
- org.dromara.neutrino-proxy
- ${revision}
- ../pom.xml
+ org.noear
+ solon-parent
+ 2.5.12
+
4.0.0
- jar
+ org.dromara.neutrino-proxy
neutrino-proxy-client-sdk
-
+ ${revision}
+ jar
+
+ 2.0.1
+ 1.18.30
+ 5.8.20
+
org.dromara.neutrino-proxy
neutrino-proxy-core
${revision}
+
+
+ org.noear
+ solon-test
+
+
+ org.noear
+ solon.aot
+
+
+ org.noear
+ solon.logging.logback
+
+
+ cn.hutool
+ hutool-core
+
+
+ cn.hutool
+ hutool-cache
+
+
- org.noear
- solon-lib
+ org.projectlombok
+ lombok
+ ${lombok.version}
- com.github.jsqlparser
- jsqlparser
- 4.5
- compile
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ 2.20.0
+ provided
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IProxyConfiguration.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IProxyConfiguration.java
index abe2a641..007eb8ba 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IProxyConfiguration.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IProxyConfiguration.java
@@ -180,8 +180,8 @@ public abstract class IProxyConfiguration {
return bootstrap;
}
- public NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar() {
- return new NeutrinoCoreRuntimeNativeRegistrar();
- }
+// public NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar() {
+// return new NeutrinoCoreRuntimeNativeRegistrar();
+// }
}
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/ProxyConfig.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/ProxyConfig.java
index ba740bef..eb2abdfd 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/ProxyConfig.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/ProxyConfig.java
@@ -1,8 +1,6 @@
package org.dromara.neutrinoproxy.client.sdk.config;
import lombok.Data;
-import org.noear.solon.annotation.Component;
-import org.noear.solon.annotation.Inject;
/**
*
@@ -10,13 +8,9 @@ import org.noear.solon.annotation.Inject;
* @date: 2022/6/16
*/
@Data
-@Component
public class ProxyConfig {
- @Inject("${neutrino.proxy.protocol}")
private Protocol protocol;
- @Inject("${neutrino.proxy.tunnel}")
private Tunnel tunnel;
- @Inject("${neutrino.proxy.client}")
private Client client;
@Data
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java
index 9e442ea7..b560451f 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java
@@ -11,7 +11,6 @@ import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
import org.dromara.neutrinoproxy.client.sdk.util.ProxyUtil;
import org.dromara.neutrinoproxy.client.sdk.util.UdpServerUtil;
import org.dromara.neutrinoproxy.core.ProxyMessage;
-import org.noear.solon.Solon;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -31,6 +30,8 @@ public class IAbProxyClientService {
public Bootstrap udpServerBootstrap;
+ public Boolean isAotRuntime;
+
private volatile Channel channel;
/**
* 重连次数
@@ -46,7 +47,7 @@ public class IAbProxyClientService {
reconnectExecutor.scheduleWithFixedDelay(this::reconnect, 10, proxyConfig.getTunnel().getReconnection().getIntervalSeconds(), TimeUnit.SECONDS);
try {
this.start();
- UdpServerUtil.initCache(proxyConfig, udpServerBootstrap);
+ UdpServerUtil.initCache(proxyConfig, udpServerBootstrap,isAotRuntime);
} catch (Exception e) {
// 启动连不上也做一下重连,因此先catch异常
log.error("[CmdChannel] start error", e);
@@ -56,23 +57,19 @@ public class IAbProxyClientService {
public void start() {
if (StrUtil.isEmpty(proxyConfig.getTunnel().getServerIp())) {
log.error("not found server-ip config.");
- Solon.stop();
return;
}
if (null == proxyConfig.getTunnel().getServerPort()) {
log.error("not found server-port config.");
- Solon.stop();
return;
}
if (null != proxyConfig.getTunnel().getSslEnable() && proxyConfig.getTunnel().getSslEnable()
&& StrUtil.isEmpty(proxyConfig.getTunnel().getJksPath())) {
log.error("not found jks-path config.");
- Solon.stop();
return;
}
if (StrUtil.isEmpty(proxyConfig.getTunnel().getLicenseKey())) {
log.error("not found license-key config.");
- Solon.stop();
return;
}
if (null == channel || !channel.isActive()) {
@@ -82,7 +79,7 @@ public class IAbProxyClientService {
log.error("client start error", e);
}
} else {
- channel.writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getTunnel().getLicenseKey(), ProxyUtil.getClientId()));
+ channel.writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getTunnel().getLicenseKey(), ProxyUtil.getClientId(proxyConfig)));
}
}
@@ -99,7 +96,7 @@ public class IAbProxyClientService {
channel = future.channel();
// 连接成功,向服务器发送客户端认证信息(licenseKey)
ProxyUtil.setCmdChannel(future.channel());
- future.channel().writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getTunnel().getLicenseKey(), ProxyUtil.getClientId()));
+ future.channel().writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getTunnel().getLicenseKey(), ProxyUtil.getClientId(proxyConfig)));
log.info("[CmdChannel] connect proxy server success. channelId:{}", future.channel().id().asLongText());
// reconnectServiceEnable = true;
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/TcpProxyChannelHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/TcpProxyChannelHandler.java
index 59161321..41f1c7ff 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/TcpProxyChannelHandler.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/TcpProxyChannelHandler.java
@@ -7,12 +7,9 @@ import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.timeout.IdleStateEvent;
import lombok.extern.slf4j.Slf4j;
import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler;
-import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
import org.dromara.neutrinoproxy.client.sdk.util.ProxyUtil;
import org.dromara.neutrinoproxy.core.Constants;
import org.dromara.neutrinoproxy.core.ProxyMessage;
-import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher;
-import org.noear.solon.Solon;
/**
* 处理与服务端之间的数据传输
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/UdpProxyChannelHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/UdpProxyChannelHandler.java
index 40dec1b6..1c28efbc 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/UdpProxyChannelHandler.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/UdpProxyChannelHandler.java
@@ -10,8 +10,6 @@ import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler;
import org.dromara.neutrinoproxy.client.sdk.util.ProxyUtil;
import org.dromara.neutrinoproxy.core.Constants;
import org.dromara.neutrinoproxy.core.ProxyMessage;
-import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher;
-import org.noear.solon.Solon;
/**
* 处理与服务端之间的数据传输
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageAuthHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageAuthHandler.java
index 5ae9219e..f85ee936 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageAuthHandler.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageAuthHandler.java
@@ -1,5 +1,7 @@
package org.dromara.neutrinoproxy.client.sdk.handler;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
@@ -8,8 +10,6 @@ import org.dromara.neutrinoproxy.core.ExceptionEnum;
import org.dromara.neutrinoproxy.core.ProxyMessage;
import org.dromara.neutrinoproxy.core.ProxyMessageHandler;
import org.dromara.neutrinoproxy.core.dispatcher.Match;
-import org.noear.snack.ONode;
-import org.noear.solon.Solon;
/**
* 认证信息处理器
@@ -21,21 +21,24 @@ import org.noear.solon.Solon;
public class ProxyMessageAuthHandler implements ProxyMessageHandler {
private ProxyConfig proxyConfig;
- public ProxyMessageAuthHandler(ProxyConfig proxyConfig){
+ private Runnable stop;
+
+ public ProxyMessageAuthHandler(ProxyConfig proxyConfig,Runnable stop){
this.proxyConfig=proxyConfig;
+ this.stop=stop;
}
@Override
public void handle(ChannelHandlerContext context, ProxyMessage proxyMessage) {
String info = proxyMessage.getInfo();
- ONode load = ONode.load(info);
- Integer code = load.get("code").getInt();
+ JSONObject load = JSONUtil.parseObj(info);
+ Integer code = load.getInt("code");
log.info("Auth result:{}", info);
if (ExceptionEnum.AUTH_FAILED.getCode().equals(code)) {
// 客户端认证失败,直接停止服务
log.info("client auth failed , client stop.");
context.channel().close();
if (!proxyConfig.getTunnel().getReconnection().getUnlimited()) {
- Solon.stop();
+ stop.run();
}
} else if (ExceptionEnum.CONNECT_FAILED.getCode().equals(code) ||
ExceptionEnum.LICENSE_CANNOT_REPEAT_CONNECT.getCode().equals(code)
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageErrorHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageErrorHandler.java
index 66ce7fea..c8086bae 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageErrorHandler.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageErrorHandler.java
@@ -1,10 +1,11 @@
package org.dromara.neutrinoproxy.client.sdk.handler;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.dromara.neutrinoproxy.core.*;
import org.dromara.neutrinoproxy.core.dispatcher.Match;
-import org.noear.snack.ONode;
/**
* 异常信息处理器
@@ -18,8 +19,8 @@ public class ProxyMessageErrorHandler implements ProxyMessageHandler {
@Override
public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) {
log.info("error: {}", proxyMessage.getInfo());
- ONode load = ONode.load(proxyMessage.getInfo());
- Integer code = load.get("code").getInt();
+ JSONObject load = JSONUtil.parseObj(proxyMessage.getInfo());
+ Integer code = load.getInt("code");
if (ExceptionEnum.AUTH_FAILED.getCode().equals(code)) {
System.exit(0);
}
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java
index e11ac05d..7363810b 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java
@@ -24,20 +24,25 @@ import java.util.List;
public abstract class ProxyMessageFactory extends IProxyConfiguration {
public abstract void beanInject(String beanName, Object t);
- public abstract Object getBean(String beanName);
+ public abstract Object getBean(String beanName,Class c);
+
+ public abstract void stop();
+ public abstract boolean isAotRuntime();
public void start(ProxyConfig proxyConfig){
init(proxyConfig);
IAbProxyClientService clientService=new IAbProxyClientService();
clientService.setProxyConfig(proxyConfig);
- clientService.setCmdTunnelBootstrap((Bootstrap) getBean("cmdTunnelBootstrap"));
- clientService.setUdpServerBootstrap((Bootstrap) getBean("udpServerBootstrap"));
+ clientService.setCmdTunnelBootstrap((Bootstrap) getBean("cmdTunnelBootstrap",Bootstrap.class));
+ clientService.setUdpServerBootstrap((Bootstrap) getBean("udpServerBootstrap",Bootstrap.class));
+ clientService.setIsAotRuntime(isAotRuntime());
clientService.init();
}
public void init(ProxyConfig proxyConfig){
NioEventLoopGroup tunnelWorkGroup = super.tunnelWorkGroup(proxyConfig);
beanInject("tunnelWorkGroup",tunnelWorkGroup);
+ Object tunnelWorkGroup1 = getBean("tunnelWorkGroup",NioEventLoopGroup.class);
NioEventLoopGroup tcpRealServerWorkGroup = super.tcpRealServerWorkGroup(proxyConfig);
beanInject("tcpRealServerWorkGroup",tcpRealServerWorkGroup);
NioEventLoopGroup udpServerGroup = super.udpServerGroup(proxyConfig);
@@ -54,13 +59,13 @@ public abstract class ProxyMessageFactory extends IProxyConfiguration {
beanInject("realServerBootstrap",realServerBootstrap);
Bootstrap udpServerBootstrap = super.udpServerBootstrap(proxyConfig, udpServerGroup, udpWorkGroup);
beanInject("udpServerBootstrap",udpServerBootstrap);
- NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar = super.neutrinoCoreRuntimeNativeRegistrar();
- beanInject("neutrinoCoreRuntimeNativeRegistrar",neutrinoCoreRuntimeNativeRegistrar);
+// NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar = super.neutrinoCoreRuntimeNativeRegistrar();
+// beanInject("neutrinoCoreRuntimeNativeRegistrar",neutrinoCoreRuntimeNativeRegistrar);
dispatcher(proxyConfig, tcpProxyTunnelBootstrap, realServerBootstrap);
}
public void dispatcher(ProxyConfig proxyConfig, Bootstrap tcpProxyTunnelBootstrap, Bootstrap realServerBootstrap) {
List list = Lists.newArrayList(
- new ProxyMessageAuthHandler(proxyConfig),
+ new ProxyMessageAuthHandler(proxyConfig,()->stop()),
new ProxyMessageConnectHandler(tcpProxyTunnelBootstrap,realServerBootstrap,proxyConfig),
new ProxyMessageDisconnectHandler(),
new ProxyMessageErrorHandler(),
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageConnectHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageConnectHandler.java
index 81dc9651..03eff2eb 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageConnectHandler.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageConnectHandler.java
@@ -1,5 +1,6 @@
package org.dromara.neutrinoproxy.client.sdk.handler;
+import cn.hutool.json.JSONUtil;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
@@ -12,7 +13,6 @@ import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum;
import org.dromara.neutrinoproxy.core.ProxyMessage;
import org.dromara.neutrinoproxy.core.ProxyMessageHandler;
import org.dromara.neutrinoproxy.core.dispatcher.Match;
-import org.noear.snack.ONode;
/**
* @author: aoshiguchen
@@ -33,7 +33,8 @@ public class UdpProxyMessageConnectHandler implements ProxyMessageHandler {
@Override
public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) {
final Channel cmdChannel = ctx.channel();
- final ProxyMessage.UdpBaseInfo udpBaseInfo = ONode.deserialize(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class);
+ String info = proxyMessage.getInfo();
+ final ProxyMessage.UdpBaseInfo udpBaseInfo = JSONUtil.toBean(info,ProxyMessage.UdpBaseInfo.class);
log.info("[UDP connect]info:{}", proxyMessage.getInfo());
// 获取连接
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageTransferHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageTransferHandler.java
index 2e97adfa..847284fc 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageTransferHandler.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageTransferHandler.java
@@ -1,5 +1,6 @@
package org.dromara.neutrinoproxy.client.sdk.handler;
+import cn.hutool.json.JSONUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
@@ -12,7 +13,6 @@ import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum;
import org.dromara.neutrinoproxy.core.ProxyMessage;
import org.dromara.neutrinoproxy.core.ProxyMessageHandler;
import org.dromara.neutrinoproxy.core.dispatcher.Match;
-import org.noear.snack.ONode;
import java.net.InetSocketAddress;
@@ -26,7 +26,7 @@ public class UdpProxyMessageTransferHandler implements ProxyMessageHandler {
@Override
public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) {
- final ProxyMessage.UdpBaseInfo udpBaseInfo = ONode.deserialize(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class);
+ final ProxyMessage.UdpBaseInfo udpBaseInfo = JSONUtil.toBean(proxyMessage.getInfo(),ProxyMessage.UdpBaseInfo.class);
log.debug("[UDP transfer]info:{} data:{}", proxyMessage.getInfo(), new String(proxyMessage.getData()));
Channel channel = UdpServerUtil.takeChannel(udpBaseInfo, ctx.channel());
if (null == channel) {
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/ProxyUtil.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/ProxyUtil.java
index 3e28da24..386dfb17 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/ProxyUtil.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/ProxyUtil.java
@@ -21,21 +21,20 @@
*/
package org.dromara.neutrinoproxy.client.sdk.util;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelOption;
import io.netty.handler.ssl.SslHandler;
+import io.netty.util.AttributeKey;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
import org.dromara.neutrinoproxy.client.sdk.core.ProxyChannelBorrowListener;
import org.dromara.neutrinoproxy.core.Constants;
-import io.netty.bootstrap.Bootstrap;
-import io.netty.buffer.Unpooled;
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelFutureListener;
-import io.netty.channel.ChannelOption;
-import io.netty.util.AttributeKey;
import org.dromara.neutrinoproxy.core.util.FileUtil;
-import org.noear.solon.Solon;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
@@ -180,11 +179,10 @@ public class ProxyUtil {
realServerChannels.clear();
}
- public static String getClientId() {
+ public static String getClientId(ProxyConfig proxyConfig) {
if (StringUtils.isNotBlank(clientId)) {
return clientId;
}
- ProxyConfig proxyConfig = Solon.context().getBean(ProxyConfig.class);
if (StringUtils.isNotBlank(proxyConfig.getTunnel().getClientId())) {
clientId = proxyConfig.getTunnel().getClientId();
return clientId;
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/UdpServerUtil.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/UdpServerUtil.java
index ba909d6d..a907d35e 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/UdpServerUtil.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/UdpServerUtil.java
@@ -11,7 +11,7 @@ import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
import org.dromara.neutrinoproxy.client.sdk.constant.Constants;
import org.dromara.neutrinoproxy.client.sdk.core.CustomThreadFactory;
import org.dromara.neutrinoproxy.core.ProxyMessage;
-import org.noear.solon.core.runtime.NativeDetector;
+import java.util.concurrent.TimeUnit;
import java.util.*;
import java.util.concurrent.*;
@@ -46,9 +46,9 @@ public class UdpServerUtil {
* 2、维护一个UDP服务池,用于需要响应的UDP转发
* @param proxyConfig
*/
- public static void initCache(ProxyConfig proxyConfig, Bootstrap udpServerBootstrap) {
+ public static void initCache(ProxyConfig proxyConfig, Bootstrap udpServerBootstrap,Boolean isAotRuntime) {
// aot 阶段,不初始化UDP服务
- if (NativeDetector.isAotRuntime()) {
+ if (isAotRuntime) {
return;
}
if (null == proxyConfig.getClient().getUdp() || StringUtils.isEmpty(proxyConfig.getClient().getUdp().getPuppetPortRange())) {
diff --git a/neutrino-proxy-client-starter/Dockerfile b/neutrino-proxy-client-starter/Dockerfile
new file mode 100644
index 00000000..e2a41943
--- /dev/null
+++ b/neutrino-proxy-client-starter/Dockerfile
@@ -0,0 +1,16 @@
+FROM openjdk:21-jdk-oracle
+#同步时间
+#RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
+# apk update && apk add wget unzip vim && apk add -U tzdata && \
+# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
+# 设置时区为北京时间
+ENV TZ=Asia/Shanghai
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+RUN mkdir -p /root/neutrino-proxy/config
+WORKDIR /root/neutrino-proxy
+COPY ./target/neutrino-proxy-client.jar /root/neutrino-proxy/neutrino-proxy-client.jar
+COPY ./src/main/resources/app-copy.yml /root/neutrino-proxy/config/app.yml
+#VOLUME ["/root/neutrino-proxy"]
+ENTRYPOINT ["java","-jar","neutrino-proxy-client.jar","config=./config/app.yml"]
+
+#docker run -it -d --restart=always --name np_client -e SERVER_IP=127.0.0.1
diff --git a/neutrino-proxy-client-starter/pom.xml b/neutrino-proxy-client-starter/pom.xml
new file mode 100644
index 00000000..ef3bebb2
--- /dev/null
+++ b/neutrino-proxy-client-starter/pom.xml
@@ -0,0 +1,195 @@
+
+
+
+ org.noear
+ solon-parent
+ 2.5.12
+
+
+ 4.0.0
+ io.github.javpower
+ neutrino-proxy-client-spring-boot-starter
+ ${revision}
+ jar
+ https://github.com/javpower/easy-proxy
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+ https://github.com/javpower/easy-proxy
+ scm:git@github.com/javpower/easy-proxy.git
+ scm:git@github.com/javpower/easy-proxy.git
+
+
+
+ gc.x
+ javpower@163.com
+ https://github.com/javpower
+ +8
+
+
+
+ 2.3.2
+ 2.7.13
+ 2.0.1
+
+
+
+ org.dromara.neutrino-proxy
+ neutrino-proxy-client-sdk
+ ${revision}
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.36
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.12
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ net.dreamlu
+ mica-auto
+ ${mica-auto.vaersion}
+ provided
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+
+
+ ossrh
+ https://s01.oss.sonatype.org/content/repositories/snapshots
+
+
+ ossrh
+ https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+ com.gc.easy.EasyHttpApplication
+ true
+
+
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ 1.6.7
+ true
+
+ ossrh
+ https://s01.oss.sonatype.org/
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.2.1
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 2.9.1
+
+ private
+ true
+ UTF-8
+ UTF-8
+ UTF-8
+ -Xdoclint:none
+
+
+
+ package
+
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.5
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 2.8.2
+
+
+
+
+
+
diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java
new file mode 100644
index 00000000..082df470
--- /dev/null
+++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java
@@ -0,0 +1,22 @@
+package org.dromara.neutrinoproxy.client.starter;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+@SpringBootApplication
+@Slf4j
+public class SpringProxyClient {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringProxyClient.class, args);
+ }
+
+
+
+
+}
diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/MainBusListeners.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/MainBusListeners.java
new file mode 100644
index 00000000..7271ca2e
--- /dev/null
+++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/MainBusListeners.java
@@ -0,0 +1,19 @@
+package org.dromara.neutrinoproxy.client.starter.config;
+
+import org.dromara.neutrinoproxy.client.starter.util.ApplicationContextUtils;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.event.ContextRefreshedEvent;
+import org.springframework.stereotype.Component;
+
+/**
+ * 启动监听
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+@Component
+public class MainBusListeners implements ApplicationListener {
+ @Override
+ public void onApplicationEvent(ContextRefreshedEvent event) {
+ ApplicationContextUtils.setContext(event.getApplicationContext());
+ }
+}
\ No newline at end of file
diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java
new file mode 100644
index 00000000..4e33afec
--- /dev/null
+++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java
@@ -0,0 +1,43 @@
+package org.dromara.neutrinoproxy.client.starter.config;
+
+import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler;
+import org.dromara.neutrinoproxy.client.sdk.handler.ProxyMessageFactory;
+import org.dromara.neutrinoproxy.client.starter.handler.BeanHandler;
+import org.dromara.neutrinoproxy.client.starter.util.ApplicationContextUtils;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * 代理配置
+ * @author: aoshiguchen
+ * @date: 2022/10/8
+ */
+@Component
+public class ProxyConfiguration extends ProxyMessageFactory {
+
+
+ @Override
+ public IBeanHandler getBeanHandler() {
+ return new BeanHandler();
+ }
+
+ @Override
+ public void beanInject(String beanName, Object bean) {
+ ApplicationContextUtils.addBean(beanName,bean);
+ }
+
+ @Override
+ public Object getBean(String beanName,Class c) {
+ return ApplicationContextUtils.getBean(beanName,c);
+ }
+
+ @Override
+ public void stop() {
+ ApplicationContextUtils.stop();
+ }
+
+ @Override
+ public boolean isAotRuntime() {
+ return false;
+ }
+}
diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/SpringProxyConfig.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/SpringProxyConfig.java
new file mode 100644
index 00000000..dc3c9117
--- /dev/null
+++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/SpringProxyConfig.java
@@ -0,0 +1,72 @@
+package org.dromara.neutrinoproxy.client.starter.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+@Data
+@ConfigurationProperties(prefix = "neutrino.proxy")
+@Component
+public class SpringProxyConfig {
+ private Protocol protocol;
+ private Tunnel tunnel;
+ private Client client;
+
+ @Data
+ public static class Protocol {
+ private Integer maxFrameLength;
+ private Integer lengthFieldOffset;
+ private Integer lengthFieldLength;
+ private Integer initialBytesToStrip;
+ private Integer lengthAdjustment;
+ private Integer readIdleTime;
+ private Integer writeIdleTime;
+ private Integer allIdleTimeSeconds;
+ }
+
+ @Data
+ public static class Tunnel {
+ private String keyStorePassword;
+ private String jksPath;
+ private String serverIp;
+ private Integer serverPort;
+ private Boolean sslEnable;
+ private Integer obtainLicenseInterval;
+ private String licenseKey;
+ private Integer threadCount;
+ private String clientId;
+ private Boolean transferLogEnable;
+ private Boolean heartbeatLogEnable;
+ private Reconnection reconnection;
+ }
+
+ @Data
+ public static class Client {
+// private Tcp tcp;
+ private Udp udp;
+ }
+
+ @Data
+ public static class Reconnection {
+ private Integer intervalSeconds;
+ private Boolean unlimited;
+ }
+
+ @Data
+ public static class Tcp {
+
+ }
+
+ @Data
+ public static class Udp {
+ private Integer bossThreadCount;
+ private Integer workThreadCount;
+ private String puppetPortRange;
+ private Boolean transferLogEnable;
+ }
+}
diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/core/ProxyClientService.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/core/ProxyClientService.java
new file mode 100644
index 00000000..dea7bb83
--- /dev/null
+++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/core/ProxyClientService.java
@@ -0,0 +1,33 @@
+package org.dromara.neutrinoproxy.client.starter.core;
+
+import cn.hutool.core.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
+import org.dromara.neutrinoproxy.client.starter.config.ProxyConfiguration;
+import org.dromara.neutrinoproxy.client.starter.config.SpringProxyConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+/**
+ * 代理客户端服务
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+@Slf4j
+@Component
+public class ProxyClientService implements ApplicationRunner {
+
+ @Autowired
+ private ProxyConfiguration proxyConfiguration;
+ @Autowired
+ private SpringProxyConfig springProxyConfig;
+ @Override
+ public void run(ApplicationArguments args) {
+ log.info("启动中....");
+ ProxyConfig proxyConfig = BeanUtil.toBean(springProxyConfig, ProxyConfig.class);
+ proxyConfiguration.start(proxyConfig);
+ log.info("启动成功....");
+ }
+}
diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java
new file mode 100644
index 00000000..1d24fdff
--- /dev/null
+++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java
@@ -0,0 +1,31 @@
+package org.dromara.neutrinoproxy.client.starter.handler;
+
+import cn.hutool.core.bean.BeanUtil;
+import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler;
+import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
+import org.dromara.neutrinoproxy.client.starter.config.SpringProxyConfig;
+import org.dromara.neutrinoproxy.client.starter.util.ApplicationContextUtils;
+import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher;
+
+
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+
+public class BeanHandler implements IBeanHandler {
+
+
+ @Override
+ public Dispatcher getDispatcher(){
+ return (Dispatcher) ApplicationContextUtils.getBean("dispatcher");
+ }
+
+ @Override
+ public ProxyConfig getProxyConfig() {
+ SpringProxyConfig springProxyConfig =ApplicationContextUtils.getBean(SpringProxyConfig.class);
+ ProxyConfig proxyConfig = BeanUtil.toBean(springProxyConfig, ProxyConfig.class);
+ return proxyConfig;
+ }
+}
diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/util/ApplicationContextUtils.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/util/ApplicationContextUtils.java
new file mode 100644
index 00000000..395c61a0
--- /dev/null
+++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/util/ApplicationContextUtils.java
@@ -0,0 +1,44 @@
+package org.dromara.neutrinoproxy.client.starter.util;
+
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.support.GenericBeanDefinition;
+import org.springframework.boot.SpringApplication;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * ApplicaitonContext工具类
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+public class ApplicationContextUtils {
+
+ private static ApplicationContext context;
+
+ public static void setContext(ApplicationContext applicationContext) {
+ context = applicationContext;
+ }
+
+ public static Object getBean(String beanName) {
+ return context.getBean(beanName);
+ }
+ public static void stop(){
+ SpringApplication.exit(context);
+ }
+ public static T getBean(String beanName,Class t) {
+ return context.getBean(beanName,t);
+ }
+ public static T getBean(Class t) {
+ return context.getBean(t);
+ }
+
+ public static void addBean(String beanName,Object bean){
+ // 获取BeanFactory
+ DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getAutowireCapableBeanFactory();
+ // 创建Bean信息
+ GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
+ beanDefinition.setBeanClass(bean.getClass());
+ beanDefinition.setInstanceSupplier(() -> bean);
+ // 注入Bean
+ beanFactory.registerBeanDefinition(beanName, beanDefinition);
+ }
+}
\ No newline at end of file
diff --git a/neutrino-proxy-client-starter/src/main/resources/application.yml b/neutrino-proxy-client-starter/src/main/resources/application.yml
new file mode 100644
index 00000000..e763c056
--- /dev/null
+++ b/neutrino-proxy-client-starter/src/main/resources/application.yml
@@ -0,0 +1,52 @@
+server:
+ port: 8201
+spring:
+ application:
+ name: neutrino-proxy-client
+
+neutrino:
+ proxy:
+ protocol:
+ max-frame-length: 2097152
+ length-field-offset: 0
+ length-field-length: 4
+ initial-bytes-to-strip: 0
+ length-adjustment: 0
+ read-idle-time: 120
+ write-idle-time: 20
+ all-idle-time-seconds: 0
+ tunnel:
+ # 线程池相关配置,用于技术调优,可忽略
+ thread-count: 50
+ # 隧道SSL证书配置
+ key-store-password: ${STORE_PASS:123456}
+ jks-path: ${JKS_PATH:classpath:/test.jks}
+ # 服务端IP
+ server-ip: ${SERVER_IP:194.36.209.36}
+ # 服务端端口(对应服务端app.yml中的tunnel.port、tunnel.ssl-port)
+ server-port: ${SERVER_PORT:9002}
+ # 是否启用SSL(注意:该配置必须和server-port对应上)
+ ssl-enable: ${SSL_ENABLE:true}
+ # 客户端连接唯一凭证
+ license-key: ${LICENSE_KEY:2d45b54680d54726b1cfd183b0307c58}
+ # 客户端唯一身份标识(可忽略,若不设置首次启动会自动生成)
+ client-id: ${CLIENT_ID:}
+ # 是否开启隧道传输报文日志(日志级别为debug时开启才有效)
+ transfer-log-enable: ${CLIENT_LOG:false}
+ # 是否开启心跳日志
+ heartbeat-log-enable: ${HEARTBEAT_LOG:false}
+ # 重连设置
+ reconnection:
+ # 重连间隔(秒)
+ interval-seconds: 10
+ # 是否开启无限重连(未开启时,客户端license不合法会自动停止应用,开启了则不会,请谨慎开启)
+ unlimited: false
+ client:
+ udp:
+ # 线程池相关配置,用于技术调优,可忽略
+ boss-thread-count: 5
+ work-thread-count: 20
+ # udp傀儡端口范围
+ puppet-port-range: 10000-10500
+ # 是否开启隧道传输报文日志(日志级别为debug时开启才有效)
+ transfer-log-enable: ${CLIENT_LOG:false}
diff --git a/neutrino-proxy-client-starter/src/main/resources/test.jks b/neutrino-proxy-client-starter/src/main/resources/test.jks
new file mode 100644
index 00000000..3a4d1ad8
Binary files /dev/null and b/neutrino-proxy-client-starter/src/main/resources/test.jks differ
diff --git a/neutrino-proxy-client/pom.xml b/neutrino-proxy-client/pom.xml
index a15e1195..1da7952c 100644
--- a/neutrino-proxy-client/pom.xml
+++ b/neutrino-proxy-client/pom.xml
@@ -19,6 +19,15 @@
neutrino-proxy-client-sdk
${revision}
+
+ org.noear
+ solon-lib
+
+
+ org.noear
+ solon.aot
+
+
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/NeutrinoClientRuntimeNativeRegistrar.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/NeutrinoClientRuntimeNativeRegistrar.java
similarity index 93%
rename from neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/NeutrinoClientRuntimeNativeRegistrar.java
rename to neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/NeutrinoClientRuntimeNativeRegistrar.java
index 5b060964..19b825ae 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/NeutrinoClientRuntimeNativeRegistrar.java
+++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/NeutrinoClientRuntimeNativeRegistrar.java
@@ -1,5 +1,6 @@
-package org.dromara.neutrinoproxy.client.sdk.config;
+package org.dromara.neutrinoproxy.client.config;
+import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
import org.noear.solon.annotation.Component;
import org.noear.solon.aot.RuntimeNativeMetadata;
import org.noear.solon.aot.RuntimeNativeRegistrar;
diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/ProxyConfiguration.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/ProxyConfiguration.java
index 489bf99d..2c9ae5bc 100644
--- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/ProxyConfiguration.java
+++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/ProxyConfiguration.java
@@ -3,9 +3,12 @@ package org.dromara.neutrinoproxy.client.config;
import org.dromara.neutrinoproxy.client.handler.BeanHandler;
import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler;
import org.dromara.neutrinoproxy.client.sdk.handler.ProxyMessageFactory;
+import org.dromara.neutrinoproxy.core.aot.NeutrinoCoreRuntimeNativeRegistrar;
import org.noear.solon.Solon;
+import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.core.BeanWrap;
+import org.noear.solon.core.runtime.NativeDetector;
/**
* 代理配置
@@ -30,7 +33,22 @@ public class ProxyConfiguration extends ProxyMessageFactory {
}
@Override
- public Object getBean(String beanName) {
+ public Object getBean(String beanName,Class c) {
return Solon.context().getBean(beanName);
}
+
+ @Override
+ public void stop() {
+ Solon.stop();
+ }
+
+ @Override
+ public boolean isAotRuntime() {
+ return NativeDetector.isAotRuntime();
+ }
+
+ @Bean
+ public NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar(){
+ return new NeutrinoCoreRuntimeNativeRegistrar();
+ }
}
diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/SolonProxyConfig.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/SolonProxyConfig.java
new file mode 100644
index 00000000..dd1c50af
--- /dev/null
+++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/SolonProxyConfig.java
@@ -0,0 +1,74 @@
+package org.dromara.neutrinoproxy.client.config;
+
+import lombok.Data;
+import org.noear.solon.annotation.Component;
+import org.noear.solon.annotation.Inject;
+
+/**
+ *
+ * @author: aoshiguchen
+ * @date: 2022/6/16
+ */
+@Data
+@Component
+public class SolonProxyConfig {
+ @Inject("${neutrino.proxy.protocol}")
+ private Protocol protocol;
+ @Inject("${neutrino.proxy.tunnel}")
+ private Tunnel tunnel;
+ @Inject("${neutrino.proxy.client}")
+ private Client client;
+
+ @Data
+ public static class Protocol {
+ private Integer maxFrameLength;
+ private Integer lengthFieldOffset;
+ private Integer lengthFieldLength;
+ private Integer initialBytesToStrip;
+ private Integer lengthAdjustment;
+ private Integer readIdleTime;
+ private Integer writeIdleTime;
+ private Integer allIdleTimeSeconds;
+ }
+
+ @Data
+ public static class Tunnel {
+ private String keyStorePassword;
+ private String jksPath;
+ private String serverIp;
+ private Integer serverPort;
+ private Boolean sslEnable;
+ private Integer obtainLicenseInterval;
+ private String licenseKey;
+ private Integer threadCount;
+ private String clientId;
+ private Boolean transferLogEnable;
+ private Boolean heartbeatLogEnable;
+ private Reconnection reconnection;
+ }
+
+ @Data
+ public static class Client {
+// private Tcp tcp;
+ private Udp udp;
+ }
+
+ @Data
+ public static class Reconnection {
+ private Integer intervalSeconds;
+ private Boolean unlimited;
+ }
+
+ @Data
+ public static class Tcp {
+
+ }
+
+ @Data
+ public static class Udp {
+ private Integer bossThreadCount;
+ private Integer workThreadCount;
+ private String puppetPortRange;
+ private Boolean transferLogEnable;
+ }
+}
diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java
index e1252d91..f595de8a 100644
--- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java
+++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java
@@ -1,7 +1,9 @@
package org.dromara.neutrinoproxy.client.core;
+import cn.hutool.core.bean.BeanUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.neutrinoproxy.client.config.ProxyConfiguration;
+import org.dromara.neutrinoproxy.client.config.SolonProxyConfig;
import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Init;
@@ -18,10 +20,11 @@ public class ProxyClientService{
@Inject
private ProxyConfiguration proxyConfiguration;
@Inject
- private ProxyConfig proxyConfig;
+ private SolonProxyConfig solonProxyConfig;
@Init
public void init() {
log.info("启动中....");
+ ProxyConfig proxyConfig = BeanUtil.toBean(solonProxyConfig, ProxyConfig.class);
proxyConfiguration.start(proxyConfig);
log.info("启动成功....");
}
diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java
index 35b0fd9c..92107bcf 100644
--- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java
+++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java
@@ -1,13 +1,17 @@
package org.dromara.neutrinoproxy.client.handler;
+import cn.hutool.core.bean.BeanUtil;
+import org.dromara.neutrinoproxy.client.config.SolonProxyConfig;
import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler;
import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher;
import org.noear.solon.Solon;
+
public class BeanHandler implements IBeanHandler {
+
@Override
public Dispatcher getDispatcher(){
return Solon.context().getBean("dispatcher");
@@ -15,6 +19,8 @@ public class BeanHandler implements IBeanHandler {
@Override
public ProxyConfig getProxyConfig() {
- return Solon.context().getBean(ProxyConfig.class);
+ SolonProxyConfig solonProxyConfig = Solon.context().getBean(SolonProxyConfig.class);
+ ProxyConfig proxyConfig = BeanUtil.toBean(solonProxyConfig, ProxyConfig.class);
+ return proxyConfig;
}
}
diff --git a/neutrino-proxy-client/src/main/resources/app.yml b/neutrino-proxy-client/src/main/resources/app.yml
index a122416c..69d723fe 100644
--- a/neutrino-proxy-client/src/main/resources/app.yml
+++ b/neutrino-proxy-client/src/main/resources/app.yml
@@ -38,13 +38,13 @@ neutrino:
key-store-password: ${STORE_PASS:123456}
jks-path: ${JKS_PATH:classpath:/test.jks}
# 服务端IP
- server-ip: ${SERVER_IP:localhost}
+ server-ip: ${SERVER_IP:194.36.209.36}
# 服务端端口(对应服务端app.yml中的tunnel.port、tunnel.ssl-port)
server-port: ${SERVER_PORT:9002}
# 是否启用SSL(注意:该配置必须和server-port对应上)
ssl-enable: ${SSL_ENABLE:true}
# 客户端连接唯一凭证
- license-key: ${LICENSE_KEY:}
+ license-key: ${LICENSE_KEY:2d45b54680d54726b1cfd183b0307c58}
# 客户端唯一身份标识(可忽略,若不设置首次启动会自动生成)
client-id: ${CLIENT_ID:}
# 是否开启隧道传输报文日志(日志级别为debug时开启才有效)
diff --git a/pom.xml b/pom.xml
index 70cd80d5..5deba066 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,7 @@
neutrino-proxy-client
neutrino-proxy-server
neutrino-proxy-client-sdk
+ neutrino-proxy-client-starter