From 4e7ddfb82e563ddf9dc2483975f08ed6b3388950 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Wed, 23 Feb 2022 14:58:07 -0500 Subject: [PATCH] console reconnect does not work #3958 one instance should be enough! --- .../rusefi/binaryprotocol/BinaryProtocol.java | 2 +- .../com/rusefi/io/ConnectionWatchdog.java | 26 ++++++++++++++++--- .../main/java/com/rusefi/rusEFIVersion.java | 2 +- .../java/com/rusefi/ui/console/MainFrame.java | 7 +---- .../com/rusefi/ui/light/LightweightGUI.java | 5 +--- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java index d2c63f2736..0a760400e7 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java @@ -182,7 +182,7 @@ public class BinaryProtocol { private void startPullThread(final DataListener textListener) { if (!linkManager.COMMUNICATION_QUEUE.isEmpty()) { - log.info("Current queue: " + linkManager.COMMUNICATION_QUEUE.size()); + log.info("Current queue size: " + linkManager.COMMUNICATION_QUEUE.size()); } Runnable textPull = new Runnable() { @Override diff --git a/java_console/io/src/main/java/com/rusefi/io/ConnectionWatchdog.java b/java_console/io/src/main/java/com/rusefi/io/ConnectionWatchdog.java index 922f4e16c1..eb79c6d00f 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ConnectionWatchdog.java +++ b/java_console/io/src/main/java/com/rusefi/io/ConnectionWatchdog.java @@ -1,21 +1,41 @@ package com.rusefi.io; +import com.devexperts.logging.Logging; +import com.rusefi.Timeouts; + import javax.swing.*; +import static com.devexperts.logging.Logging.getLogging; + /** * todo: open question if it's OK to use AWT timer in headless cases? */ public class ConnectionWatchdog { - private final Timer reconnectTimer; + private static final Logging log = getLogging(ConnectionWatchdog.class); - public ConnectionWatchdog(int timeoutMs, Runnable action) { + private final Timer reconnectTimer; + private static boolean isCreated; + + private ConnectionWatchdog(int timeoutMs, Runnable action) { reconnectTimer = new Timer(timeoutMs, e -> { action.run(); onDataArrived(); }); } - public void start() { + public synchronized static void init(LinkManager linkManager) { + if (isCreated) + return; // only one instance is needed + isCreated = true; + new ConnectionWatchdog(Timeouts.CONNECTION_RESTART_DELAY, () -> { + linkManager.execute(() -> { + log.info("ConnectionWatchdog.reconnectTimer restarting: " + Timeouts.CONNECTION_RESTART_DELAY); + linkManager.restart(); + }); + }).start(); + } + + void start() { HeartBeatListeners.INSTANCE.addListener(this::onDataArrived); onDataArrived(); } diff --git a/java_console/shared_io/src/main/java/com/rusefi/rusEFIVersion.java b/java_console/shared_io/src/main/java/com/rusefi/rusEFIVersion.java index 11d83d14f5..2ccbe13b51 100644 --- a/java_console/shared_io/src/main/java/com/rusefi/rusEFIVersion.java +++ b/java_console/shared_io/src/main/java/com/rusefi/rusEFIVersion.java @@ -6,7 +6,7 @@ import java.net.URL; import java.util.concurrent.atomic.AtomicReference; public class rusEFIVersion { - public static final int CONSOLE_VERSION = 20220222; + public static final int CONSOLE_VERSION = 20220223; public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); public static long classBuildTimeMillis() { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java index a9a082c8d0..f59803c1a4 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java @@ -82,12 +82,7 @@ public class MainFrame { @Override public void onConnectionEstablished() { - new ConnectionWatchdog(Timeouts.CONNECTION_RESTART_DELAY, () -> { - linkManager.execute(() -> { - log.info("ConnectionWatchdog.reconnectTimer restarting: " + Timeouts.CONNECTION_RESTART_DELAY); - linkManager.restart(); - }); - }).start(); + ConnectionWatchdog.init(linkManager); SwingUtilities.invokeLater(() -> { tabbedPane.settingsTab.showContent(); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/light/LightweightGUI.java b/java_console/ui/src/main/java/com/rusefi/ui/light/LightweightGUI.java index e8021b09bc..343c52df73 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/light/LightweightGUI.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/light/LightweightGUI.java @@ -104,10 +104,7 @@ public class LightweightGUI { linkManager.startAndConnect(autoDetectedPort, ConnectionStateListener.VOID); - new ConnectionWatchdog(Timeouts.CONNECTION_RESTART_DELAY, () -> { - log.info("ConnectionWatchdog.reconnectTimer restarting: " + Timeouts.CONNECTION_RESTART_DELAY); - linkManager.restart(); - }).start(); + ConnectionWatchdog.init(linkManager); } private static String detectPortUntilDetected() {