mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-08-26 22:59:57 +02:00
114 lines
5.7 KiB
Diff
114 lines
5.7 KiB
Diff
From e14ce3444e616e79875282865164065680a5e13c Mon Sep 17 00:00:00 2001
|
|
From: Ichbinjoe <joe@ibj.io>
|
|
Date: Sat, 16 Jul 2016 20:44:01 -0400
|
|
Subject: [PATCH] Add timeout variant to connect methods
|
|
|
|
Also added more connect methods to ProxiedPlayer, in addition to the new method
|
|
|
|
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 e3e999b0..de09cd54 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
|
|
@@ -111,6 +111,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
|
|
+
|
|
/**
|
|
* Connects / transfers this user to the specified connection, gracefully
|
|
* closing the current one. Depending on the implementation, this method
|
|
@@ -124,6 +156,25 @@ public interface ProxiedPlayer extends Connection, CommandSender
|
|
*/
|
|
void connect(ServerInfo target, Callback<Boolean> callback, ServerConnectEvent.Reason reason);
|
|
|
|
+ // 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.
|
|
+ * @param reason the reason for connecting to the new server
|
|
+ * @param timeout timeout in milliseconds of the connection created to the
|
|
+ * target server
|
|
+ */
|
|
+ void connect(ServerInfo target, Callback<Boolean> callback, boolean retry, ServerConnectEvent.Reason reason, int timeout);
|
|
+ // Waterfall end
|
|
+
|
|
/**
|
|
* Connects / transfers this user to the specified connection, gracefully
|
|
* closing the current one. Depending on the implementation, this method
|
|
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 6146cb44..d1d3142e 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
@@ -257,9 +257,20 @@ public final class UserConnection implements ProxiedPlayer
|
|
|
|
public void connect(ServerInfo info, final Callback<Boolean> callback, final boolean retry, ServerConnectEvent.Reason reason)
|
|
{
|
|
+ // Waterfall start
|
|
+ connect(info, callback, retry, reason, 5000); // todo: configurable
|
|
+ }
|
|
+ public void connect(ServerInfo info, final Callback<Boolean> callback, final boolean retry, int timeout) {
|
|
+ connect(info, callback, retry, ServerConnectEvent.Reason.PLUGIN, timeout);
|
|
+ }
|
|
+
|
|
+ public void connect(ServerInfo info, final Callback<Boolean> callback, final boolean retry, ServerConnectEvent.Reason reason, final int timeout)
|
|
+ {
|
|
+ // Waterfall end
|
|
Preconditions.checkNotNull( info, "info" );
|
|
|
|
ServerConnectRequest.Builder builder = ServerConnectRequest.builder().retry( retry ).reason( reason ).target( info );
|
|
+ builder.connectTimeout(timeout); // Waterfall
|
|
if ( callback != null )
|
|
{
|
|
// Convert the Callback<Boolean> to be compatible with Callback<Result> from ServerConnectRequest.
|
|
@@ -353,7 +364,7 @@ public final class UserConnection implements ProxiedPlayer
|
|
if ( request.isRetry() && def != null && ( getServer() == null || def != getServer().getInfo() ) )
|
|
{
|
|
sendMessage( bungee.getTranslation( "fallback_lobby" ) );
|
|
- connect( def, null, true, ServerConnectEvent.Reason.LOBBY_FALLBACK );
|
|
+ connect( def, null, true, ServerConnectEvent.Reason.LOBBY_FALLBACK, request.getConnectTimeout() ); // Waterfall
|
|
} else if ( dimensionChange )
|
|
{
|
|
disconnect( bungee.getTranslation( "fallback_kick", future.cause().getClass().getName() ) );
|
|
--
|
|
2.18.0
|
|
|