#2447: Add API for fluent server connect requests

API allows for more control over callback to see why the callback was performed whilst maintaining backwards compatibility
This commit is contained in:
Mystiflow
2018-07-11 09:22:41 +01:00
committed by md_5
parent 671c4d1341
commit 7ce9ae50e7
3 changed files with 128 additions and 7 deletions

View File

@@ -0,0 +1,101 @@
package net.md_5.bungee.api;
import lombok.Builder;
import lombok.Getter;
import lombok.NonNull;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.event.ServerConnectEvent;
/**
* A request to connect a server.
*/
@Getter
@Builder
public class ServerConnectRequest
{
/**
* The result from this callback after request has been executed by proxy.
*/
public enum Result
{
/**
* ServerConnectEvent to the new server was canceled.
*/
EVENT_CANCEL,
/**
* Already connected to target server.
*/
ALREADY_CONNECTED,
/**
* Already connecting to target server.
*/
ALREADY_CONNECTING,
/**
* Successfully connected to server.
*/
SUCCESS,
/**
* Connection failed, error can be accessed from callback method handle.
*/
FAIL
}
/**
* Target server to connect to.
*/
@NonNull
private final ServerInfo target;
/**
* Reason for connecting to server.
*/
@NonNull
private final ServerConnectEvent.Reason reason;
/**
* Callback to execute post request.
*/
private final Callback<Result> result;
/**
* Timeout in milliseconds for request.
*/
private final int connectTimeout;
/**
* Should the player be attempted to connect to the next server in their
* queue if the initial request fails.
*/
private final boolean retry;
/**
* Class that sets default properties/adds methods to the lombok builder
* generated class.
*/
public static class ServerConnectRequestBuilder
{
private Callback<Result> result;
private int connectTimeout = 5000; // TODO: Configurable
/**
* Sets the callback to execute on explicit succession of the request.
*
* @param callback the callback to execute
* @return this builder for chaining
* @deprecated recommended to use callback providing generic type of
* {@link Result}
*/
@Deprecated
public ServerConnectRequestBuilder callback(final Callback<Boolean> callback)
{
this.result = new Callback<Result>()
{
@Override
public void done(final Result result, final Throwable error)
{
callback.done( ( result == Result.SUCCESS ) ? Boolean.TRUE : Boolean.FALSE, error );
}
};
return this;
}
}
}

View File

@@ -6,6 +6,7 @@ import java.util.UUID;
import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ServerConnectRequest;
import net.md_5.bungee.api.SkinConfiguration;
import net.md_5.bungee.api.Title;
import net.md_5.bungee.api.chat.BaseComponent;
@@ -123,6 +124,15 @@ public interface ProxiedPlayer extends Connection, CommandSender
*/
void connect(ServerInfo target, Callback<Boolean> callback, ServerConnectEvent.Reason reason);
/**
* 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 request request to connect with
*/
void connect(ServerConnectRequest request);
/**
* Gets the server this player is connected to.
*