diff --git a/client+/neutrino-proxy-client-starter/pom.xml b/client+/neutrino-proxy-client-starter/pom.xml
index fcad790c..9c2a34ba 100644
--- a/client+/neutrino-proxy-client-starter/pom.xml
+++ b/client+/neutrino-proxy-client-starter/pom.xml
@@ -73,6 +73,18 @@
${mica-auto.vaersion}
provided
+
+
+ com.jcraft
+ jsch
+ 0.1.54
+
+
+ com.jcraft
+ jzlib
+ 1.1.3
+
+
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java
index 082df470..29315de8 100644
--- a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java
@@ -16,7 +16,4 @@ public class SpringProxyClient {
SpringApplication.run(SpringProxyClient.class, args);
}
-
-
-
}
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java
index 4e33afec..52a39dd6 100644
--- a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java
@@ -1,8 +1,6 @@
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;
@@ -15,22 +13,6 @@ import org.springframework.stereotype.Component;
@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();
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java
deleted file mode 100644
index 1d24fdff..00000000
--- a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java
+++ /dev/null
@@ -1,31 +0,0 @@
-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/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionFactory.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionFactory.java
new file mode 100644
index 00000000..8f0748ca
--- /dev/null
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionFactory.java
@@ -0,0 +1,10 @@
+package org.dromara.neutrinoproxy.client.starter.ssh;
+
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+public class SSHConnectionFactory {
+ public static final SSHConnectionService factory = new SSHConnectionServiceImpl();
+}
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionService.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionService.java
new file mode 100644
index 00000000..76007126
--- /dev/null
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionService.java
@@ -0,0 +1,13 @@
+package org.dromara.neutrinoproxy.client.starter.ssh;
+
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+public interface SSHConnectionService {
+ String addConnection(String host, String username, String password, int localPort, int remotePort,String remoteHost);
+ void openTunnel(String sshId);
+ void closeTunnel(String sshId);
+ void closeAllTunnels();
+}
\ No newline at end of file
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionServiceImpl.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionServiceImpl.java
new file mode 100644
index 00000000..b5f38f60
--- /dev/null
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHConnectionServiceImpl.java
@@ -0,0 +1,64 @@
+package org.dromara.neutrinoproxy.client.starter.ssh;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+public class SSHConnectionServiceImpl implements SSHConnectionService {
+
+ private Map connections;
+ private Map factories;
+
+ public SSHConnectionServiceImpl() {
+ connections = new HashMap<>();
+ factories = new HashMap<>();
+ }
+
+ @Override
+ public String addConnection(String host, String username, String password, int localPort, int remotePort,String remoteHost) {
+ SSHProxy connection = new SSHProxy();
+ String sshId = UUID.randomUUID().toString();
+ connection.setSshId(sshId);
+ connection.setHost(host);
+ connection.setUsername(username);
+ connection.setPassword(password);
+ connection.setLocalPort(localPort);
+ connection.setRemotePort(remotePort);
+ connection.setRemoteHost(remoteHost);
+ connections.put(connection.getSshId(), connection);
+ return sshId;
+ }
+
+ @Override
+ public void openTunnel(String sshId) {
+ SSHProxy connection = connections.get(sshId);
+ if (connection != null && !factories.containsKey(sshId)) {
+ SSHProxyFactory factory = new SSHProxyFactoryImpl(connection);
+ factory.openTunnel();
+ factories.put(sshId, factory);
+ }
+ }
+
+ @Override
+ public void closeTunnel(String sshId) {
+ SSHProxyFactory factory = factories.get(sshId);
+
+ if (factory != null) {
+ factory.closeTunnel();
+ factories.remove(sshId);
+ }
+ }
+
+ @Override
+ public void closeAllTunnels() {
+ for (Map.Entry entry : factories.entrySet()) {
+ SSHProxyFactory factory = entry.getValue();
+ factory.closeTunnel();
+ }
+ factories.clear();
+ }
+}
\ No newline at end of file
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxy.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxy.java
new file mode 100644
index 00000000..0de09ee4
--- /dev/null
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxy.java
@@ -0,0 +1,27 @@
+package org.dromara.neutrinoproxy.client.starter.ssh;
+
+import lombok.Data;
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+@Data
+public class SSHProxy {
+ private String sshId;
+
+ //跳板机服务器公网IP
+ private String host;
+ //跳板机服务器登录名
+ private String username;
+ //跳板机登陆密码
+ private String password;
+ //本地的端口
+ private int localPort;
+
+ //需代理服务器端口号
+ private int remotePort;
+ //需代理服务器ip
+ private String remoteHost;
+
+}
\ No newline at end of file
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxyFactory.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxyFactory.java
new file mode 100644
index 00000000..6d00d1ed
--- /dev/null
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxyFactory.java
@@ -0,0 +1,10 @@
+package org.dromara.neutrinoproxy.client.starter.ssh;
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+public interface SSHProxyFactory {
+ void openTunnel();
+ void closeTunnel();
+}
\ No newline at end of file
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxyFactoryImpl.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxyFactoryImpl.java
new file mode 100644
index 00000000..44a8e6e6
--- /dev/null
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/SSHProxyFactoryImpl.java
@@ -0,0 +1,63 @@
+package org.dromara.neutrinoproxy.client.starter.ssh;
+
+import com.jcraft.jsch.JSch;
+import com.jcraft.jsch.Session;
+import lombok.extern.slf4j.Slf4j;
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+@Slf4j
+public class SSHProxyFactoryImpl implements SSHProxyFactory {
+ private SSHProxy connection;
+ private Session session;
+
+ public SSHProxyFactoryImpl(SSHProxy connection) {
+ this.connection = connection;
+ }
+
+ @Override
+ public void openTunnel() {
+ try {
+ JSch jsch = new JSch();
+ session = jsch.getSession(connection.getUsername(), connection.getHost(), 22);
+ session.setPassword(connection.getPassword());
+ // 开启调试模式,打印更多详细日志
+ java.util.Properties config = new java.util.Properties();
+ config.put("StrictHostKeyChecking", "no");
+ config.put("userauth.gssapi-with-mic", "no");
+ config.put("compression.s2c", "zlib@openssh.com,zlib,none");
+ config.put("compression.c2s", "zlib@openssh.com,zlib,none");
+ session.setConfig(config);
+ session.setDaemonThread(true);
+ JSch.setLogger(new com.jcraft.jsch.Logger() {
+ public boolean isEnabled(int level) {
+ return true;
+ }
+ public void log(int level, String message) {
+ log.info("JSch - " + level + ": " + message);
+ }
+ });
+
+ int assignedPort = session.setPortForwardingL(connection.getLocalPort(), connection.getRemoteHost(), connection.getRemotePort());
+ session.connect(10000);
+ if (assignedPort != -1) {
+ log.info("SSH connection established successfully!");
+ } else {
+ log.info("Failed to establish SSH connection!");
+ }
+ } catch (Exception e) {
+ // 异常处理
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void closeTunnel() {
+ if (session != null && session.isConnected()) {
+ session.disconnect();
+ log.info("SSH connection closed successfully!");
+ }
+ }
+}
\ No newline at end of file
diff --git a/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/Test.java b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/Test.java
new file mode 100644
index 00000000..6ef517de
--- /dev/null
+++ b/client+/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/ssh/Test.java
@@ -0,0 +1,22 @@
+package org.dromara.neutrinoproxy.client.starter.ssh;
+/**
+ *
+ * @author: gc.x
+ * @date: 2024/1/21
+ */
+public class Test {
+ public static void main(String[] args) {
+
+ // 添加SSH连接
+ String sshId = SSHConnectionFactory.factory.addConnection("194.36.209.398", "root", "xxxxxx", 1234, 6379,"xx.xx.xx.xx");
+ SSHConnectionFactory.factory.openTunnel(sshId);
+ try {
+ Thread.sleep(100000000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ // 关闭SSH隧道
+ SSHConnectionFactory.factory.closeTunnel(sshId);
+
+ }
+}
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IBeanHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IBeanHandler.java
deleted file mode 100644
index 266d5b3d..00000000
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IBeanHandler.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.dromara.neutrinoproxy.client.sdk.config;
-
-import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher;
-
-public interface IBeanHandler {
- Dispatcher getDispatcher();
- ProxyConfig getProxyConfig();
-}
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 007eb8ba..9fba8a20 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
@@ -14,7 +14,6 @@ import org.dromara.neutrinoproxy.client.sdk.core.*;
import org.dromara.neutrinoproxy.client.sdk.util.ProxyUtil;
import org.dromara.neutrinoproxy.core.ProxyMessageDecoder;
import org.dromara.neutrinoproxy.core.ProxyMessageEncoder;
-import org.dromara.neutrinoproxy.core.aot.NeutrinoCoreRuntimeNativeRegistrar;
import java.net.InetSocketAddress;
@@ -26,7 +25,6 @@ import java.net.InetSocketAddress;
public abstract class IProxyConfiguration {
- public abstract IBeanHandler getBeanHandler();
public NioEventLoopGroup tunnelWorkGroup(ProxyConfig proxyConfig) {
return new NioEventLoopGroup(proxyConfig.getTunnel().getThreadCount());
@@ -76,7 +74,7 @@ public abstract class IProxyConfiguration {
proxyConfig.getProtocol().getLengthAdjustment(), proxyConfig.getProtocol().getInitialBytesToStrip()));
ch.pipeline().addLast(new ProxyMessageEncoder());
ch.pipeline().addLast(new IdleStateHandler(proxyConfig.getProtocol().getReadIdleTime(), proxyConfig.getProtocol().getWriteIdleTime(), proxyConfig.getProtocol().getAllIdleTimeSeconds()));
- ch.pipeline().addLast(new CmdChannelHandler(getBeanHandler()));
+ ch.pipeline().addLast(new CmdChannelHandler());
}
});
return bootstrap;
@@ -103,7 +101,7 @@ public abstract class IProxyConfiguration {
proxyConfig.getProtocol().getLengthAdjustment(), proxyConfig.getProtocol().getInitialBytesToStrip()));
ch.pipeline().addLast(new ProxyMessageEncoder());
ch.pipeline().addLast(new IdleStateHandler(proxyConfig.getProtocol().getReadIdleTime(), proxyConfig.getProtocol().getWriteIdleTime(), proxyConfig.getProtocol().getAllIdleTimeSeconds()));
- ch.pipeline().addLast(new TcpProxyChannelHandler(getBeanHandler()));
+ ch.pipeline().addLast(new TcpProxyChannelHandler());
}
});
return bootstrap;
@@ -129,7 +127,7 @@ public abstract class IProxyConfiguration {
proxyConfig.getProtocol().getLengthAdjustment(), proxyConfig.getProtocol().getInitialBytesToStrip()));
ch.pipeline().addLast(new ProxyMessageEncoder());
ch.pipeline().addLast(new IdleStateHandler(proxyConfig.getProtocol().getReadIdleTime(), proxyConfig.getProtocol().getWriteIdleTime(), proxyConfig.getProtocol().getAllIdleTimeSeconds()));
- ch.pipeline().addLast(new UdpProxyChannelHandler(getBeanHandler()));
+ ch.pipeline().addLast(new UdpProxyChannelHandler());
}
});
return bootstrap;
diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/CmdChannelHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/CmdChannelHandler.java
index 190eab7a..a3c8fde4 100644
--- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/CmdChannelHandler.java
+++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/CmdChannelHandler.java
@@ -6,11 +6,12 @@ import io.netty.channel.ChannelOption;
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.handler.ProxyMessageFactory;
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;
/**
* 处理与服务端之间的数据传输
@@ -20,11 +21,10 @@ import org.dromara.neutrinoproxy.core.ProxyMessage;
@Slf4j
public class CmdChannelHandler extends SimpleChannelInboundHandler{
private static volatile Boolean transferLogEnable = Boolean.FALSE;
- private final IBeanHandler beanHandler;
- public CmdChannelHandler(IBeanHandler beanHandler) {
- this.beanHandler = beanHandler;
- ProxyConfig proxyConfig = beanHandler.getProxyConfig();
+
+ public CmdChannelHandler() {
+ ProxyConfig proxyConfig = (ProxyConfig) ProxyMessageFactory.beanManager.get("proxyConfig").getBean();
if (null != proxyConfig.getClient() && null != proxyConfig.getTunnel().getHeartbeatLogEnable()) {
transferLogEnable = proxyConfig.getTunnel().getHeartbeatLogEnable();
}
@@ -35,7 +35,9 @@ public class CmdChannelHandler extends SimpleChannelInboundHandler
if (ProxyMessage.TYPE_HEARTBEAT != proxyMessage.getType() || transferLogEnable) {
log.debug("[CMD Channel]Client CmdChannel recieved proxy message, type is {}", proxyMessage.getType());
}
- beanHandler.getDispatcher().dispatch(ctx, proxyMessage);
+// beanHandler.getDispatcher().dispatch(ctx, proxyMessage);
+ Dispatcher dispatcher = (Dispatcher) ProxyMessageFactory.beanManager.get("dispatcher").getBean();
+ dispatcher.dispatch(ctx,proxyMessage);
}
@Override
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 41f1c7ff..5daf8a9e 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
@@ -6,10 +6,11 @@ import io.netty.channel.ChannelOption;
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.handler.ProxyMessageFactory;
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;
/**
* 处理与服务端之间的数据传输
@@ -19,16 +20,14 @@ import org.dromara.neutrinoproxy.core.ProxyMessage;
@Slf4j
public class TcpProxyChannelHandler extends SimpleChannelInboundHandler {
- private IBeanHandler beanHandler;
- public TcpProxyChannelHandler(IBeanHandler beanHandler) {
- this.beanHandler = beanHandler;
- }
+
@Override
protected void channelRead0(ChannelHandlerContext ctx, ProxyMessage proxyMessage) throws Exception {
if (ProxyMessage.TYPE_HEARTBEAT != proxyMessage.getType()) {
log.debug("[TCP Proxy Channel]Client ProxyChannel recieved proxy message, type is {}", proxyMessage.getType());
}
- beanHandler.getDispatcher().dispatch(ctx, proxyMessage);
+ Dispatcher dispatcher = (Dispatcher) ProxyMessageFactory.beanManager.get("dispatcher").getBean();
+ dispatcher.dispatch(ctx,proxyMessage);
}
@Override
@@ -54,13 +53,13 @@ public class TcpProxyChannelHandler extends SimpleChannelInboundHandler {
- private IBeanHandler beanHandler;
- public UdpProxyChannelHandler(IBeanHandler beanHandler) {
- this.beanHandler = beanHandler;
- }
@Override
- protected void channelRead0(ChannelHandlerContext ctx, ProxyMessage proxyMessage) throws Exception {
+ protected void channelRead0(ChannelHandlerContext ctx, ProxyMessage proxyMessage) {
if (ProxyMessage.TYPE_HEARTBEAT != proxyMessage.getType()) {
log.debug("[UDP Proxy Channel]Client ProxyChannel recieved proxy message, type is {}", proxyMessage.getType());
}
- beanHandler.getDispatcher().dispatch(ctx, proxyMessage);
+ Dispatcher dispatcher = (Dispatcher) ProxyMessageFactory.beanManager.get("dispatcher").getBean();
+ dispatcher.dispatch(ctx,proxyMessage);
}
@Override
@@ -54,13 +52,13 @@ public class UdpProxyChannelHandler extends SimpleChannelInboundHandler c);
-
public abstract void stop();
public abstract boolean isAotRuntime();
+ public static Map beanManager=new ConcurrentHashMap<>();
+ @Data
+ @Builder
+ @AllArgsConstructor
+ @NoArgsConstructor
+ public static class BeanInfo{
+ private String beanName;
+ private T bean;
+ private Class> beanClass;
+ }
public void start(ProxyConfig proxyConfig){
init(proxyConfig);
IAbProxyClientService clientService=new IAbProxyClientService();
clientService.setProxyConfig(proxyConfig);
- clientService.setCmdTunnelBootstrap((Bootstrap) getBean("cmdTunnelBootstrap",Bootstrap.class));
- clientService.setUdpServerBootstrap((Bootstrap) getBean("udpServerBootstrap",Bootstrap.class));
+ clientService.setCmdTunnelBootstrap((Bootstrap)beanManager.get("cmdTunnelBootstrap").getBean());
+ clientService.setUdpServerBootstrap((Bootstrap)beanManager.get("udpServerBootstrap").getBean());
clientService.setIsAotRuntime(isAotRuntime());
clientService.init();
}
public void init(ProxyConfig proxyConfig){
+ beanManager.put("proxyConfig",BeanInfo.builder().bean(proxyConfig).beanName("proxyConfig").beanClass(ProxyConfig.class).build());
NioEventLoopGroup tunnelWorkGroup = super.tunnelWorkGroup(proxyConfig);
- beanInject("tunnelWorkGroup",tunnelWorkGroup);
+ beanManager.put("tunnelWorkGroup",BeanInfo.builder().bean(tunnelWorkGroup).beanName("tunnelWorkGroup").beanClass(NioEventLoopGroup.class).build());
NioEventLoopGroup tcpRealServerWorkGroup = super.tcpRealServerWorkGroup(proxyConfig);
- beanInject("tcpRealServerWorkGroup",tcpRealServerWorkGroup);
+ beanManager.put("tcpRealServerWorkGroup",BeanInfo.builder().bean(tcpRealServerWorkGroup).beanName("tcpRealServerWorkGroup").beanClass(NioEventLoopGroup.class).build());
NioEventLoopGroup udpServerGroup = super.udpServerGroup(proxyConfig);
- beanInject("udpServerGroup",udpServerGroup);
+ beanManager.put("udpServerGroup",BeanInfo.builder().bean(udpServerGroup).beanName("udpServerGroup").beanClass(NioEventLoopGroup.class).build());
NioEventLoopGroup udpWorkGroup = super.udpWorkGroup(proxyConfig);
- beanInject("udpWorkGroup",udpWorkGroup);
+ beanManager.put("udpWorkGroup",BeanInfo.builder().bean(udpWorkGroup).beanName("udpWorkGroup").beanClass(NioEventLoopGroup.class).build());
Bootstrap cmdTunnelBootstrap = super.cmdTunnelBootstrap(proxyConfig, tunnelWorkGroup);
- beanInject("cmdTunnelBootstrap",cmdTunnelBootstrap);
+ beanManager.put("cmdTunnelBootstrap",BeanInfo.builder().bean(cmdTunnelBootstrap).beanName("cmdTunnelBootstrap").beanClass(Bootstrap.class).build());
Bootstrap tcpProxyTunnelBootstrap = super.tcpProxyTunnelBootstrap(proxyConfig, tunnelWorkGroup);
- beanInject("tcpProxyTunnelBootstrap",tcpProxyTunnelBootstrap);
+ beanManager.put("tcpProxyTunnelBootstrap",BeanInfo.builder().bean(tcpProxyTunnelBootstrap).beanName("tcpProxyTunnelBootstrap").beanClass(Bootstrap.class).build());
Bootstrap udpProxyTunnelBootstrap = super.udpProxyTunnelBootstrap(proxyConfig, tunnelWorkGroup);
- beanInject("udpProxyTunnelBootstrap",udpProxyTunnelBootstrap);
+ beanManager.put("udpProxyTunnelBootstrap",BeanInfo.builder().bean(udpProxyTunnelBootstrap).beanName("udpProxyTunnelBootstrap").beanClass(Bootstrap.class).build());
Bootstrap realServerBootstrap = super.realServerBootstrap(proxyConfig, tcpRealServerWorkGroup);
- beanInject("realServerBootstrap",realServerBootstrap);
+ beanManager.put("realServerBootstrap",BeanInfo.builder().bean(realServerBootstrap).beanName("realServerBootstrap").beanClass(Bootstrap.class).build());
Bootstrap udpServerBootstrap = super.udpServerBootstrap(proxyConfig, udpServerGroup, udpWorkGroup);
- beanInject("udpServerBootstrap",udpServerBootstrap);
+ beanManager.put("udpServerBootstrap",BeanInfo.builder().bean(udpServerBootstrap).beanName("udpServerBootstrap").beanClass(Bootstrap.class).build());
dispatcher(proxyConfig, tcpProxyTunnelBootstrap, realServerBootstrap);
}
public void dispatcher(ProxyConfig proxyConfig, Bootstrap tcpProxyTunnelBootstrap, Bootstrap realServerBootstrap) {
@@ -72,6 +86,6 @@ public abstract class ProxyMessageFactory extends IProxyConfiguration {
Dispatcher dispatcher = new DefaultDispatcher<>("MessageDispatcher", list,
proxyMessage -> ProxyDataTypeEnum.of((int)proxyMessage.getType()) == null ?
null : ProxyDataTypeEnum.of((int)proxyMessage.getType()).getName());
- beanInject("dispatcher",dispatcher);
+ beanManager.put("dispatcher",BeanInfo.builder().bean(dispatcher).beanName("dispatcher").beanClass(Dispatcher.class).build());
}
}
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 2c9ae5bc..a7fccb4d 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
@@ -1,13 +1,10 @@
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;
/**
@@ -18,25 +15,6 @@ import org.noear.solon.core.runtime.NativeDetector;
@Configuration
public class ProxyConfiguration extends ProxyMessageFactory {
-
- @Override
- public IBeanHandler getBeanHandler() {
- return new BeanHandler();
- }
-
- @Override
- public void beanInject(String beanName, Object bean) {
- //包装Bean(指定名字的)
- BeanWrap beanWrap = Solon.context().wrap(beanName, bean);
- //以名字注册
- Solon.context().putWrap(beanName, beanWrap);
- }
-
- @Override
- public Object getBean(String beanName,Class c) {
- return Solon.context().getBean(beanName);
- }
-
@Override
public void stop() {
Solon.stop();
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
deleted file mode 100644
index 92107bcf..00000000
--- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java
+++ /dev/null
@@ -1,26 +0,0 @@
-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");
- }
-
- @Override
- public ProxyConfig getProxyConfig() {
- SolonProxyConfig solonProxyConfig = Solon.context().getBean(SolonProxyConfig.class);
- ProxyConfig proxyConfig = BeanUtil.toBean(solonProxyConfig, ProxyConfig.class);
- return proxyConfig;
- }
-}