diff --git a/src/main/java/frc4388/utility/DesmosServer.java b/src/main/java/frc4388/utility/DesmosServer.java index bc82bca..ceaea0e 100644 --- a/src/main/java/frc4388/utility/DesmosServer.java +++ b/src/main/java/frc4388/utility/DesmosServer.java @@ -11,21 +11,52 @@ import java.util.HashMap; import org.opencv.core.Point; +/** + * A http server that allows the robot to communicate with Desmos Graphing Calculator + * + * @author Daniel McGrath + * */ public class DesmosServer extends Thread { private static HashMap desmosVariables = new HashMap<>(); private static HashMap readVariables = new HashMap<>(); private static boolean running = false; + + private int activePort; + + /** + * Creates DesmosServer running on port + *

+ * Use this for cases when the robot is using the default port + * + * @param port The port the server will run on + * */ + public DesmosServer(int port) { + activePort = port; + } + + /** + * Creates DesmosServer running on port 5500 + * */ + public DesmosServer() { + activePort = 5500; + } @Override public void run() { try { - runServer(5500); + runServer(activePort); } catch(Exception err) { err.printStackTrace(); } } + /** + * Runs server on port + * + * @param port The port the server runs on + * @throws IOException + * */ public void runServer(int port) throws IOException { ServerSocket serverSocket = new ServerSocket(port); running = true; @@ -36,6 +67,12 @@ public class DesmosServer extends Thread { } } + /** + * Handles client requests + * + * @param The client connection + * @throws IOException + * */ public void handleClient(Socket client) throws IOException { InputStreamReader clientStream = new InputStreamReader(client.getInputStream()); BufferedReader bufferedReader = new BufferedReader(clientStream); @@ -50,6 +87,12 @@ public class DesmosServer extends Thread { sendResponse(client); } + /** + * Sends JSON response + * + * @param The client connection + * @throws IOException + * */ public void sendResponse(Socket client) throws IOException { OutputStream clientOutput = client.getOutputStream(); @@ -58,17 +101,25 @@ public class DesmosServer extends Thread { clientOutput.close(); } + /** + * Produces JSON output containing Desmos output. + * + * @return JSON string to be read by Desmos client + * */ public static String getJSONOutput() { String json = "["; - for(String key : desmosVariables.keySet()) { - json += "{" - + "\"name\":" + key - + "\"value\":" + desmosVariables.get(key) - + "},"; + if(!desmosVariables.isEmpty()) { + for(String key : desmosVariables.keySet()) { + json += "{" + + "\"name\":\"" + key + "\"," + + "\"value\":\"" + desmosVariables.get(key) + "\"" + + "},"; + } + + json = json.substring(0, json.length()-1); // remove comma at the end } - - json = json.substring(0, json.length()-1); // remove comma at the end + json += "]"; return json; @@ -77,6 +128,8 @@ public class DesmosServer extends Thread { public static boolean isRunning() { return running; } + + // --------------------------------------------------------------------- public static void putInteger(String name, Integer value) { desmosVariables.put(name, value.toString()); @@ -89,6 +142,16 @@ public class DesmosServer extends Thread { public static void putPoint(String name, Point point) { desmosVariables.put(name, "(" + point.x + "," + point.y + ")"); } + + public static void putIntegerArray(String name, int... arr) { + desmosVariables.put(name, Arrays.toString(arr).replace(" ", "")); + } + + public static void putDoubleArray(String name, double... arr) { + desmosVariables.put(name, Arrays.toString(arr).replace(" ", "")); + } + + // --------------------------------------------------------------------- public static int readInteger(String name) { return Integer.parseInt(readVariables.get(name));