11package de .redstonecloud .bridge .platform .waterdogpe ;
22
3+ import com .google .gson .JsonObject ;
34import de .redstonecloud .api .redis .broker .packet .defaults .template .BestTemplateResultPacket ;
45import de .redstonecloud .api .redis .broker .packet .defaults .template .GetBestTemplatePacket ;
56import 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}
0 commit comments