Implement NetworkTables (#95)

* Implement NetworkTables stuff

* Update RequestHandler.java

* run spotless

* Address review

* fix comments and cleanup more
This commit is contained in:
Matt
2020-08-19 17:08:24 -07:00
committed by GitHub
parent adafa58143
commit 0f8507e6b3
6 changed files with 43 additions and 41 deletions

View File

@@ -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<VisionSource, List<CVPipelineSettings>> allSources = gatherSources();

View File

@@ -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 = "";

View File

@@ -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;

View File

@@ -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<LogMessage> {
@@ -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();

View File

@@ -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");
}
}

View File

@@ -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);