diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java index 0af1ef55..9e442ea7 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java @@ -5,6 +5,7 @@ import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; import org.dromara.neutrinoproxy.client.sdk.util.ProxyUtil; @@ -21,7 +22,8 @@ import java.util.concurrent.ScheduledExecutorService; * @date: 2022/6/16 */ @Slf4j -public class IAbProxyClientService { +@Data +public class IAbProxyClientService { public ProxyConfig proxyConfig; @@ -40,7 +42,7 @@ public class IAbProxyClientService { */ public static final ScheduledExecutorService reconnectExecutor = Executors.newSingleThreadScheduledExecutor(new CustomThreadFactory("ClientReconnect")); - public void init_i(){ + public void init(){ reconnectExecutor.scheduleWithFixedDelay(this::reconnect, 10, proxyConfig.getTunnel().getReconnection().getIntervalSeconds(), TimeUnit.SECONDS); try { this.start(); diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/ProxyClientService.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/ProxyClientService.java deleted file mode 100644 index 8922a8bc..00000000 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/ProxyClientService.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.dromara.neutrinoproxy.client.sdk.core; - -import io.netty.bootstrap.Bootstrap; -import lombok.extern.slf4j.Slf4j; -import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; -import org.noear.solon.annotation.Component; -import org.noear.solon.annotation.Init; -import org.noear.solon.annotation.Inject; - -/** - * 代理客户端服务 - * @author: aoshiguchen - * @date: 2022/6/16 - */ -@Slf4j -@Component -public class ProxyClientService extends IAbProxyClientService{ - @Inject - private ProxyConfig proxyConfig; - @Inject("cmdTunnelBootstrap") - private Bootstrap cmdTunnelBootstrap; - @Inject("udpServerBootstrap") - private Bootstrap udpServerBootstrap; - @Init - public void init() { - super.proxyConfig=proxyConfig; - super.cmdTunnelBootstrap=cmdTunnelBootstrap; - super.udpServerBootstrap=udpServerBootstrap; - init_i(); - } -} diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java new file mode 100644 index 00000000..e11ac05d --- /dev/null +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java @@ -0,0 +1,76 @@ +package org.dromara.neutrinoproxy.client.sdk.handler; + +import com.google.common.collect.Lists; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.nio.NioEventLoopGroup; +import org.dromara.neutrinoproxy.client.sdk.config.IProxyConfiguration; +import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; +import org.dromara.neutrinoproxy.client.sdk.core.IAbProxyClientService; +import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; +import org.dromara.neutrinoproxy.core.ProxyMessage; +import org.dromara.neutrinoproxy.core.ProxyMessageHandler; +import org.dromara.neutrinoproxy.core.aot.NeutrinoCoreRuntimeNativeRegistrar; +import org.dromara.neutrinoproxy.core.dispatcher.DefaultDispatcher; +import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher; + +import java.util.List; + +/** + * + * @author: gc.x + * @date: 2024/1/21 + */ +public abstract class ProxyMessageFactory extends IProxyConfiguration { + + public abstract void beanInject(String beanName, Object t); + public abstract Object getBean(String beanName); + + public void start(ProxyConfig proxyConfig){ + init(proxyConfig); + IAbProxyClientService clientService=new IAbProxyClientService(); + clientService.setProxyConfig(proxyConfig); + clientService.setCmdTunnelBootstrap((Bootstrap) getBean("cmdTunnelBootstrap")); + clientService.setUdpServerBootstrap((Bootstrap) getBean("udpServerBootstrap")); + clientService.init(); + } + + public void init(ProxyConfig proxyConfig){ + NioEventLoopGroup tunnelWorkGroup = super.tunnelWorkGroup(proxyConfig); + beanInject("tunnelWorkGroup",tunnelWorkGroup); + NioEventLoopGroup tcpRealServerWorkGroup = super.tcpRealServerWorkGroup(proxyConfig); + beanInject("tcpRealServerWorkGroup",tcpRealServerWorkGroup); + NioEventLoopGroup udpServerGroup = super.udpServerGroup(proxyConfig); + beanInject("udpServerGroup",udpServerGroup); + NioEventLoopGroup udpWorkGroup = super.udpWorkGroup(proxyConfig); + beanInject("udpWorkGroup",udpWorkGroup); + Bootstrap cmdTunnelBootstrap = super.cmdTunnelBootstrap(proxyConfig, tunnelWorkGroup); + beanInject("cmdTunnelBootstrap",cmdTunnelBootstrap); + Bootstrap tcpProxyTunnelBootstrap = super.tcpProxyTunnelBootstrap(proxyConfig, tunnelWorkGroup); + beanInject("tcpProxyTunnelBootstrap",tcpProxyTunnelBootstrap); + Bootstrap udpProxyTunnelBootstrap = super.udpProxyTunnelBootstrap(proxyConfig, tunnelWorkGroup); + beanInject("udpProxyTunnelBootstrap",udpProxyTunnelBootstrap); + Bootstrap realServerBootstrap = super.realServerBootstrap(proxyConfig, tcpRealServerWorkGroup); + beanInject("realServerBootstrap",realServerBootstrap); + Bootstrap udpServerBootstrap = super.udpServerBootstrap(proxyConfig, udpServerGroup, udpWorkGroup); + beanInject("udpServerBootstrap",udpServerBootstrap); + NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar = super.neutrinoCoreRuntimeNativeRegistrar(); + beanInject("neutrinoCoreRuntimeNativeRegistrar",neutrinoCoreRuntimeNativeRegistrar); + dispatcher(proxyConfig, tcpProxyTunnelBootstrap, realServerBootstrap); + } + public void dispatcher(ProxyConfig proxyConfig, Bootstrap tcpProxyTunnelBootstrap, Bootstrap realServerBootstrap) { + List list = Lists.newArrayList( + new ProxyMessageAuthHandler(proxyConfig), + new ProxyMessageConnectHandler(tcpProxyTunnelBootstrap,realServerBootstrap,proxyConfig), + new ProxyMessageDisconnectHandler(), + new ProxyMessageErrorHandler(), + new ProxyMessageTransferHandler(), + new UdpProxyMessageConnectHandler(proxyConfig,tcpProxyTunnelBootstrap), + new UdpProxyMessageTransferHandler() + ); + Dispatcher dispatcher = new DefaultDispatcher<>("MessageDispatcher", list, + proxyMessage -> ProxyDataTypeEnum.of((int)proxyMessage.getType()) == null ? + null : ProxyDataTypeEnum.of((int)proxyMessage.getType()).getName()); + beanInject("dispatcher",dispatcher); + } +} diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/solon/BeanHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/solon/BeanHandler.java deleted file mode 100644 index ed8f3fb6..00000000 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/solon/BeanHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.dromara.neutrinoproxy.client.sdk.solon; - -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.class); - } - - @Override - public ProxyConfig getProxyConfig() { - return Solon.context().getBean(ProxyConfig.class); - } -} diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/solon/ProxyConfiguration.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/solon/ProxyConfiguration.java deleted file mode 100644 index eaeddcf1..00000000 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/solon/ProxyConfiguration.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.dromara.neutrinoproxy.client.sdk.solon; - -import com.google.common.collect.Lists; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.nio.NioEventLoopGroup; -import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler; -import org.dromara.neutrinoproxy.client.sdk.config.IProxyConfiguration; -import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; -import org.dromara.neutrinoproxy.client.sdk.handler.*; -import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; -import org.dromara.neutrinoproxy.core.ProxyMessage; -import org.dromara.neutrinoproxy.core.ProxyMessageHandler; -import org.dromara.neutrinoproxy.core.aot.NeutrinoCoreRuntimeNativeRegistrar; -import org.dromara.neutrinoproxy.core.dispatcher.DefaultDispatcher; -import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher; -import org.noear.solon.Solon; -import org.noear.solon.annotation.Bean; -import org.noear.solon.annotation.Configuration; -import org.noear.solon.annotation.Inject; -import org.noear.solon.core.bean.LifecycleBean; - -import java.util.List; - -/** - * 代理配置 - * @author: aoshiguchen - * @date: 2022/10/8 - */ -@Configuration -public class ProxyConfiguration extends IProxyConfiguration implements LifecycleBean { - @Inject - private ProxyConfig proxyConfig; - @Inject("tcpProxyTunnelBootstrap") - private Bootstrap tcpProxyTunnelBootstrap; - @Inject("realServerBootstrap") - private Bootstrap realServerBootstrap; - - @Override - public void start() throws Throwable { - List list = Lists.newArrayList( - new ProxyMessageAuthHandler(proxyConfig), - new ProxyMessageConnectHandler(tcpProxyTunnelBootstrap,realServerBootstrap,proxyConfig), - new ProxyMessageDisconnectHandler(), - new ProxyMessageErrorHandler(), - new ProxyMessageTransferHandler(), - new UdpProxyMessageConnectHandler(proxyConfig,tcpProxyTunnelBootstrap), - new UdpProxyMessageTransferHandler() - ); - Dispatcher dispatcher = new DefaultDispatcher<>("MessageDispatcher", list, - proxyMessage -> ProxyDataTypeEnum.of((int)proxyMessage.getType()) == null ? - null : ProxyDataTypeEnum.of((int)proxyMessage.getType()).getName()); - Solon.context().wrapAndPut(Dispatcher.class, dispatcher); - } - - @Override - public IBeanHandler getBeanHandler() { - return new BeanHandler(); - } - @Bean("tunnelWorkGroup") - public NioEventLoopGroup tunnelWorkGroup(@Inject ProxyConfig proxyConfig) { - return super.tunnelWorkGroup(proxyConfig); - } - - @Bean("tcpRealServerWorkGroup") - public NioEventLoopGroup tcpRealServerWorkGroup(@Inject ProxyConfig proxyConfig) { - // 暂时先公用此配置 - return super.tcpRealServerWorkGroup(proxyConfig); - } - - @Bean("udpServerGroup") - public NioEventLoopGroup udpServerGroup(@Inject ProxyConfig proxyConfig) { - // 暂时先公用此配置 - return super.udpServerGroup(proxyConfig); - } - - @Bean("udpWorkGroup") - public NioEventLoopGroup udpWorkGroup(@Inject ProxyConfig proxyConfig) { - // 暂时先公用此配置 - return super.udpWorkGroup(proxyConfig); - } - - @Bean("cmdTunnelBootstrap") - public Bootstrap cmdTunnelBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("tunnelWorkGroup") NioEventLoopGroup tunnelWorkGroup) { - return super.cmdTunnelBootstrap(proxyConfig,tunnelWorkGroup); - } - - @Bean("tcpProxyTunnelBootstrap") - public Bootstrap tcpProxyTunnelBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("tunnelWorkGroup") NioEventLoopGroup tunnelWorkGroup) { - return super.tcpProxyTunnelBootstrap(proxyConfig,tunnelWorkGroup); - } - - @Bean("udpProxyTunnelBootstrap") - public Bootstrap udpProxyTunnelBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("tunnelWorkGroup") NioEventLoopGroup tunnelWorkGroup) { - return super.udpProxyTunnelBootstrap(proxyConfig,tunnelWorkGroup); - } - - @Bean("realServerBootstrap") - public Bootstrap realServerBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("tcpRealServerWorkGroup") NioEventLoopGroup tcpRealServerWorkGroup - ) { - return super.realServerBootstrap(proxyConfig,tcpRealServerWorkGroup); - } - - @Bean("udpServerBootstrap") - public Bootstrap udpServerBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("udpServerGroup") NioEventLoopGroup udpServerGroup, - @Inject("udpWorkGroup") NioEventLoopGroup udpWorkGroup) { - return super.udpServerBootstrap(proxyConfig,udpServerGroup,udpWorkGroup); - } - - @Bean - public NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar() { - return super.neutrinoCoreRuntimeNativeRegistrar(); - } -} 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 7ef012e1..489bf99d 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,27 +1,11 @@ package org.dromara.neutrinoproxy.client.config; -import com.google.common.collect.Lists; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.nio.NioEventLoopGroup; +import org.dromara.neutrinoproxy.client.handler.BeanHandler; import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler; -import org.dromara.neutrinoproxy.client.sdk.config.IProxyConfiguration; -import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; -import org.dromara.neutrinoproxy.client.sdk.handler.*; -import org.dromara.neutrinoproxy.client.sdk.solon.BeanHandler; -import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; -import org.dromara.neutrinoproxy.core.ProxyMessage; -import org.dromara.neutrinoproxy.core.ProxyMessageHandler; -import org.dromara.neutrinoproxy.core.aot.NeutrinoCoreRuntimeNativeRegistrar; -import org.dromara.neutrinoproxy.core.dispatcher.DefaultDispatcher; -import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher; +import org.dromara.neutrinoproxy.client.sdk.handler.ProxyMessageFactory; import org.noear.solon.Solon; -import org.noear.solon.annotation.Bean; import org.noear.solon.annotation.Configuration; -import org.noear.solon.annotation.Inject; -import org.noear.solon.core.bean.LifecycleBean; - -import java.util.List; +import org.noear.solon.core.BeanWrap; /** * 代理配置 @@ -29,92 +13,24 @@ import java.util.List; * @date: 2022/10/8 */ @Configuration -public class ProxyConfiguration extends IProxyConfiguration implements LifecycleBean { - @Inject - private ProxyConfig proxyConfig; - @Inject("tcpProxyTunnelBootstrap") - private Bootstrap tcpProxyTunnelBootstrap; - @Inject("realServerBootstrap") - private Bootstrap realServerBootstrap; +public class ProxyConfiguration extends ProxyMessageFactory { - @Override - public void start() throws Throwable { - List list = Lists.newArrayList( - new ProxyMessageAuthHandler(proxyConfig), - new ProxyMessageConnectHandler(tcpProxyTunnelBootstrap,realServerBootstrap,proxyConfig), - new ProxyMessageDisconnectHandler(), - new ProxyMessageErrorHandler(), - new ProxyMessageTransferHandler(), - new UdpProxyMessageConnectHandler(proxyConfig,tcpProxyTunnelBootstrap), - new UdpProxyMessageTransferHandler() - ); - Dispatcher dispatcher = new DefaultDispatcher<>("MessageDispatcher", list, - proxyMessage -> ProxyDataTypeEnum.of((int)proxyMessage.getType()) == null ? - null : ProxyDataTypeEnum.of((int)proxyMessage.getType()).getName()); - Solon.context().wrapAndPut(Dispatcher.class, dispatcher); - } @Override public IBeanHandler getBeanHandler() { return new BeanHandler(); } - @Bean("tunnelWorkGroup") - public NioEventLoopGroup tunnelWorkGroup(@Inject ProxyConfig proxyConfig) { - return super.tunnelWorkGroup(proxyConfig); + + @Override + public void beanInject(String beanName, Object bean) { + //包装Bean(指定名字的) + BeanWrap beanWrap = Solon.context().wrap(beanName, bean); + //以名字注册 + Solon.context().putWrap(beanName, beanWrap); } - @Bean("tcpRealServerWorkGroup") - public NioEventLoopGroup tcpRealServerWorkGroup(@Inject ProxyConfig proxyConfig) { - // 暂时先公用此配置 - return super.tcpRealServerWorkGroup(proxyConfig); - } - - @Bean("udpServerGroup") - public NioEventLoopGroup udpServerGroup(@Inject ProxyConfig proxyConfig) { - // 暂时先公用此配置 - return super.udpServerGroup(proxyConfig); - } - - @Bean("udpWorkGroup") - public NioEventLoopGroup udpWorkGroup(@Inject ProxyConfig proxyConfig) { - // 暂时先公用此配置 - return super.udpWorkGroup(proxyConfig); - } - - @Bean("cmdTunnelBootstrap") - public Bootstrap cmdTunnelBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("tunnelWorkGroup") NioEventLoopGroup tunnelWorkGroup) { - return super.cmdTunnelBootstrap(proxyConfig,tunnelWorkGroup); - } - - @Bean("tcpProxyTunnelBootstrap") - public Bootstrap tcpProxyTunnelBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("tunnelWorkGroup") NioEventLoopGroup tunnelWorkGroup) { - return super.tcpProxyTunnelBootstrap(proxyConfig,tunnelWorkGroup); - } - - @Bean("udpProxyTunnelBootstrap") - public Bootstrap udpProxyTunnelBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("tunnelWorkGroup") NioEventLoopGroup tunnelWorkGroup) { - return super.udpProxyTunnelBootstrap(proxyConfig,tunnelWorkGroup); - } - - @Bean("realServerBootstrap") - public Bootstrap realServerBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("tcpRealServerWorkGroup") NioEventLoopGroup tcpRealServerWorkGroup - ) { - return super.realServerBootstrap(proxyConfig,tcpRealServerWorkGroup); - } - - @Bean("udpServerBootstrap") - public Bootstrap udpServerBootstrap(@Inject ProxyConfig proxyConfig, - @Inject("udpServerGroup") NioEventLoopGroup udpServerGroup, - @Inject("udpWorkGroup") NioEventLoopGroup udpWorkGroup) { - return super.udpServerBootstrap(proxyConfig,udpServerGroup,udpWorkGroup); - } - - @Bean - public NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar() { - return super.neutrinoCoreRuntimeNativeRegistrar(); + @Override + public Object getBean(String beanName) { + return Solon.context().getBean(beanName); } } diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java new file mode 100644 index 00000000..e1252d91 --- /dev/null +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java @@ -0,0 +1,28 @@ +package org.dromara.neutrinoproxy.client.core; + +import lombok.extern.slf4j.Slf4j; +import org.dromara.neutrinoproxy.client.config.ProxyConfiguration; +import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; +import org.noear.solon.annotation.Component; +import org.noear.solon.annotation.Init; +import org.noear.solon.annotation.Inject; + +/** + * 代理客户端服务 + * @author: aoshiguchen + * @date: 2022/6/16 + */ +@Slf4j +@Component +public class ProxyClientService{ + @Inject + private ProxyConfiguration proxyConfiguration; + @Inject + private ProxyConfig proxyConfig; + @Init + public void init() { + log.info("启动中...."); + proxyConfiguration.start(proxyConfig); + log.info("启动成功...."); + } +} diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java index e6c2debd..35b0fd9c 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 @@ -7,9 +7,10 @@ import org.noear.solon.Solon; public class BeanHandler implements IBeanHandler { + @Override public Dispatcher getDispatcher(){ - return Solon.context().getBean(Dispatcher.class); + return Solon.context().getBean("dispatcher"); } @Override