From 465e0a2be1f2f5e36dc6e0b7204ce09c6ab70459 Mon Sep 17 00:00:00 2001 From: Sheikah45 Date: Sun, 6 Aug 2023 10:33:37 -0400 Subject: [PATCH] Allow ice adapter to start when TelemetryDebugger not connected --- client/src/main/java/client/TestClient.java | 2 +- .../com/faforever/iceadapter/IceAdapter.java | 5 +- .../iceadapter/debug/TelemetryDebugger.java | 1 + .../main/java/data/ForgedAlliancePeer.java | 98 ++++++++++--------- shared/src/main/java/data/IceStatus.java | 10 +- 5 files changed, 61 insertions(+), 55 deletions(-) diff --git a/client/src/main/java/client/TestClient.java b/client/src/main/java/client/TestClient.java index 969edca..75453e4 100644 --- a/client/src/main/java/client/TestClient.java +++ b/client/src/main/java/client/TestClient.java @@ -65,7 +65,7 @@ private static void informationThread() { if(forgedAlliance != null) { forgedAlliance.getPeers().forEach(p -> { synchronized (p) { - p.setLatencies(new LinkedList<>()); + p.clearLatencyHistory(); } }); } diff --git a/ice-adapter/src/main/java/com/faforever/iceadapter/IceAdapter.java b/ice-adapter/src/main/java/com/faforever/iceadapter/IceAdapter.java index 859ed3a..1dce7c1 100644 --- a/ice-adapter/src/main/java/com/faforever/iceadapter/IceAdapter.java +++ b/ice-adapter/src/main/java/com/faforever/iceadapter/IceAdapter.java @@ -10,9 +10,7 @@ import lombok.extern.slf4j.Slf4j; import picocli.CommandLine; -import java.util.Arrays; import java.util.concurrent.Callable; -import java.util.stream.Collectors; import static com.faforever.iceadapter.debug.Debug.debug; @CommandLine.Command(name = "faf-ice-adapter", mixinStandardHelpOptions = true, usageHelpAutoWidth = true, @@ -48,7 +46,6 @@ public static void main(String[] args) { new CommandLine(new IceAdapter()).execute(args); } - @Override public Integer call() { IceAdapter.start(iceOptions); @@ -170,7 +167,7 @@ public static void close() { /** * Read command line arguments and set global, constant values - * @param arguments The arguments to be read + * @param iceOptions The arguments to be read */ public static void loadOptions(IceOptions iceOptions) { TELEMETRY_SERVER = iceOptions.getTelemetryServer(); diff --git a/ice-adapter/src/main/java/com/faforever/iceadapter/debug/TelemetryDebugger.java b/ice-adapter/src/main/java/com/faforever/iceadapter/debug/TelemetryDebugger.java index 69f2cf8..c8d2ad7 100644 --- a/ice-adapter/src/main/java/com/faforever/iceadapter/debug/TelemetryDebugger.java +++ b/ice-adapter/src/main/java/com/faforever/iceadapter/debug/TelemetryDebugger.java @@ -94,6 +94,7 @@ private void sendMessage(OutgoingMessageV1 message) { public void startupComplete() { try { if (!websocketClient.connectBlocking()) { + Debug.remove(this); return; } } catch (InterruptedException e) { diff --git a/shared/src/main/java/data/ForgedAlliancePeer.java b/shared/src/main/java/data/ForgedAlliancePeer.java index 73dc866..b9f1f81 100644 --- a/shared/src/main/java/data/ForgedAlliancePeer.java +++ b/shared/src/main/java/data/ForgedAlliancePeer.java @@ -8,50 +8,58 @@ @Data public class ForgedAlliancePeer { - private boolean connected = false; - public final String remoteAddress; - public final int remotePort; - public final int remoteId; - public final String remoteUsername; - public final Offerer offerer; - - public int echoRequestsSent; - public long lastPacketReceived = System.currentTimeMillis(); - public Queue latencies = new LinkedList<>(); - - public long lastConnectionRequestSent = 0; - - public int addLatency(int lat) { - lastPacketReceived = System.currentTimeMillis(); - - synchronized (latencies) { - latencies.add(lat); - if(latencies.size() > 25) { - latencies.remove(); - } - } - return getLatency(); - } - - public int getLatency() { - synchronized (latencies) { - return (int)latencies.stream().mapToInt(Integer::intValue).average().orElse(0); - } - } - - public int getJitter() { - int lat = getLatency(); - synchronized (latencies) { - return Math.max(latencies.stream().mapToInt(Integer::intValue).max().orElse(0) - lat, lat - latencies.stream().mapToInt(Integer::intValue).min().orElse(0)); - } - } - - public boolean isQuiet() { - return System.currentTimeMillis() - lastPacketReceived > 5000; - } - - public static enum Offerer { - REMOTE, LOCAL - } + private boolean connected = false; + public final String remoteAddress; + public final int remotePort; + public final int remoteId; + public final String remoteUsername; + public final Offerer offerer; + + public int echoRequestsSent; + public long lastPacketReceived = System.currentTimeMillis(); + public final Queue latencies = new LinkedList<>(); + + public long lastConnectionRequestSent = 0; + + public void clearLatencyHistory() { + synchronized (latencies) { + latencies.clear(); + } + } + + public int addLatency(int lat) { + lastPacketReceived = System.currentTimeMillis(); + + synchronized (latencies) { + latencies.add(lat); + if (latencies.size() > 25) { + latencies.remove(); + } + } + return getAverageLatency(); + } + + public int getAverageLatency() { + synchronized (latencies) { + return (int) latencies.stream().mapToInt(Integer::intValue).average().orElse(0); + } + } + + public int getJitter() { + int averageLatency = getAverageLatency(); + synchronized (latencies) { + int maxLatency = latencies.stream().mapToInt(Integer::intValue).max().orElse(0); + int minLatency = latencies.stream().mapToInt(Integer::intValue).min().orElse(0); + return Math.max(maxLatency - averageLatency, averageLatency - minLatency); + } + } + + public boolean isQuiet() { + return System.currentTimeMillis() - lastPacketReceived > 5000; + } + + public enum Offerer { + REMOTE, LOCAL + } } diff --git a/shared/src/main/java/data/IceStatus.java b/shared/src/main/java/data/IceStatus.java index ac634f4..33eada1 100644 --- a/shared/src/main/java/data/IceStatus.java +++ b/shared/src/main/java/data/IceStatus.java @@ -10,10 +10,10 @@ public class IceStatus { private String init_mode; private IceOptions options; private IceGPGNetState gpgpnet; - private IceRelay relays[]; + private IceRelay[] relays; @Data - public class IceOptions { + public static class IceOptions { private int player_id; private String player_login; private int rpc_port; @@ -21,7 +21,7 @@ public class IceOptions { } @Data - public class IceGPGNetState { + public static class IceGPGNetState { private int local_port; private boolean connected; private String game_state; @@ -29,7 +29,7 @@ public class IceGPGNetState { } @Data - public class IceRelay { + public static class IceRelay { private int remote_player_id; private String remote_player_login; @@ -37,7 +37,7 @@ public class IceRelay { private IceRelayICEState ice; @Data - public class IceRelayICEState { + public static class IceRelayICEState { private boolean offerer; private String state; private String gathering_state;