diff --git a/.factorypath b/.factorypath
deleted file mode 100644
index 41be359..0000000
--- a/.factorypath
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index e9441bb..0000000
--- a/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-eclipse.preferences.version=1
-encoding//src/main/java=UTF-8
-encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs
deleted file mode 100644
index dfa4f3a..0000000
--- a/.settings/org.eclipse.jdt.apt.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.apt.aptEnabled=true
-org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations
-org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 8f693c0..0000000
--- a/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
-org.eclipse.jdt.core.compiler.compliance=21
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
-org.eclipse.jdt.core.compiler.processAnnotations=enabled
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=21
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f..0000000
--- a/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/src/main/java/com/epita/creeps/AsyncExec.java b/src/main/java/com/epita/creeps/AsyncExec.java
index 46b04f3..7d63bc8 100644
--- a/src/main/java/com/epita/creeps/AsyncExec.java
+++ b/src/main/java/com/epita/creeps/AsyncExec.java
@@ -1,44 +1,31 @@
package com.epita.creeps;
-
-import kong.unirest.core.HttpResponse;
-import kong.unirest.core.JsonNode;
+import com.epita.creeps.given.vo.report.Report;
+import com.epita.creeps.given.vo.response.CommandResponse;
+import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
+import java.net.http.HttpResponse;
+import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
import java.util.function.Supplier;
// Handles server operations to respect commands delays
-@NoArgsConstructor
-public class AsyncExec {
+@AllArgsConstructor
+public class AsyncExec {
-
- private static float ticksPerSecond = 1;
-// private CompletableFuture task;
-
-
- public static void setTicksPerSecond(float ticksPerSecond) {
- AsyncExec.ticksPerSecond = ticksPerSecond;
- }
-
- public static long ticksToTime(long ticks) {
- return Math.ceilDiv(ticks, (long)Math.ceil(ticksPerSecond));
- }
+ @Getter
+ @Setter
+ private static long ticksPerSecond = 1;
public static CompletableFuture asyncExec(Supplier supplier, long time) {
return CompletableFuture.supplyAsync(supplier).thenApplyAsync(x -> x,
- CompletableFuture.delayedExecutor(ticksToTime(time), TimeUnit.SECONDS));
+ CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS));
}
- public static CompletableFuture thenAsyncExec(CompletableFuture base, Function f, long time) {
- return base.thenApplyAsync(f, CompletableFuture.delayedExecutor(time, TimeUnit.SECONDS));
- }
-
public static void justWait(long time) {
- CompletableFuture.supplyAsync(() -> 0, CompletableFuture.delayedExecutor(time, TimeUnit.SECONDS)).join();
+ 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..65aaf31
--- /dev/null
+++ b/src/main/java/com/epita/creeps/Citizen.java
@@ -0,0 +1,45 @@
+package com.epita.creeps;
+
+import com.epita.creeps.given.json.Json;
+import com.epita.creeps.given.vo.geometry.Direction;
+import com.epita.creeps.given.vo.response.CommandResponse;
+import kong.unirest.core.HttpResponse;
+import kong.unirest.core.JsonNode;
+import kong.unirest.core.Unirest;
+
+import java.util.concurrent.CompletableFuture;
+//import java.util.logging.Logger;
+import org.slf4j.Logger;
+
+public class Citizen {
+ private final String id;
+ private final String command_uri;
+ private CompletableFuture> pendingAction;
+ public static String srvUrl;
+ public static Logger logger;
+
+ public Citizen(String login, String citizen_id ) {
+ if (srvUrl == null || logger == null) {
+ throw new RuntimeException("Tried to create a citizen without properly initializing static fields");
+ }
+ id = citizen_id;
+ command_uri = srvUrl + "/command/" + login + "/" + citizen_id + "/";
+ }
+
+ public void move(Direction direction) {
+ pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + "move:"+direction.direction).asJson(), 2);
+ }
+
+ public CommandResponse waitFinished() {
+ if (pendingAction == null) {
+ logger.warn("Tried to wait a citizen with no pending action");
+ return null;
+ }
+ JsonNode response = ((HttpResponse) pendingAction.join()).getBody();
+ return Json.parse(response.toString(), CommandResponse.class);
+ }
+
+ 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 1a881ef..4fe48fd 100644
--- a/src/main/java/com/epita/creeps/Program.java
+++ b/src/main/java/com/epita/creeps/Program.java
@@ -1,29 +1,24 @@
package com.epita.creeps;
import com.epita.creeps.commands.Basics;
-import com.epita.creeps.given.extra.Cartographer;
+import com.epita.creeps.given.json.Json;
import com.epita.creeps.given.vo.geometry.Direction;
-import com.epita.creeps.given.vo.geometry.Point;
import com.epita.creeps.given.vo.response.CommandResponse;
import com.epita.creeps.given.vo.response.InitResponse;
-import com.epita.creeps.given.vo.response.StatisticsResponse;
-import com.epita.creeps.units.*;
import kong.unirest.core.HttpResponse;
import kong.unirest.core.JsonNode;
import kong.unirest.core.Unirest;
import kong.unirest.core.UnirestException;
-import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
public class Program {
private static String srvUrl;
private static Logger logger;
- @Getter
private static String login;
public static void main(String[] args) {
@@ -45,9 +40,10 @@ public class Program {
// Classes
logger = LoggerFactory.getLogger(Program.class);
+ Basics basics = new Basics(logger, srvUrl);
logger.info("Initializing");
- Basics.setSrvUrl(srvUrl);
Citizen.srvUrl = srvUrl;
+ Citizen.logger = logger;
logger.debug("Using server " + srvUrl + " with player " + login);
if (default_values)
@@ -61,23 +57,58 @@ public class Program {
logger.error("Cannot connect to the server. Aborting...");
throw e;
}
+// AsyncExec.justWait(0);
// Create account and get init infos
logger.info("Creating account");
- InitResponse initResponse = Basics.connectAccount(login);
+ InitResponse initResponse = basics.connectAccount(login);
login = initResponse.login; // Just in case
- AsyncExec.setTicksPerSecond((float) initResponse.setup.ticksPerSeconds);
- Citizen citizen1 = new Citizen(login, initResponse.citizen1Id, initResponse.householdCoordinates);
- Citizen citizen2 = new Citizen(login, initResponse.citizen2Id, initResponse.householdCoordinates);
- Unit.getUnits().add(citizen1);
- Unit.getUnits().add(citizen2);
+ AsyncExec.setTicksPerSecond((long)initResponse.setup.ticksPerSeconds);
+ Citizen citizen1 = new Citizen(login, initResponse.citizen1Id);
+ Citizen citizen2 = new Citizen(login, initResponse.citizen2Id);
- // Et voilĂ , machtou pichtou
+ while (true) {
+ citizen1.move(Direction.RIGHT);
+ citizen2.move(Direction.UP);
+
+ CommandResponse citizen1_resp = citizen1.waitFinished();
+ CommandResponse citizen2_resp = citizen2.waitFinished();
+
+// logger.debug("Received actions responses");
+// logger.debug("citizen1.error: " + citizen1_resp.error);
+// logger.debug("citizen2.error: " + citizen2_resp.error);
+ }
- logger.info("Done");
+
+// logger.info("Done");
}
+// ### Get statistics
+//GET http://localhost:1664/statistics
+//
+//### Get status
+//GET http://localhost:1664/status
+//
+//### Get report
+//GET http://localhost:1664/report/148997e9b
+//
+//### Login with user login_l
+//POST http://localhost:1664/init/login_l
+//
+//> {%
+//client.global.set("baseId", response.body.baseId);
+//client.global.set("probeId", response.body.probeId);
+//client.global.set("login", response.body.login);
+//%}
+//
+//### Post noop commande
+//POST http://localhost:1664/command/{{login}}/{{probeId}}/noop
+//
+//###
+//POST http://localhost:1664/command/dumeig_a/8d87eea10/inspect
+//
+//###
}
diff --git a/src/main/java/com/epita/creeps/ServerReponseException.java b/src/main/java/com/epita/creeps/ServerReponseException.java
deleted file mode 100644
index 5757612..0000000
--- a/src/main/java/com/epita/creeps/ServerReponseException.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.epita.creeps;
-
-public class ServerReponseException extends RuntimeException {
- public ServerReponseException(String message) {
- super(message);
- }
-}
diff --git a/src/main/java/com/epita/creeps/commands/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java
index 070fab9..740fd94 100644
--- a/src/main/java/com/epita/creeps/commands/Basics.java
+++ b/src/main/java/com/epita/creeps/commands/Basics.java
@@ -1,16 +1,8 @@
package com.epita.creeps.commands;
import com.epita.creeps.AsyncExec;
-import com.epita.creeps.Program;
-import com.epita.creeps.given.exception.NoReportException;
-import com.epita.creeps.given.extra.Cartographer;
import com.epita.creeps.given.json.Json;
-import com.epita.creeps.given.vo.report.*;
import com.epita.creeps.given.vo.response.InitResponse;
-import com.epita.creeps.given.vo.response.StatisticsResponse;
-import com.epita.creeps.units.BomberBot;
-import com.epita.creeps.units.Turret;
-import com.epita.creeps.units.Unit;
import kong.unirest.core.HttpResponse;
import kong.unirest.core.JsonNode;
import kong.unirest.core.Unirest;
@@ -18,9 +10,7 @@ import kong.unirest.core.UnirestException;
import lombok.AllArgsConstructor;
import lombok.Getter;
-import lombok.Setter;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.concurrent.CompletableFuture;
@@ -28,14 +18,10 @@ import java.util.concurrent.CompletableFuture;
@Getter
public class Basics {
- private static final Logger logger = LoggerFactory.getLogger(Basics.class);
- private static String srvUrl;
+ private Logger logger;
+ private String srvUrl;
- public static void setSrvUrl(String srvUrl) {
- Basics.srvUrl = srvUrl;
- }
-
- public static InitResponse connectAccount(String login) {
+ public InitResponse connectAccount(String login) {
try {
CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.post(srvUrl + "/init/" + login).asJson(), 0);
HttpResponse response = (HttpResponse) resp.join();
@@ -52,77 +38,13 @@ public class Basics {
}
}
-
- public static StatisticsResponse getStatistics() {
- try {
- CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.get(srvUrl + "/statistics").asJson(), 0);
- HttpResponse response = resp.join();
- return Json.parse(response.getBody().toString(), StatisticsResponse.class);
- } catch (UnirestException e) {
- logger.error("Cannot retrieve statistics.");
- throw e;
- }
- }
-
- // Asks the server for a certain report
- public static Report getReport (String reportId) {
- HttpResponse response = null;
+ public void getReport (String reportId) {
+ HttpResponse response;
try {
response = Unirest.get(srvUrl + "/report/" + reportId).asJson();
-// logger.debug("Got report: " + response.getBody().toPrettyString());
- Report report = Json.parseReport(response.getBody().toString());
- handleReport(report);
- return report;
+ logger.debug(response.getBody().toPrettyString());
} catch (UnirestException e) {
logger.error("Could not retrieve report");
- throw new RuntimeException(e);
- } catch (NoReportException e) {
- logger.error("Could not parse report: not a report");
- logger.debug(response.getBody().toPrettyString());
- throw new RuntimeException(e);
- }
- }
-
- public static void handleReport(Report report) {
- Cartographer c = Cartographer.INSTANCE;
- if (report.opcode.startsWith("farm")) {
- c.register((FarmReport) report);
- }
- else if (report.opcode.startsWith("gather")) {
- c.register((GatherReport) report);
- }
- else if (report.opcode.startsWith("move")) {
- c.register((MoveReport) report);
- }
- else if (report.opcode.startsWith("build")) {
- c.register((BuildReport) report);
- }
- else if (report.opcode.startsWith("observe")) {
- c.register((ObserveReport) report);
- }
- else if (report.opcode.startsWith("spawn"))
- {
- SpawnReport spawnReport = (SpawnReport) report;
- if (spawnReport.errorCode != null) {
- logger.warn("Could not spawn unit: got report with an error: " + report.errorCode);
- }
- if (spawnReport.spawnedUnit.opcode.endsWith("turret")) {
- Turret turret = new Turret(Program.getLogin(), spawnReport.spawnedUnitId, spawnReport.spawnedUnit.position);
- Unit.getUnits().add(turret);
- }
- else if (spawnReport.spawnedUnit.opcode.endsWith("bomber-bot")) {
- BomberBot bombhero = new BomberBot(Program.getLogin(), spawnReport.spawnedUnitId, spawnReport.spawnedUnit.position);
- Unit.getUnits().add(bombhero);
- }
- else {
- logger.warn("Spawned unit is an unknown type. Ignored...");
- }
- }
- else if (report.opcode.startsWith("fire")) {
- logger.debug("FIRREEE!!");
- }
- else {
- logger.warn("Unknown opcode '" + report.opcode + "' in the server report. Ignored...");
}
}
diff --git a/src/main/java/com/epita/creeps/commands/ObeserveReport.java b/src/main/java/com/epita/creeps/commands/ObeserveReport.java
deleted file mode 100644
index e69de29..0000000
diff --git a/src/main/java/com/epita/creeps/units/BomberBot.java b/src/main/java/com/epita/creeps/units/BomberBot.java
deleted file mode 100644
index c499dea..0000000
--- a/src/main/java/com/epita/creeps/units/BomberBot.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.epita.creeps.units;
-
-import com.epita.creeps.given.extra.Cartographer;
-import com.epita.creeps.given.json.Json;
-import com.epita.creeps.given.vo.geometry.Point;
-import com.epita.creeps.given.vo.parameter.FireParameter;
-
-import java.util.List;
-
-public class BomberBot extends Unit {
-
- public BomberBot(String login, String id, Point position) {
- super(login, id, position);
- }
-
- // Retrieves all units that are turrets
- public static List getBomberBotUnits() {
- return getUnits().stream().filter(unit -> unit.getClass() == BomberBot.class).toList();
- }
-
- public BomberBot fire() {
- FireParameter fp = new FireParameter(this.position);
- sendActionWithBody("fire:bomber-bot", Json.serialize(fp), 2);
- return this;
- }
-}
diff --git a/src/main/java/com/epita/creeps/units/Building.java b/src/main/java/com/epita/creeps/units/Building.java
deleted file mode 100644
index 2ceebd7..0000000
--- a/src/main/java/com/epita/creeps/units/Building.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.epita.creeps.units;
-
-public enum Building {
- TOWNHALL("town-hall"),
- HOUSEHOLD("household"),
- SAWMILL("sawmill"),
- SMELTERY("smeltery"),
- ROAD("road");
-
- public final String name;
- private Building(final String building) {
- this.name = building;
- }
-}
diff --git a/src/main/java/com/epita/creeps/units/Citizen.java b/src/main/java/com/epita/creeps/units/Citizen.java
deleted file mode 100644
index 6d2b4a5..0000000
--- a/src/main/java/com/epita/creeps/units/Citizen.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.epita.creeps.units;
-
-import com.epita.creeps.AsyncExec;
-import com.epita.creeps.ServerReponseException;
-import com.epita.creeps.commands.Basics;
-import com.epita.creeps.given.exception.NoReportException;
-import com.epita.creeps.given.json.Json;
-import com.epita.creeps.given.vo.geometry.Direction;
-import com.epita.creeps.given.vo.geometry.Point;
-import com.epita.creeps.given.vo.parameter.MessageParameter;
-import com.epita.creeps.given.vo.report.MoveReport;
-import com.epita.creeps.given.vo.report.Report;
-import com.epita.creeps.given.vo.response.CommandResponse;
-import kong.unirest.core.HttpResponse;
-import kong.unirest.core.JsonNode;
-import kong.unirest.core.Unirest;
-
-import java.util.concurrent.CompletableFuture;
-
-
-public class Citizen extends Unit {
-
- public Citizen(String login, String citizen_id, Point position) {
- super(login, citizen_id, position);
- }
-
- public Citizen move(Direction direction) {
- sendAction("move:"+direction.direction, 2);
- return this;
- }
- public Citizen observe() {
- sendAction("observe", 1);
- return this;
- }
- public Citizen gather() {
- sendAction("gather", 4);
- return this;
- }
- public Citizen unload() {
- sendAction("unload", 3);
- return this;
- }
- public Citizen farm() {
- sendAction("farm", 10);
- return this;
- }
- public Citizen build(Building building) {
- sendAction("build:" + building.name, 20);
- return this;
- }
- public Citizen spawn(String unit) {
- sendAction("spawn:" + unit, 6);
- return this;
- }
- public Citizen refine(String resource) {
- sendAction("refine:" + resource, 8);
- return this;
- }
- public Citizen sendMessage(String receiver, String message) {
- MessageParameter mp = new MessageParameter(receiver, message);
- sendActionWithBody("message:send", Json.serialize(mp), 1);
- return this;
- }
- public Citizen fetchMessages() {
- sendAction("message:fetch", 1);
- return this;
- }
-
-
-}
diff --git a/src/main/java/com/epita/creeps/units/Turret.java b/src/main/java/com/epita/creeps/units/Turret.java
deleted file mode 100644
index f2ba638..0000000
--- a/src/main/java/com/epita/creeps/units/Turret.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.epita.creeps.units;
-
-import com.epita.creeps.given.extra.Cartographer;
-import com.epita.creeps.given.json.Json;
-import com.epita.creeps.given.vo.geometry.Point;
-import com.epita.creeps.given.vo.parameter.FireParameter;
-
-import java.util.List;
-
-public class Turret extends Unit {
-
- public Turret(String login, String id, Point position) {
- super(login, id, position);
- }
-
- // Retrieves all units that are turrets
- public static List getTurretUnits() {
- return getUnits().stream().filter(unit -> unit.getClass() == Turret.class).toList();
- }
-
- public Turret fire(Point target) {
- FireParameter fp = new FireParameter(target);
- Cartographer cartographer = Cartographer.INSTANCE;
- sendActionWithBody("fire:turret", Json.serialize(fp), 2);
- return this;
- }
-}
diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java
deleted file mode 100644
index d508fa4..0000000
--- a/src/main/java/com/epita/creeps/units/Unit.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.epita.creeps.units;
-
-import com.epita.creeps.AsyncExec;
-import com.epita.creeps.ServerReponseException;
-import com.epita.creeps.commands.Basics;
-import com.epita.creeps.given.json.Json;
-import com.epita.creeps.given.vo.geometry.Point;
-import com.epita.creeps.given.vo.report.Report;
-import com.epita.creeps.given.vo.response.CommandResponse;
-import kong.unirest.core.HttpResponse;
-import kong.unirest.core.JsonNode;
-import kong.unirest.core.Unirest;
-import lombok.Getter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-public abstract class Unit {
-
- @Getter
- private static final List units = new ArrayList<>();
- public static String srvUrl;
- public static final Logger logger = LoggerFactory.getLogger(Unit.class);
-
- protected final String id;
- @Getter
- protected final Point position;
- protected final String command_uri;
- protected CompletableFuture> pendingAction;
- protected CompletableFuture pendingReport;
- protected Report lastReport;
- protected boolean idle = true;
-
- public Unit(String login, String id, Point position) {
- if (srvUrl == null) {
- throw new RuntimeException("Tried to create a citizen without properly initializing static fields");
- }
- this.id = id;
- this.position = position;
- command_uri = srvUrl + "/command/" + login + "/" + id + "/";
- }
-
- // Sends a specific action to the server using it's HTTPS string representation
- // Sets pending action accordingly and asks for a report after `delay` ticks
- public void sendActionWithBody(String actionCode, String body, long delay) {
- if (!idle) {
-// logger.warn("Unit is already busy, queuing action");
- this.waitFinished();
- }
- // Do
- idle = false;
- pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + actionCode).body(body).asJson(), delay)
- .thenApplyAsync( x -> x );
- // Get report
- pendingReport = getCommandReport();
- }
-
- // Just sends an action with an empty body
- public void sendAction(String actionCode, long delay) {
- sendActionWithBody(actionCode, "{}", delay);
- }
-
- public void upgrade() {
- sendAction("upgrade", 1);
- }
- public void noop() {
- sendAction("noop", 1);
- }
-
- /*
- * @return true if action succeeded, false otherwise
- */
- public boolean waitFinished() {
- if (idle) {
- logger.warn("Tried to wait for an idle citizen");
- return false;
- }
- if (pendingAction == null || pendingReport == null) {
- logger.warn("Tried to wait a citizen with no pending action or report");
- return false;
- }
- lastReport = pendingReport.join();
- if (lastReport == null) {
- logger.warn("Invalid report received: null value");
- return false;
- }
-// logger.debug("Got report: " + lastReport);
- idle = true;
-
- return lastReport.errorCode != null;
- }
-
-
- // Retrieves the report of the current pending action from the server
- private CompletableFuture getCommandReport() {
- if (pendingAction == null) {
- logger.warn("Tried to retrieve report but there's no pending action");
- return null;
- }
- return AsyncExec.thenAsyncExec(pendingAction, x -> {
- CommandResponse cr = Json.parse(x.getBody().toString(), CommandResponse.class);
- if (cr.error != null) {
- logger.debug("Server reponse: " + cr.toString());
- throw new ServerReponseException("Error retrieving the report id");
- }
- String reportId = cr.reportId;
- return Basics.getReport(reportId);
- }, 0);
- }
-}