From b81edecd4160b707633c3995d98055e9f2a1afe5 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Fri, 6 Feb 2026 18:06:56 +0100 Subject: [PATCH] parce qu'il faut backup a un moment --- src/main/java/com/epita/creeps/AsyncExec.java | 27 +++++++++++++++++++ src/main/java/com/epita/creeps/Citizen.java | 26 ++++++++++++++++++ src/main/java/com/epita/creeps/Program.java | 6 ++--- .../epita/creeps/{ => commands}/Basics.java | 13 ++++++--- 4 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/epita/creeps/AsyncExec.java create mode 100644 src/main/java/com/epita/creeps/Citizen.java rename src/main/java/com/epita/creeps/{ => commands}/Basics.java (65%) diff --git a/src/main/java/com/epita/creeps/AsyncExec.java b/src/main/java/com/epita/creeps/AsyncExec.java new file mode 100644 index 0000000..99b7a33 --- /dev/null +++ b/src/main/java/com/epita/creeps/AsyncExec.java @@ -0,0 +1,27 @@ +package com.epita.creeps; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; + +// Handles server operations to respect commands delays +@AllArgsConstructor +public class AsyncExec { + + @Getter + @Setter + private static long ticksPerSecond = 1; + + public static CompletableFuture asyncExec(Supplier supplier, long time) { + return CompletableFuture.supplyAsync(supplier, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)); + } + + public static void justWait(long time) { + CompletableFuture.supplyAsync(() -> 0, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)).join(); + } +} diff --git a/src/main/java/com/epita/creeps/Citizen.java b/src/main/java/com/epita/creeps/Citizen.java new file mode 100644 index 0000000..ee7ac52 --- /dev/null +++ b/src/main/java/com/epita/creeps/Citizen.java @@ -0,0 +1,26 @@ +package com.epita.creeps; + +import com.epita.creeps.given.vo.geometry.Direction; +import kong.unirest.core.Unirest; +import lombok.AllArgsConstructor; + +public class Citizen { + private String id; + private String command_uri; + + public Citizen(String login, String citizen_id ) { + id = citizen_id; + command_uri = "/command/" + login + "/" + citizen_id + "/"; + } + + public void move(Direction direction) { + AsyncExec.asyncExec(() -> { + Unirest.post(command_uri + "move:"+direction.direction); + return null; + }, 2); + } + + public void noop() { +// AsyncExec.asyncExec() + } +} diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 5c55103..77bf8f4 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -1,5 +1,6 @@ package com.epita.creeps; +import com.epita.creeps.commands.Basics; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -7,7 +8,7 @@ import kong.unirest.core.UnirestException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.ConnectException; +import java.util.concurrent.TimeUnit; public class Program { @@ -44,8 +45,7 @@ public class Program { logger.error("Cannot connect to the server. Aborting..."); throw e; } -// JsonNode jsonNode = response.getBody(); -// System.out.println(jsonNode); + AsyncExec.justWait(3); logger.info("Creating account"); basics.connectAccount(login); diff --git a/src/main/java/com/epita/creeps/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java similarity index 65% rename from src/main/java/com/epita/creeps/Basics.java rename to src/main/java/com/epita/creeps/commands/Basics.java index bd6c91a..9d75eef 100644 --- a/src/main/java/com/epita/creeps/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -1,5 +1,6 @@ -package com.epita.creeps; +package com.epita.creeps.commands; +import com.epita.creeps.AsyncExec; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -9,6 +10,8 @@ import lombok.Getter; import org.slf4j.Logger; +import java.util.concurrent.CompletableFuture; + @AllArgsConstructor @Getter public class Basics { @@ -16,13 +19,15 @@ public class Basics { private Logger logger; private String srvUrl; - public void connectAccount(String login) { - HttpResponse response; + public JsonNode connectAccount(String login) { try { - response = Unirest.post(srvUrl + "/init/" + login).asJson(); + CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.post(srvUrl + "/init/" + login).asJson(), 10); + HttpResponse response = (HttpResponse) resp.join(); logger.debug(response.getBody().toPrettyString()); + return response.getBody(); } catch (UnirestException e) { logger.error("Cannot create account."); + throw e; } }