diff --git a/photon-server/src/main/java/org/photonvision/Main.java b/photon-server/src/main/java/org/photonvision/Main.java index 7448e78c4..89a33b85a 100644 --- a/photon-server/src/main/java/org/photonvision/Main.java +++ b/photon-server/src/main/java/org/photonvision/Main.java @@ -168,8 +168,10 @@ public class Main { } ConfigManager.getInstance(); // init config manager - NetworkManager.getInstance().initialize(false); // basically empty. todo: link to ConfigManager? - NetworkTablesManager.setClientMode("127.0.0.1"); + NetworkManager.getInstance().initialize(false); + + NetworkTablesManager.getInstance() + .setConfig(ConfigManager.getInstance().getConfig().getNetworkConfig()); HashMap> allSources = gatherSources(); diff --git a/photon-server/src/main/java/org/photonvision/common/configuration/NetworkConfig.java b/photon-server/src/main/java/org/photonvision/common/configuration/NetworkConfig.java index a3094e889..f09ea17c5 100644 --- a/photon-server/src/main/java/org/photonvision/common/configuration/NetworkConfig.java +++ b/photon-server/src/main/java/org/photonvision/common/configuration/NetworkConfig.java @@ -22,7 +22,7 @@ import java.util.Map; import org.photonvision.common.networking.NetworkMode; public class NetworkConfig { - public int teamNumber = 1; + public int teamNumber = -1; public NetworkMode connectionType = NetworkMode.DHCP; public String staticIp = ""; public String netmask = ""; diff --git a/photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NTDataPublisher.java b/photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NTDataPublisher.java index d150be39a..8823f6651 100644 --- a/photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NTDataPublisher.java +++ b/photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NTDataPublisher.java @@ -30,7 +30,7 @@ import org.photonvision.vision.pipeline.result.SimplePipelineResult; public class NTDataPublisher implements CVPipelineResultConsumer { - private final NetworkTable rootTable = NetworkTablesManager.kRootTable; + private final NetworkTable rootTable = NetworkTablesManager.getInstance().kRootTable; private NetworkTable subTable; private NetworkTableEntry rawBytesEntry; diff --git a/photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java b/photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java index 384af5188..4d38a8fa3 100644 --- a/photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java +++ b/photon-server/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java @@ -21,30 +21,32 @@ import edu.wpi.first.networktables.LogMessage; import edu.wpi.first.networktables.NetworkTable; import edu.wpi.first.networktables.NetworkTableInstance; import java.util.function.Consumer; -import org.photonvision.common.configuration.ConfigManager; +import org.photonvision.common.configuration.NetworkConfig; import org.photonvision.common.logging.LogGroup; import org.photonvision.common.logging.Logger; import org.photonvision.common.scripting.ScriptEventType; import org.photonvision.common.scripting.ScriptManager; -// TODO refactor this to be a singleton public class NetworkTablesManager { - private NetworkTablesManager() {} + private final NetworkTableInstance ntInstance = NetworkTableInstance.getDefault(); + private final String kRootTableName = "/photonvision"; + public final NetworkTable kRootTable = ntInstance.getTable(kRootTableName); + + private NetworkTablesManager() { + ntInstance.addLogger(new NTLogger(), 0, 255); // to hide error messages + } + + private static NetworkTablesManager INSTANCE; + + public static NetworkTablesManager getInstance() { + if (INSTANCE == null) INSTANCE = new NetworkTablesManager(); + return INSTANCE; + } private static final Logger logger = new Logger(NetworkTablesManager.class, LogGroup.General); - private static final NetworkTableInstance ntInstance = NetworkTableInstance.getDefault(); - - public static final String kRootTableName = "/photonvision"; - public static final NetworkTable kRootTable = - NetworkTableInstance.getDefault().getTable(kRootTableName); - - public static boolean isServer = false; - - private static int getTeamNumber() { - return ConfigManager.getInstance().getConfig().getNetworkConfig().teamNumber; - } + public boolean isServer = false; private static class NTLogger implements Consumer { @@ -66,32 +68,29 @@ public class NetworkTablesManager { } } - static { - NetworkTableInstance.getDefault().addLogger(new NTLogger(), 0, 255); // to hide error messages - } - - public static void setClientMode(String host) { - isServer = false; - logger.info("Starting NT Client"); - ntInstance.stopServer(); - if (host != null) { - ntInstance.startClient(host); + public void setConfig(NetworkConfig config) { + if (config.teamNumber > 0) { + setClientMode(config.teamNumber); } else { - ntInstance.startClientTeam(getTeamNumber()); - if (ntInstance.isConnected()) { - logger.info("[NetworkTablesManager] Connected to the robot!"); - } else { - logger.info( - "[NetworkTablesManager] Could NOT to the robot! Will retry in the background..."); - } + setServerMode(); } } - public static void setTeamClientMode() { - setClientMode(null); + private void setClientMode(int teamNumber) { + isServer = false; + logger.info("Starting NT Client"); + ntInstance.stopServer(); + + ntInstance.startClientTeam(teamNumber); + if (ntInstance.isConnected()) { + logger.info("[NetworkTablesManager] Connected to the robot!"); + } else { + logger.error( + "[NetworkTablesManager] Could not connect to the robot! Will retry in the background..."); + } } - public static void setServerMode() { + private void setServerMode() { isServer = true; logger.info("Starting NT Server"); ntInstance.stopClient(); diff --git a/photon-server/src/main/java/org/photonvision/common/networking/NetworkManager.java b/photon-server/src/main/java/org/photonvision/common/networking/NetworkManager.java index fa8e70bd0..f87deb0ba 100644 --- a/photon-server/src/main/java/org/photonvision/common/networking/NetworkManager.java +++ b/photon-server/src/main/java/org/photonvision/common/networking/NetworkManager.java @@ -17,7 +17,6 @@ package org.photonvision.common.networking; -import java.io.IOException; import org.photonvision.common.configuration.ConfigManager; import org.photonvision.common.hardware.Platform; import org.photonvision.common.logging.LogGroup; @@ -59,10 +58,12 @@ public class NetworkManager { try { new ShellExec() .executeBashCommand("ip addr add " + config.staticIp + "/24" + " dev eth0"); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } } + } else { + logger.info("Not managing network on non-Linux platforms"); } } diff --git a/photon-server/src/main/java/org/photonvision/server/RequestHandler.java b/photon-server/src/main/java/org/photonvision/server/RequestHandler.java index 5fb055c6e..6157d1bdd 100644 --- a/photon-server/src/main/java/org/photonvision/server/RequestHandler.java +++ b/photon-server/src/main/java/org/photonvision/server/RequestHandler.java @@ -77,7 +77,7 @@ public class RequestHandler { ConfigManager.getInstance().setNetworkSettings(networkConfig); ConfigManager.getInstance().requestSave(); NetworkManager.getInstance().reinitialize(); - NetworkTablesManager.setClientMode(null); // TODO + NetworkTablesManager.getInstance().setConfig(networkConfig); logger.info("Responding to general settings with http 200"); context.status(200);