Waterfall/BungeeCord-Patches/0035-Add-timeout-variant-to-connect-methods.patch

89 lines
4.4 KiB
Diff
Raw Normal View History

From 4f55bde65e4220f8e1d5456b4bb4ea2c74d24e05 Mon Sep 17 00:00:00 2001
2016-07-03 10:07:00 +02:00
From: Ichbinjoe <joe@ibj.io>
Date: Sat, 16 Jul 2016 20:44:01 -0400
2016-07-03 22:53:51 +02:00
Subject: [PATCH] Add timeout variant to connect methods
2016-07-03 10:07:00 +02:00
2016-07-03 22:53:51 +02:00
Also added more connect methods to ProxiedPlayer, in addition to the new method
2016-07-03 10:07:00 +02:00
diff --git a/api/src/main/java/net/md_5/bungee/api/connection/ProxiedPlayer.java b/api/src/main/java/net/md_5/bungee/api/connection/ProxiedPlayer.java
index 375815c..c49e900 100644
--- a/api/src/main/java/net/md_5/bungee/api/connection/ProxiedPlayer.java
+++ b/api/src/main/java/net/md_5/bungee/api/connection/ProxiedPlayer.java
@@ -69,6 +69,38 @@ public interface ProxiedPlayer extends Connection, CommandSender
*/
void connect(ServerInfo target, Callback<Boolean> callback);
+ // Waterfall start
+ /**
+ * Connects / transfers this user to the specified connection, gracefully
+ * closing the current one. Depending on the implementation, this method
+ * might return before the user has been connected.
+ *
+ * @param target the new server to connect to
+ * @param callback the method called when the connection is complete, or
+ * when an exception is encountered. The boolean parameter denotes success
+ * or failure.
+ * @param retry whether to retry the connection if the initial connection
+ * fails.
+ */
+ void connect(ServerInfo target, Callback<Boolean> callback, boolean retry);
+
+ /**
+ * Connects / transfers this user to the specified connection, gracefully
+ * closing the current one. Depending on the implementation, this method
+ * might return before the user has been connected.
+ *
+ * @param target the new server to connect to
+ * @param callback the method called when the connection is complete, or
+ * when an exception is encountered. The boolean parameter denotes success
+ * or failure.
+ * @param retry whether to retry the connection if the initial connection
+ * fails.
+ * @param timeout timeout in milliseconds of the connection created to the
+ * target server
+ */
+ void connect(ServerInfo target, Callback<Boolean> callback, boolean retry, int timeout);
+ // Waterfall end
+
/**
* Gets the server this player is connected to.
*
diff --git a/proxy/src/main/java/net/md_5/bungee/UserConnection.java b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
2016-10-30 15:46:05 +01:00
index 6d197ef..7e934ef 100644
2016-07-03 10:07:00 +02:00
--- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java
+++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
2016-10-30 15:46:05 +01:00
@@ -248,6 +248,12 @@ public final class UserConnection implements ProxiedPlayer
2016-07-03 10:07:00 +02:00
public void connect(ServerInfo info, final Callback<Boolean> callback, final boolean retry)
{
+ // Waterfall start
+ connect(info, callback, retry, 5000); // todo: configurable
+ }
+ public void connect(ServerInfo info, final Callback<Boolean> callback, final boolean retry, final int timeout)
+ {
+ // Waterfall end
Preconditions.checkNotNull( info, "info" );
ServerConnectEvent event = new ServerConnectEvent( this, info );
2016-10-30 15:46:05 +01:00
@@ -316,7 +322,7 @@ public final class UserConnection implements ProxiedPlayer
2016-07-03 10:07:00 +02:00
if ( retry && def != null && ( getServer() == null || def != getServer().getInfo() ) )
{
sendMessage( bungee.getTranslation( "fallback_lobby" ) );
- connect( def, null, false );
+ connect( def, null, false, timeout ); // Waterfall
} else if ( dimensionChange )
2016-07-03 10:07:00 +02:00
{
disconnect( bungee.getTranslation( "fallback_kick", future.cause().getClass().getName() ) );
2016-10-30 15:46:05 +01:00
@@ -331,7 +337,7 @@ public final class UserConnection implements ProxiedPlayer
2016-07-03 10:07:00 +02:00
.channel( PipelineUtils.getChannel() )
.group( ch.getHandle().eventLoop() )
.handler( initializer )
- .option( ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000 ) // TODO: Configurable
+ .option( ChannelOption.CONNECT_TIMEOUT_MILLIS, timeout ) // Waterfall
.remoteAddress( target.getAddress() );
// Windows is bugged, multi homed users will just have to live with random connecting IPs
if ( getPendingConnection().getListener().isSetLocalAddress() && !PlatformDependent.isWindows() )
--
2.10.0
2016-07-03 10:07:00 +02:00