44import io .github .tfkfan .orbital .core .configuration .props .RoomConfig ;
55import io .github .tfkfan .orbital .core .configuration .props .ServerConfig ;
66import io .github .tfkfan .orbital .core .factory .GameManagerFactory ;
7+ import io .github .tfkfan .orbital .core .shared .Pair ;
78import io .github .tfkfan .orbital .core .verticle .GameVerticle ;
89import io .github .tfkfan .orbital .core .verticle .impl .GatewayVerticle ;
910import io .github .tfkfan .orbital .core .verticle .impl .RoomVerticle ;
1213import io .vertx .core .DeploymentOptions ;
1314import io .vertx .core .Future ;
1415import io .vertx .core .Vertx ;
16+ import io .vertx .core .json .JsonObject ;
1517import lombok .extern .slf4j .Slf4j ;
1618
1719import java .util .Objects ;
20+ import java .util .function .BiFunction ;
1821import java .util .function .Consumer ;
1922import java .util .function .Function ;
2023import java .util .function .Supplier ;
@@ -30,9 +33,9 @@ public final class Orbital {
3033
3134 private final Vertx vertx ;
3235
33- private Supplier <Future <OrbitalConfig >> configSupplier ;
36+ private Supplier <Future <Pair < JsonObject , OrbitalConfig > >> configSupplier ;
3437 private Function <OrbitalConfig , Future <GatewayVerticle >> gateway ;
35- private Function <OrbitalConfig , Future <GameManagerFactory >> gameManagerFactory ;
38+ private Function <Pair < JsonObject , OrbitalConfig > , Future <GameManagerFactory >> gameManagerFactory ;
3639 private Function <OrbitalConfig , Future <RoomDeploymentConfig >> roomClusterConfig ;
3740
3841 public Orbital (Vertx vertx ) {
@@ -44,12 +47,12 @@ public Orbital withConfig(int roomVerticleInstances, RoomConfig roomConfig) {
4447 }
4548
4649 public Orbital withConfig (OrbitalConfig orbitalConfig ) {
47- configSupplier = () -> Future .succeededFuture (orbitalConfig );
50+ configSupplier = () -> loadConfig ( vertx ). flatMap ( it -> Future .succeededFuture (new Pair <>( it , orbitalConfig )) );
4851 return this ;
4952 }
5053
5154 public Orbital withConfig (String fullPath ) {
52- configSupplier = () -> loadConfig (vertx , fullPath ).map (cnf -> cnf .mapTo (OrbitalConfig .class ));
55+ configSupplier = () -> loadConfig (vertx , fullPath ).map (cnf -> new Pair <>( cnf , cnf .mapTo (OrbitalConfig .class ) ));
5356 return this ;
5457 }
5558
@@ -70,8 +73,8 @@ public Orbital withWebsocketGateway(Consumer<WebsocketGatewayVerticle> customize
7073 });
7174 }
7275
73- public Orbital withGameManagerFactory (Function <OrbitalConfig , GameManagerFactory > function ) {
74- gameManagerFactory = (configFuture ) -> Future .succeededFuture (function .apply (configFuture ));
76+ public Orbital withGameManagerFactory (Function <Pair < JsonObject , OrbitalConfig > , GameManagerFactory > function ) {
77+ gameManagerFactory = (config ) -> Future .succeededFuture (function .apply (config ));
7578 return this ;
7679 }
7780
@@ -83,15 +86,18 @@ public Orbital withRoomClusterLauncher(Function<OrbitalConfig, RoomDeploymentCon
8386 public void run () {
8487 Objects .requireNonNull (configSupplier , "Config supplier is required" )
8588 .get ()
86- .flatMap (config -> Objects .requireNonNull (gateway , "Gateway is required" ).apply (config )
89+ .flatMap (config -> Objects .requireNonNull (gateway , "Gateway is required" ).apply (config . second () )
8790 .flatMap (gatewayVerticle -> GameVerticle .run (vertx , gatewayVerticle , gatewayVerticle .options ()))
88- .flatMap (deployment -> Objects .requireNonNull (gameManagerFactory , "Game manager factory is required" ).apply (config ))
89- .flatMap (gameManagerFactory -> Objects .requireNonNull (roomClusterConfig , "Room cluster config is required" ).apply (config )
90- .flatMap (roomDeploymentConfig -> runRooms (vertx ,
91- roomDeploymentConfig .getDeploymentOptions (),
92- config .getServer ().getRoomVerticleInstances (),
93- gameManagerFactory
94- )))
91+ .flatMap (deployment ->
92+ Objects .requireNonNull (gameManagerFactory , "Game manager factory is required" ).apply (config )
93+ .flatMap (
94+ gameManagerFactory -> Objects .requireNonNull (roomClusterConfig , "Room cluster config is required" ).apply (config .second ())
95+ .flatMap (roomDeploymentConfig -> runRooms (vertx ,
96+ roomDeploymentConfig .getDeploymentOptions (),
97+ config .second ().getServer ().getRoomVerticleInstances (),
98+ gameManagerFactory
99+ ))
100+ ))
95101 .flatMap (gameManagerFactory -> Future .succeededFuture (config ))
96102 )
97103 .onFailure (throwable -> startupErrorHandler (vertx , throwable ));
0 commit comments