Skip to content

Commit 301cdf7

Browse files
authored
impl: fallback server (#8)
* impl: fallback server * fix fallback fetch
1 parent 210bab4 commit 301cdf7

2 files changed

Lines changed: 33 additions & 7 deletions

File tree

src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEHandler.java

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.redstonecloud.bridge.platform.waterdogpe;
22

3+
import com.google.gson.JsonObject;
34
import de.redstonecloud.api.redis.broker.packet.defaults.template.BestTemplateResultPacket;
45
import de.redstonecloud.api.redis.broker.packet.defaults.template.GetBestTemplatePacket;
56
import de.redstonecloud.bridge.cloudinterface.CloudInterface;
@@ -29,12 +30,12 @@ public WDPEHandler(
2930

3031
@Override
3132
public ServerInfo resolveForcedHost(@Nullable String domain, @NonNull ProxiedPlayer player) {
32-
return fetchServer();
33+
return fetchServer(player);
3334
}
3435

3536
@Override
3637
public ServerInfo getFallbackServer(ProxiedPlayer player, ServerInfo oldServer, ReconnectReason reason, String kickMessage) {
37-
return fetchServer();
38+
return fetchServer(player);
3839
}
3940

4041
@Override
@@ -43,16 +44,33 @@ public ServerInfo getFallbackServer(
4344
@NonNull ServerInfo oldServer,
4445
@NonNull String kickMessage
4546
) {
46-
return fetchServer();
47+
return fetchServer(player);
4748
}
4849

4950
@Override
5051
public ServerInfo determineServer(ProxiedPlayer player) {
51-
return fetchServer();
52+
return fetchServer(player);
5253
}
5354

54-
public static ServerInfo fetchServer() {
55-
if(!CloudInterface.getBridgeConfig().has("hub_template")) return null;
55+
public static ServerInfo fetchServer(ProxiedPlayer player) {
56+
JsonObject cfg = CloudInterface.getBridgeConfig();
57+
ServerInfo fallback = fetchFallback();
58+
if(!cfg.has("hub_template")) return fallback;
59+
boolean fallbackOnJoin = !cfg.has("fallback_on_join") || cfg.get("fallback_on_join").getAsBoolean();
60+
61+
if(!cfg.has("hub_template"))
62+
return fallback;
63+
64+
ServerInfo hub = fetchHub();
65+
if(hub != null) return hub;
66+
67+
if(player.getDownstreamConnection() != null && fallbackOnJoin)
68+
return fallback;
69+
70+
return null;
71+
}
72+
73+
public static ServerInfo fetchHub() {
5674
CompletableFuture<String> name = new CompletableFuture<>();
5775

5876
new GetBestTemplatePacket(CloudInterface.getBridgeConfig().get("hub_template").getAsString())
@@ -61,9 +79,17 @@ public static ServerInfo fetchServer() {
6179

6280
try {
6381
BridgeServer srv = CloudInterface.getExecutor().determineServer(name.completeOnTimeout("", 3, TimeUnit.SECONDS).get().toUpperCase());
82+
if(srv == null) return null;
83+
6484
return ProxyServer.getInstance().getServerInfo(srv.getName());
6585
} catch (Exception e) {
6686
return null;
6787
}
6888
}
89+
90+
public static ServerInfo fetchFallback() {
91+
JsonObject cfg = CloudInterface.getBridgeConfig();
92+
if(!cfg.has("fallback_name")) return null;
93+
return ProxyServer.getInstance().getServerInfo(cfg.get("fallback_name").getAsString());
94+
}
6995
}

src/main/java/de/redstonecloud/bridge/platform/waterdogpe/commands/HubCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public HubCommand() {
1919
@Override
2020
public boolean onExecute(CommandSender sender, String alias, String[] args) {
2121
if(!(sender instanceof ProxiedPlayer)) return false;
22-
ServerInfo hub = WDPEHandler.fetchServer();
22+
ServerInfo hub = WDPEHandler.fetchServer((ProxiedPlayer) sender);
2323
if(hub == null) {
2424
sender.sendMessage(CloudInterface.getBridgeConfig().has("hubcommand_no_hub_available") ? CloudInterface.getBridgeConfig().get("hubcommand_no_hub_available").getAsString() : "No hub available");
2525
return true;

0 commit comments

Comments
 (0)