From bfc5e45cd0aa3f6ab6002ef40ff754716c07f29d Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 18 Oct 2022 23:52:13 -0400 Subject: [PATCH] Restart NT client every 5 seconds if not connected (#467) Fun hack to get around photonvision not connecting if it boots before robot code starts Co-authored-by: shueja-personal <32416547+shueja-personal@users.noreply.github.com> --- .../networktables/NetworkTablesManager.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java b/photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java index 3fadb11aa..5efa9a388 100644 --- a/photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java +++ b/photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java @@ -23,6 +23,7 @@ import edu.wpi.first.networktables.NetworkTableInstance; import java.util.HashMap; import java.util.function.Consumer; import org.photonvision.PhotonVersion; +import org.photonvision.common.configuration.ConfigManager; import org.photonvision.common.configuration.NetworkConfig; import org.photonvision.common.dataflow.DataChangeService; import org.photonvision.common.dataflow.events.OutgoingUIEvent; @@ -39,6 +40,7 @@ public class NetworkTablesManager { private NetworkTablesManager() { ntInstance.addLogger(new NTLogger(), 0, 255); // to hide error messages + TimedTaskManager.getInstance().addTask("NTManager", this::ntTick, 5000); } private static NetworkTablesManager INSTANCE; @@ -129,4 +131,16 @@ public class NetworkTablesManager { ntInstance.startServer(); broadcastVersion(); } + + // So it seems like if Photon starts before the robot NT server does, and both aren't static IP, + // it'll never connect. This hack works around it by restarting the client/server while the nt + // instance + // isn't connected, same as clicking the save button in the settings menu (or restarting the + // service) + private void ntTick() { + if (!ntInstance.isConnected() + && !ConfigManager.getInstance().getConfig().getNetworkConfig().runNTServer) { + setConfig(ConfigManager.getInstance().getConfig().getNetworkConfig()); + } + } }