mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-12-02 23:23:42 +01:00
Replace reflection inside netty with ChannelFactory (#797)
This commit is contained in:
parent
0dc74bb242
commit
2faf975aab
@ -0,0 +1,146 @@
|
||||
From cb6c54205c75372d06592002a39699cbff7064fb Mon Sep 17 00:00:00 2001
|
||||
From: Janmm14 <gitconfig1@janmm14.de>
|
||||
Date: Mon, 21 Jun 2021 23:43:39 +0200
|
||||
Subject: [PATCH] Replace reflection inside netty with ChannelFactory.
|
||||
|
||||
Thanks for pointing it out @MrIvanPlays
|
||||
|
||||
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
||||
index e0fcd8fb..4207fc48 100644
|
||||
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
||||
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
||||
@@ -358,7 +358,7 @@ public class BungeeCord extends ProxyServer
|
||||
}
|
||||
};
|
||||
new ServerBootstrap()
|
||||
- .channel( PipelineUtils.getServerChannel( info.getSocketAddress() ) )
|
||||
+ .channelFactory( PipelineUtils.getServerChannelFactory( info.getSocketAddress() ) ) // Waterfall - netty reflection -> factory
|
||||
.option( ChannelOption.SO_REUSEADDR, true ) // TODO: Move this elsewhere!
|
||||
.childAttr( PipelineUtils.LISTENER, info )
|
||||
.childHandler( PipelineUtils.SERVER_CHILD )
|
||||
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java b/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java
|
||||
index 1ea654f1..c2663b66 100644
|
||||
--- a/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java
|
||||
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java
|
||||
@@ -183,7 +183,7 @@ public class BungeeServerInfo implements ServerInfo
|
||||
}
|
||||
};
|
||||
new Bootstrap()
|
||||
- .channel( PipelineUtils.getChannel( socketAddress ) )
|
||||
+ .channelFactory( PipelineUtils.getChannelFactory( socketAddress ) ) // Waterfall - netty reflection -> factory
|
||||
.group( BungeeCord.getInstance().workerEventLoopGroup )
|
||||
.handler( PipelineUtils.BASE )
|
||||
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, BungeeCord.getInstance().getConfig().getRemotePingTimeout() )
|
||||
diff --git a/proxy/src/main/java/net/md_5/bungee/UserConnection.java b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
||||
index b44d13e5..955a7b3f 100644
|
||||
--- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
||||
+++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
||||
@@ -384,7 +384,7 @@ public final class UserConnection implements ProxiedPlayer
|
||||
}
|
||||
};
|
||||
Bootstrap b = new Bootstrap()
|
||||
- .channel( PipelineUtils.getChannel( target.getAddress() ) )
|
||||
+ .channelFactory( PipelineUtils.getChannelFactory( target.getAddress() ) ) // Waterfall - netty reflection -> factory
|
||||
.group( ch.getHandle().eventLoop() )
|
||||
.handler( initializer )
|
||||
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, request.getConnectTimeout() )
|
||||
diff --git a/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java b/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java
|
||||
index 37337429..c3683c30 100644
|
||||
--- a/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java
|
||||
+++ b/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java
|
||||
@@ -111,7 +111,8 @@ public class HttpClient
|
||||
|
||||
private static void getWithNettyResolver(EventLoop eventLoop, URI uri, int port, ChannelFutureListener future, Callback<String> callback, boolean ssl) {
|
||||
java.net.InetSocketAddress address = java.net.InetSocketAddress.createUnresolved(uri.getHost(), port);
|
||||
- new Bootstrap().channel( PipelineUtils.getChannel( null ) ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ).
|
||||
+ // Waterfall - netty reflection -> factory
|
||||
+ new Bootstrap().channelFactory( PipelineUtils.getChannelFactory( null ) ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ).
|
||||
option( ChannelOption.CONNECT_TIMEOUT_MILLIS, TIMEOUT ).resolver(dnsResolverGroup).remoteAddress( address ).connect().addListener( future );
|
||||
}
|
||||
|
||||
@@ -130,7 +131,8 @@ public class HttpClient
|
||||
}
|
||||
addressCache.put( uri.getHost(), inetHost );
|
||||
}
|
||||
- new Bootstrap().channel( PipelineUtils.getChannel( null ) ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ).
|
||||
+ // Waterfall - netty reflection -> factory
|
||||
+ new Bootstrap().channelFactory( PipelineUtils.getChannelFactory( null ) ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ).
|
||||
option( ChannelOption.CONNECT_TIMEOUT_MILLIS, TIMEOUT ).remoteAddress( inetHost, port ).connect().addListener( future );
|
||||
}
|
||||
// Waterfall End
|
||||
diff --git a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
||||
index 2a21243b..1cd64a12 100644
|
||||
--- a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
||||
+++ b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
||||
@@ -5,6 +5,7 @@ import io.github.waterfallmc.waterfall.event.ConnectionInitEvent;
|
||||
import io.netty.buffer.PooledByteBufAllocator;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelException;
|
||||
+import io.netty.channel.ChannelFactory;
|
||||
import io.netty.channel.ChannelInitializer;
|
||||
import io.netty.channel.ChannelOption;
|
||||
import io.netty.channel.EventLoopGroup;
|
||||
@@ -114,6 +115,12 @@ public class PipelineUtils
|
||||
public static final String LEGACY_KICKER = "legacy-kick";
|
||||
|
||||
private static boolean epoll;
|
||||
+ // Waterfall start: netty reflection -> factory
|
||||
+ private static final ChannelFactory<? extends ServerChannel> serverChannelFactory;
|
||||
+ private static final ChannelFactory<? extends ServerChannel> serverChannelDomainFactory;
|
||||
+ private static final ChannelFactory<? extends Channel> channelFactory;
|
||||
+ private static final ChannelFactory<? extends Channel> channelDomainFactory;
|
||||
+ // Waterfall end
|
||||
|
||||
static
|
||||
{
|
||||
@@ -129,6 +136,12 @@ public class PipelineUtils
|
||||
ProxyServer.getInstance().getLogger().log( Level.WARNING, "Epoll is not working, falling back to NIO: {0}", Util.exception( Epoll.unavailabilityCause() ) );
|
||||
}
|
||||
}
|
||||
+ // Waterfall start: netty reflection -> factory
|
||||
+ serverChannelFactory = epoll ? EpollServerSocketChannel::new : NioServerSocketChannel::new;
|
||||
+ serverChannelDomainFactory = epoll ? EpollServerDomainSocketChannel::new : null;
|
||||
+ channelFactory = epoll ? EpollSocketChannel::new : NioSocketChannel::new;
|
||||
+ channelDomainFactory = epoll ? EpollDomainSocketChannel::new : null;
|
||||
+ // Waterfall end
|
||||
}
|
||||
|
||||
public static EventLoopGroup newEventLoopGroup(int threads, ThreadFactory factory)
|
||||
@@ -160,6 +173,34 @@ public class PipelineUtils
|
||||
return epoll ? EpollSocketChannel.class : NioSocketChannel.class;
|
||||
}
|
||||
|
||||
+ // Waterfall start: netty reflection -> factory
|
||||
+ public static ChannelFactory<? extends ServerChannel> getServerChannelFactory(SocketAddress address)
|
||||
+ {
|
||||
+ if ( address instanceof DomainSocketAddress )
|
||||
+ {
|
||||
+ ChannelFactory<? extends ServerChannel> factory = PipelineUtils.serverChannelDomainFactory;
|
||||
+ Preconditions.checkState( factory != null, "Epoll required to have UNIX sockets" );
|
||||
+
|
||||
+ return factory;
|
||||
+ }
|
||||
+
|
||||
+ return serverChannelFactory;
|
||||
+ }
|
||||
+
|
||||
+ public static ChannelFactory<? extends Channel> getChannelFactory(SocketAddress address)
|
||||
+ {
|
||||
+ if ( address instanceof DomainSocketAddress )
|
||||
+ {
|
||||
+ ChannelFactory<? extends Channel> factory = PipelineUtils.channelDomainFactory;
|
||||
+ Preconditions.checkState( factory != null, "Epoll required to have UNIX sockets" );
|
||||
+
|
||||
+ return factory;
|
||||
+ }
|
||||
+
|
||||
+ return channelFactory;
|
||||
+ }
|
||||
+ // Waterfall end
|
||||
+
|
||||
public static Class<? extends DatagramChannel> getDatagramChannel()
|
||||
{
|
||||
return epoll ? EpollDatagramChannel.class : NioDatagramChannel.class;
|
||||
--
|
||||
2.40.0.windows.1
|
||||
|
Loading…
Reference in New Issue
Block a user