Skip to content

Commit 3bed07b

Browse files
committed
attempt rest
1 parent 6bc9890 commit 3bed07b

2 files changed

Lines changed: 42 additions & 12 deletions

File tree

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@ 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(0);
11+
flecs_h.ecs_log_set_level(1);
1212
System.out.println("=== Flecs REST Explorer Example ===");
1313
FlecsServer server = world.restServer((short) 27750);
14-
1514
System.out.println("Open https://flecs.dev/explorer?remote=true");
1615

1716
int numberEntities = 1000;
@@ -51,9 +50,14 @@ public static void main(String[] args) throws InterruptedException {
5150

5251
System.out.println("Loop running...");
5352

54-
while (world.progress(0.016f)) {
53+
float deltaTime = 0.016f;
54+
while (world.progress(deltaTime)) {
55+
world.processHttp(server, deltaTime);
56+
5557
Thread.sleep(16);
5658
}
59+
60+
world.restServerStop(server);
5761
}
5862
}
5963
}

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

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -750,24 +750,50 @@ public void httpServerStop(FlecsServer server) {
750750
}
751751
}
752752

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+
753760
public FlecsServer restServer(short port) {
754761
this.checkClosed();
755-
try (Arena tempArena = Arena.ofConfined()) {
756-
flecs_h.FlecsRestImport(this.nativeWorld);
757-
MemorySegment desc = ecs_http_server_desc_t.allocate(tempArena);
758-
ecs_http_server_desc_t.port(desc, port);
759-
MemorySegment server = flecs_h.ecs_rest_server_init(this.nativeWorld, desc);
760-
if (server.equals(MemorySegment.NULL)) {
761-
throw new IllegalStateException("Failed to start REST server on port " + port);
762-
}
762+
flecs_h.FlecsDocImport(this.nativeWorld);
763+
flecs_h.FlecsStatsImport(this.nativeWorld);
764+
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);
763770

764-
return new FlecsServer(server);
771+
flecs_h.ecs_set_entity_range(this.nativeWorld, 0, 0);
772+
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);
776+
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");
765780
}
781+
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);
786+
}
787+
788+
System.out.println("REST server started on http://localhost:" + port);
789+
790+
return new FlecsServer(server);
766791
}
767792

768793
public void restServerStop(FlecsServer server) {
769794
this.checkClosed();
770795
if (server != null && !server.getServerSegment().equals(MemorySegment.NULL)) {
796+
flecs_h.ecs_http_server_stop(server.getServerSegment());
771797
flecs_h.ecs_rest_server_fini(server.getServerSegment());
772798
}
773799
}

0 commit comments

Comments
 (0)