Skip to content

Commit 334c966

Browse files
committed
Added lucene, jts, geometry indices, resources loader and many little fixes
1 parent 8190297 commit 334c966

19 files changed

Lines changed: 366 additions & 25 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Features:
3131
* Room verticle basic functionality
3232
* EventBus-based room listener system
3333
* 2D geometry
34+
* Lucene and spatial geo indices (JTS based)
3435
* Basic rooms
3536
* Package classes
3637
* Micrometer + prometheus metrics and monitor web page https://github.com/tfkfan/orbital-monitor
@@ -40,7 +41,6 @@ Features:
4041
Backlog:
4142

4243
* GraalVM native image optimizations
43-
* Grid/Mesh systems and 2D collision models
4444
* TCP/UDP server mode
4545
* Advanced room management, player management, admin page https://github.com/tfkfan/orbital-monitor
4646
* Auth-protected REST API and social accounts oidc providers (google,vk,facebook,X etc...)
@@ -107,7 +107,7 @@ To setup monitor-related instance add required dependency:
107107
<dependency>
108108
<groupId>io.github.tfkfan</groupId>
109109
<artifactId>orbital-monitor</artifactId>
110-
<version>1.1.0</version>
110+
<version>1.2.0</version>
111111
</dependency>
112112
```
113113

@@ -145,7 +145,7 @@ The monitor app allows you to check every metrics:
145145

146146
### Endpoints
147147

148-
Server port is 8080 by default
148+
Server port is 8085 by default
149149

150150
- Monitor web app is available at http://localhost:8085/monitor
151151
- Prometheus metrics are available at http://localhost:8085/prometheus

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
allprojects {
77
description = "A blueprint adapting vert.x to a distributed game server"
88
group = "io.github.tfkfan"
9-
version = "1.1.0"
9+
version = "1.2.0"
1010
}
1111

1212
subprojects {

example/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
dependencies {
22
implementation project(":orbital-monitor")
3+
implementation project(":orbital-resources")
34
compileOnly("org.projectlombok:lombok:${lombokVersion}")
45
annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
56
}

example/src/main/java/io/github/tfkfan/orbital/core/Main.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.github.tfkfan.orbital.core.manager.DefaultGameManager;
55
import io.github.tfkfan.orbital.core.monitor.MonitorEndpoint;
66
import io.github.tfkfan.orbital.core.monitor.MonitorableVertx;
7+
import io.github.tfkfan.resources.GeometryResources;
78
import io.vertx.core.DeploymentOptions;
89
import io.vertx.core.ThreadingModel;
910
import io.vertx.core.Vertx;
@@ -25,7 +26,7 @@ public static void main(String[] args) {
2526
.withWebsocketGateway(it ->
2627
it.withRouterInitializer(router -> router.route().handler(StaticHandler.create("static")))
2728
.withRouterInitializer(MonitorEndpoint::create))
28-
.withGameManagerFactory(config -> DefaultGameManager.factory(config.getRoom()))
29+
.withGameManagerFactory(config -> DefaultGameManager.factory(new GeometryResources().load(), config.second().getRoom()))
2930
.withRoomClusterLauncher(config -> new RoomDeploymentConfig(new DeploymentOptions()
3031
.setThreadingModel(ThreadingModel.VIRTUAL_THREAD)
3132
.setWorkerPoolSize(100)))

example/src/main/java/io/github/tfkfan/orbital/core/manager/DefaultGameManager.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,21 @@
66
import io.github.tfkfan.orbital.core.model.DefaultPlayer;
77
import io.github.tfkfan.orbital.core.room.DefaultGameRoom;
88
import io.github.tfkfan.orbital.core.state.impl.BaseGameState;
9+
import io.github.tfkfan.resources.GeometryResources;
910
import io.vertx.core.Vertx;
1011

11-
import java.util.function.Function;
12-
1312
public class DefaultGameManager extends GameManagerImpl<DefaultGameRoom, BaseGameState> {
14-
public static GameManagerFactory factory(RoomConfig roomConfig) {
15-
return (vId) -> new DefaultGameManager(vId, roomConfig);
13+
public static GameManagerFactory factory(GeometryResources geometryResources, RoomConfig roomConfig) {
14+
return (vId) -> new DefaultGameManager(vId, geometryResources, roomConfig);
1615
}
1716

18-
public DefaultGameManager(String verticleId, RoomConfig roomConfig) {
17+
private final GeometryResources geometryResources;
18+
19+
public DefaultGameManager(String verticleId, GeometryResources geometryResources, RoomConfig roomConfig) {
1920
super(verticleId, Vertx.currentContext().owner(), roomConfig,
2021
DefaultPlayer::new,
2122
BaseGameState::new,
2223
DefaultGameRoom::new);
24+
this.geometryResources = geometryResources;
2325
}
2426
}

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ lombokVersion=1.18.30
44
vertxVersion=4.5.10
55
jacksonVersion=2.12.2
66
slf4jVersion=1.7.21
7+
luceneVersion=10.2.1

orbital-core/src/main/java/io/github/tfkfan/orbital/core/Orbital.java

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.github.tfkfan.orbital.core.configuration.props.RoomConfig;
55
import io.github.tfkfan.orbital.core.configuration.props.ServerConfig;
66
import io.github.tfkfan.orbital.core.factory.GameManagerFactory;
7+
import io.github.tfkfan.orbital.core.shared.Pair;
78
import io.github.tfkfan.orbital.core.verticle.GameVerticle;
89
import io.github.tfkfan.orbital.core.verticle.impl.GatewayVerticle;
910
import io.github.tfkfan.orbital.core.verticle.impl.RoomVerticle;
@@ -12,9 +13,11 @@
1213
import io.vertx.core.DeploymentOptions;
1314
import io.vertx.core.Future;
1415
import io.vertx.core.Vertx;
16+
import io.vertx.core.json.JsonObject;
1517
import lombok.extern.slf4j.Slf4j;
1618

1719
import java.util.Objects;
20+
import java.util.function.BiFunction;
1821
import java.util.function.Consumer;
1922
import java.util.function.Function;
2023
import 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));
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.github.tfkfan.orbital.core;
2+
3+
public interface ResourcesLoader<T> {
4+
T load();
5+
}

orbital-core/src/main/java/io/github/tfkfan/orbital/core/state/GameState.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Collection;
66

77
public interface GameState {
8+
89
Player getPlayerById(long id);
910

1011
Collection<Player> getPlayers();

orbital-core/src/main/java/io/github/tfkfan/orbital/core/verticle/GameVerticle.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ static Future<JsonObject> loadConfig(Vertx vertx, String path) {
2727
return ConfigRetriever.create(vertx, options).getConfig();
2828
}
2929

30+
static Future<JsonObject> loadConfig(Vertx vertx) {
31+
ConfigRetrieverOptions options = new ConfigRetrieverOptions()
32+
.addStore(new ConfigStoreOptions()
33+
.setType("env"));
34+
return ConfigRetriever.create(vertx, options).getConfig();
35+
}
36+
3037
static String nextVerticleId() {
3138
return UUID.randomUUID().toString();
3239
}

0 commit comments

Comments
 (0)