!58 优化代码 SDK去除solon或者spring的bean注入
Merge pull request !58 from xgc/feature/sdk
This commit is contained in:
@@ -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>
|
||||
|
||||
-3
@@ -16,7 +16,4 @@ public class SpringProxyClient {
|
||||
SpringApplication.run(SpringProxyClient.class, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
-18
@@ -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();
|
||||
|
||||
-31
@@ -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;
|
||||
}
|
||||
}
|
||||
+10
@@ -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();
|
||||
}
|
||||
+13
@@ -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();
|
||||
}
|
||||
+64
@@ -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();
|
||||
}
|
||||
}
|
||||
+27
@@ -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;
|
||||
|
||||
}
|
||||
+10
@@ -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();
|
||||
}
|
||||
+63
@@ -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!");
|
||||
}
|
||||
}
|
||||
}
|
||||
+22
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
-8
@@ -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();
|
||||
}
|
||||
+3
-5
@@ -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;
|
||||
|
||||
+8
-6
@@ -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
|
||||
|
||||
+7
-8
@@ -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()) {
|
||||
|
||||
+7
-9
@@ -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()) {
|
||||
|
||||
+29
-15
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
-22
@@ -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();
|
||||
|
||||
-26
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user