!58 优化代码 SDK去除solon或者spring的bean注入

Merge pull request !58 from xgc/feature/sdk
This commit is contained in:
傲世孤尘
2024-01-24 04:46:24 +00:00
committed by Gitee
19 changed files with 275 additions and 151 deletions
@@ -73,6 +73,18 @@
<version>${mica-auto.vaersion}</version>
<scope>provided</scope>
</dependency>
<!--SSH中转隧道-->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jzlib</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
@@ -16,7 +16,4 @@ public class SpringProxyClient {
SpringApplication.run(SpringProxyClient.class, args);
}
}
@@ -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();
@@ -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;
}
}
@@ -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();
}
@@ -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();
}
@@ -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<String, SSHProxy> connections;
private Map<String, SSHProxyFactory> 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<String, SSHProxyFactory> entry : factories.entrySet()) {
SSHProxyFactory factory = entry.getValue();
factory.closeTunnel();
}
factories.clear();
}
}
@@ -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;
}
@@ -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();
}
@@ -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", "[email protected],zlib,none");
config.put("compression.c2s", "[email protected],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!");
}
}
}
@@ -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);
}
}
@@ -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();
}
@@ -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;
@@ -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<ProxyMessage>{
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<ProxyMessage>
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
@@ -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<ProxyMessage> {
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<ProxyMes
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
log.error("[TCP Proxy Channel]Client ProxyChannel Error channelId:{}", ctx.channel().id().asLongText(), cause);
ctx.close();
}
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
if(evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent)evt;
switch (event.state()) {
@@ -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,13 @@ import org.dromara.neutrinoproxy.core.ProxyMessage;
@Slf4j
public class UdpProxyChannelHandler extends SimpleChannelInboundHandler<ProxyMessage> {
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<ProxyMes
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
log.error("[UDP Proxy Channel]Client ProxyChannel Error channelId:{}", ctx.channel().id().asLongText(), cause);
ctx.close();
}
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
if(evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent)evt;
switch (event.state()) {
@@ -4,6 +4,10 @@ import com.google.common.collect.Lists;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.nio.NioEventLoopGroup;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.neutrinoproxy.client.sdk.config.IProxyConfiguration;
import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig;
import org.dromara.neutrinoproxy.client.sdk.core.IAbProxyClientService;
@@ -14,6 +18,8 @@ import org.dromara.neutrinoproxy.core.dispatcher.DefaultDispatcher;
import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
*
@@ -22,41 +28,49 @@ import java.util.List;
*/
public abstract class ProxyMessageFactory extends IProxyConfiguration {
public abstract void beanInject(String beanName, Object t);
public abstract Object getBean(String beanName,Class<?> c);
public abstract void stop();
public abstract boolean isAotRuntime();
public static Map<String,BeanInfo> beanManager=new ConcurrentHashMap<>();
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class BeanInfo<T>{
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<ChannelHandlerContext, ProxyMessage> 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());
}
}
@@ -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();
@@ -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;
}
}