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/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..9d8faa73 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,7 +1,6 @@ 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; 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 92107bcf..00154dbe 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 @@ -2,7 +2,6 @@ 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;