!56 starter添加启动配置

Merge pull request !56 from xgc/feature/sdk
This commit is contained in:
傲世孤尘
2024-01-22 03:31:10 +00:00
committed by Gitee
8 changed files with 51 additions and 57 deletions
@@ -20,7 +20,7 @@ import org.dromara.neutrinoproxy.core.ProxyMessage;
@Slf4j
public class CmdChannelHandler extends SimpleChannelInboundHandler<ProxyMessage>{
private static volatile Boolean transferLogEnable = Boolean.FALSE;
private IBeanHandler beanHandler;
private final IBeanHandler beanHandler;
public CmdChannelHandler(IBeanHandler beanHandler) {
this.beanHandler = beanHandler;
@@ -31,7 +31,7 @@ public class CmdChannelHandler extends SimpleChannelInboundHandler<ProxyMessage>
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, ProxyMessage proxyMessage) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, ProxyMessage proxyMessage){
if (ProxyMessage.TYPE_HEARTBEAT != proxyMessage.getType() || transferLogEnable) {
log.debug("[CMD Channel]Client CmdChannel recieved proxy message, type is {}", proxyMessage.getType());
}
@@ -58,13 +58,13 @@ public class CmdChannelHandler extends SimpleChannelInboundHandler<ProxyMessage>
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause){
log.error("[CMD Channel]Client CmdChannel 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()) {
@@ -19,9 +19,8 @@ import org.dromara.neutrinoproxy.core.dispatcher.Match;
@Slf4j
@Match(type = Constants.ProxyDataTypeName.AUTH)
public class ProxyMessageAuthHandler implements ProxyMessageHandler {
private ProxyConfig proxyConfig;
private Runnable stop;
private final ProxyConfig proxyConfig;
private final Runnable stop;
public ProxyMessageAuthHandler(ProxyConfig proxyConfig,Runnable stop){
this.proxyConfig=proxyConfig;
@@ -21,9 +21,9 @@ import org.dromara.neutrinoproxy.core.dispatcher.Match;
@Match(type = Constants.ProxyDataTypeName.CONNECT)
public class ProxyMessageConnectHandler implements ProxyMessageHandler {
private Bootstrap tcpProxyTunnelBootstrap;
private Bootstrap realServerBootstrap;
private ProxyConfig proxyConfig;
private final Bootstrap tcpProxyTunnelBootstrap;
private final Bootstrap realServerBootstrap;
private final ProxyConfig proxyConfig;
public ProxyMessageConnectHandler(Bootstrap tcpProxyTunnelBootstrap,Bootstrap realServerBootstrap,ProxyConfig proxyConfig){
this.proxyConfig=proxyConfig;
@@ -39,48 +39,43 @@ public class ProxyMessageConnectHandler implements ProxyMessageHandler {
String ip = serverInfo[0];
int port = Integer.parseInt(serverInfo[1]);
// 连接真实的、被代理的服务
realServerBootstrap.connect(ip, port).addListener(new ChannelFutureListener() {
realServerBootstrap.connect(ip, port).addListener((ChannelFutureListener) future -> {
// 连接后端服务器成功
if (future.isSuccess()) {
final Channel realServerChannel = future.channel();
@Override
public void operationComplete(ChannelFuture future) throws Exception {
realServerChannel.config().setOption(ChannelOption.AUTO_READ, false);
// 连接后端服务器成功
if (future.isSuccess()) {
final Channel realServerChannel = future.channel();
// 获取连接
ProxyUtil.borrowTcpProxyChanel(tcpProxyTunnelBootstrap, new ProxyChannelBorrowListener() {
realServerChannel.config().setOption(ChannelOption.AUTO_READ, false);
@Override
public void success(Channel channel) {
// 连接绑定
channel.attr(Constants.NEXT_CHANNEL).set(realServerChannel);
realServerChannel.attr(Constants.NEXT_CHANNEL).set(channel);
// 获取连接
ProxyUtil.borrowTcpProxyChanel(tcpProxyTunnelBootstrap, new ProxyChannelBorrowListener() {
// 远程绑定
channel.writeAndFlush(ProxyMessage.buildConnectMessage(visitorId + "@" + proxyConfig.getTunnel().getLicenseKey()));
@Override
public void success(Channel channel) {
// 连接绑定
channel.attr(Constants.NEXT_CHANNEL).set(realServerChannel);
realServerChannel.attr(Constants.NEXT_CHANNEL).set(channel);
realServerChannel.config().setOption(ChannelOption.AUTO_READ, true);
ProxyUtil.addRealServerChannel(visitorId, realServerChannel);
ProxyUtil.setRealServerChannelVisitorId(realServerChannel, visitorId);
}
// 远程绑定
channel.writeAndFlush(ProxyMessage.buildConnectMessage(visitorId + "@" + proxyConfig.getTunnel().getLicenseKey()));
@Override
public void error(Throwable cause) {
ProxyMessage proxyMessage1 = new ProxyMessage();
proxyMessage1.setType(ProxyMessage.TYPE_DISCONNECT);
proxyMessage1.setInfo(visitorId);
cmdChannel.writeAndFlush(proxyMessage1);
}
});
realServerChannel.config().setOption(ChannelOption.AUTO_READ, true);
ProxyUtil.addRealServerChannel(visitorId, realServerChannel);
ProxyUtil.setRealServerChannelVisitorId(realServerChannel, visitorId);
}
@Override
public void error(Throwable cause) {
ProxyMessage proxyMessage = new ProxyMessage();
proxyMessage.setType(ProxyMessage.TYPE_DISCONNECT);
proxyMessage.setInfo(visitorId);
cmdChannel.writeAndFlush(proxyMessage);
}
});
} else {
cmdChannel.writeAndFlush(ProxyMessage.buildDisconnectMessage(visitorId));
}
}
});
} else {
cmdChannel.writeAndFlush(ProxyMessage.buildDisconnectMessage(visitorId));
}
});
}
@Override
@@ -10,7 +10,6 @@ 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;
@@ -24,7 +23,7 @@ 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 Object getBean(String beanName,Class<?> c);
public abstract void stop();
public abstract boolean isAotRuntime();
@@ -42,7 +41,6 @@ public abstract class ProxyMessageFactory extends IProxyConfiguration {
public void init(ProxyConfig proxyConfig){
NioEventLoopGroup tunnelWorkGroup = super.tunnelWorkGroup(proxyConfig);
beanInject("tunnelWorkGroup",tunnelWorkGroup);
Object tunnelWorkGroup1 = getBean("tunnelWorkGroup",NioEventLoopGroup.class);
NioEventLoopGroup tcpRealServerWorkGroup = super.tcpRealServerWorkGroup(proxyConfig);
beanInject("tcpRealServerWorkGroup",tcpRealServerWorkGroup);
NioEventLoopGroup udpServerGroup = super.udpServerGroup(proxyConfig);
@@ -59,13 +57,11 @@ public abstract class ProxyMessageFactory extends IProxyConfiguration {
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<ProxyMessageHandler> list = Lists.newArrayList(
new ProxyMessageAuthHandler(proxyConfig,()->stop()),
new ProxyMessageAuthHandler(proxyConfig, this::stop),
new ProxyMessageConnectHandler(tcpProxyTunnelBootstrap,realServerBootstrap,proxyConfig),
new ProxyMessageDisconnectHandler(),
new ProxyMessageErrorHandler(),
@@ -22,8 +22,8 @@ import org.dromara.neutrinoproxy.core.dispatcher.Match;
@Match(type = Constants.ProxyDataTypeName.UDP_CONNECT)
public class UdpProxyMessageConnectHandler implements ProxyMessageHandler {
private ProxyConfig proxyConfig;
private Bootstrap udpProxyTunnelBootstrap;
private final ProxyConfig proxyConfig;
private final Bootstrap udpProxyTunnelBootstrap;
public UdpProxyMessageConnectHandler(ProxyConfig proxyConfig,Bootstrap udpProxyTunnelBootstrap){
this.proxyConfig=proxyConfig;
@@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "neutrino.proxy")
@Component
public class SpringProxyConfig {
private Boolean enable=false;
private Protocol protocol;
private Tunnel tunnel;
private Client client;
@@ -25,9 +25,11 @@ public class ProxyClientService implements ApplicationRunner {
private SpringProxyConfig springProxyConfig;
@Override
public void run(ApplicationArguments args) {
log.info("启动中....");
ProxyConfig proxyConfig = BeanUtil.toBean(springProxyConfig, ProxyConfig.class);
proxyConfiguration.start(proxyConfig);
log.info("启动成功....");
if(springProxyConfig.getEnable()){
log.info("启动中....");
ProxyConfig proxyConfig = BeanUtil.toBean(springProxyConfig, ProxyConfig.class);
proxyConfiguration.start(proxyConfig);
log.info("启动成功....");
}
}
}
@@ -50,3 +50,4 @@ neutrino:
puppet-port-range: 10000-10500
# 是否开启隧道传输报文日志(日志级别为debug时开启才有效)
transfer-log-enable: ${CLIENT_LOG:false}
enable: true