Skip to content

Commit e2fc3d0

Browse files
committed
rest feature
1 parent 3bed07b commit e2fc3d0

3 files changed

Lines changed: 27 additions & 79 deletions

File tree

examples/src/main/java/com/github/elebras1/flecs/examples/RestExplorerExample.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ public class RestExplorerExample {
88

99
public static void main(String[] args) throws InterruptedException {
1010
try (Flecs world = new Flecs()) {
11-
flecs_h.ecs_log_set_level(1);
1211
System.out.println("=== Flecs REST Explorer Example ===");
13-
FlecsServer server = world.restServer((short) 27750);
12+
world.enableRest((short) 27750);
1413
System.out.println("Open https://flecs.dev/explorer?remote=true");
1514

16-
int numberEntities = 1000;
15+
int numberEntities = 100000;
1716
world.component(Position.class);
1817
world.component(Velocity.class);
1918
long tagTeamA = world.entity("TeamA");
@@ -52,12 +51,10 @@ public static void main(String[] args) throws InterruptedException {
5251

5352
float deltaTime = 0.016f;
5453
while (world.progress(deltaTime)) {
55-
world.processHttp(server, deltaTime);
5654

5755
Thread.sleep(16);
5856
}
59-
60-
world.restServerStop(server);
57+
world.disableRest();
6158
}
6259
}
6360
}

src/main/java/com/github/elebras1/flecs/Flecs.java

Lines changed: 24 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
import com.github.elebras1.flecs.collection.EcsLongList;
44
import com.github.elebras1.flecs.util.internal.FlecsLoader;
55

6-
import java.lang.foreign.Arena;
7-
import java.lang.foreign.MemoryLayout;
8-
import java.lang.foreign.MemorySegment;
9-
import java.lang.foreign.ValueLayout;
6+
import java.lang.foreign.*;
107
import java.nio.charset.StandardCharsets;
118
import java.util.Map;
129
import java.util.concurrent.ConcurrentHashMap;
@@ -728,73 +725,42 @@ public void fromJson(String json) {
728725
}
729726
}
730727

731-
public FlecsServer httpServer(short port) {
728+
public void enableRest(short port) {
732729
this.checkClosed();
733730

734-
try (Arena tempArena = Arena.ofConfined()) {
735-
MemorySegment desc = ecs_http_server_desc_t.allocate(tempArena);
736-
ecs_http_server_desc_t.port(desc, port);
737-
MemorySegment server = flecs_h.ecs_http_server_init(desc);
738-
if (server.equals(MemorySegment.NULL)) {
739-
throw new IllegalStateException("Failed to start HTTP server on port " + port);
740-
}
741-
742-
return new FlecsServer(server);
743-
}
744-
}
745-
746-
public void httpServerStop(FlecsServer server) {
747-
this.checkClosed();
748-
if (server != null && !server.getServerSegment().equals(MemorySegment.NULL)) {
749-
flecs_h.ecs_http_server_fini(server.getServerSegment());
750-
}
751-
}
752-
753-
public void processHttp(FlecsServer server, float deltaTime) {
754-
this.checkClosed();
755-
if (server != null && !server.getServerSegment().equals(MemorySegment.NULL)) {
756-
flecs_h.ecs_http_server_dequeue(server.getServerSegment(), deltaTime);
757-
}
758-
}
759-
760-
public FlecsServer restServer(short port) {
761-
this.checkClosed();
762731
flecs_h.FlecsDocImport(this.nativeWorld);
732+
flecs_h.FlecsRestImport(this.nativeWorld);
733+
flecs_h.FlecsAlertsImport(this.nativeWorld);
763734
flecs_h.FlecsStatsImport(this.nativeWorld);
764735
flecs_h.FlecsMetricsImport(this.nativeWorld);
765-
flecs_h.FlecsWorldMonitorImport(this.nativeWorld);
766-
flecs_h.FlecsSystemMonitorImport(this.nativeWorld);
767-
flecs_h.FlecsPipelineMonitorImport(this.nativeWorld);
768-
flecs_h.FlecsAlertsImport(this.nativeWorld);
769-
flecs_h.FlecsRestImport(this.nativeWorld);
770736

771-
flecs_h.ecs_set_entity_range(this.nativeWorld, 0, 0);
737+
try (Arena arena = Arena.ofConfined()) {
738+
MemorySegment restCompName = arena.allocateFrom("flecs.rest.Rest");
739+
long restCompId = flecs_h.ecs_lookup(this.nativeWorld, restCompName);
772740

773-
MemorySegment desc = ecs_http_server_desc_t.allocate(this.arena);
774-
desc.fill((byte) 0);
775-
ecs_http_server_desc_t.port(desc, port);
741+
if (restCompId == 0) {
742+
throw new IllegalStateException("Failed to find flecs.rest.Rest component. Make sure FlecsRest module is imported.");
743+
}
776744

777-
MemorySegment server = flecs_h.ecs_rest_server_init(this.nativeWorld, desc);
778-
if (server == null || server.equals(MemorySegment.NULL)) {
779-
throw new IllegalStateException("Failed to initialize REST server");
780-
}
745+
MemorySegment restData = arena.allocate(2);
746+
restData.set(ValueLayout.JAVA_SHORT, 0, port);
781747

782-
int result = flecs_h.ecs_http_server_start(server);
783-
if (result != 0) {
784-
flecs_h.ecs_http_server_fini(server);
785-
throw new IllegalStateException("Failed to start REST server on port " + port);
748+
flecs_h.ecs_set_id(this.nativeWorld, restCompId, restCompId, 2, restData);
786749
}
787-
788-
System.out.println("REST server started on http://localhost:" + port);
789-
790-
return new FlecsServer(server);
791750
}
792751

793-
public void restServerStop(FlecsServer server) {
752+
public void disableRest() {
794753
this.checkClosed();
795-
if (server != null && !server.getServerSegment().equals(MemorySegment.NULL)) {
796-
flecs_h.ecs_http_server_stop(server.getServerSegment());
797-
flecs_h.ecs_rest_server_fini(server.getServerSegment());
754+
755+
try (Arena arena = Arena.ofConfined()) {
756+
MemorySegment restCompName = arena.allocateFrom("flecs.rest.Rest");
757+
long restCompId = flecs_h.ecs_lookup(this.nativeWorld, restCompName);
758+
759+
if( restCompId == 0) {
760+
throw new IllegalStateException("Failed to find flecs.rest.Rest component. Make sure FlecsRest module is imported.");
761+
}
762+
763+
flecs_h.ecs_remove_id(this.nativeWorld, restCompId, restCompId);
798764
}
799765
}
800766

src/main/java/com/github/elebras1/flecs/FlecsServer.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)