diff --git a/src/main/java/ch/hevs/isi/web/WebConnector.java b/src/main/java/ch/hevs/isi/web/WebConnector.java index 292dfab..8e033d9 100644 --- a/src/main/java/ch/hevs/isi/web/WebConnector.java +++ b/src/main/java/ch/hevs/isi/web/WebConnector.java @@ -11,23 +11,49 @@ import org.java_websocket.server.WebSocketServer; import java.net.InetSocketAddress; public class WebConnector implements DataPointListener { - private static WebConnector mySelf = null; - public WebSocketServer wss = null; + private static WebConnector mySelf = null; // Singleton + public WebSocketServer wss = null; // Websocket server + /** + * Private constructor + * Subscribe to the update of DataPoints + */ private WebConnector (){ // Subscribe to the update of DataPoints DataPointListener.subscribeUpdate(this); } + /** + * Get the singleton instance + * create it if it does not exist + * @return the singleton instance + */ public static WebConnector getMySelf(){ if (mySelf == null){ mySelf = new WebConnector(); } return mySelf; } + + /** + * Initialize webConnector by initializing the websocket server + * - define all the callbacks for the websocket server (onOpen, onClose, onMessage, onError, onStart) + * - start the websocket server + * - wait for the first connection + * @param host url of the host (localhost) + * @param port port for the websocket server (8888) + */ public void initialize(String host, int port){ InetSocketAddress address = new InetSocketAddress(host, port); + /** + * Define all the callbacks for the websocket server + * - onOpen (send a message to the client) + * - onClose (stop the websocket server) + * - onMessage (update the dataPoint) + * - onError (print the error) + * - onStart (print a message) + */ wss = new WebSocketServer(address) { @Override public void onOpen(WebSocket conn, ClientHandshake handshake) { @@ -73,18 +99,30 @@ public class WebConnector implements DataPointListener { wss.start(); } + /** + * Push the dataPoint to the web + * use the websocket server to broadcast the dataPoint + * @param dp dataPoint to push + */ private void pushToWeb(DataPoint dp){ wss.broadcast(dp.toString()); Utility.pDebug(dp.toString() + " -> Web"); } + /** + * Update the dataPoint with the message received from the web + * @param message + */ private void updateDataPoint(String message){ + + // Split the message to get the label and the value String label = message.split("=")[0]; Utility.pDebug("Label: " + label); String value = message.split("=")[1]; Utility.pDebug("Value: " + value); + // Check if the value is a boolean or a float and update the dataPoint if( (value.equals("true")) || value.equals("false") ) { new BooleanDataPoint(label, true).setValue(Boolean.parseBoolean(value)); } else { @@ -93,6 +131,10 @@ public class WebConnector implements DataPointListener { } + /** + * Callback for the update of a dataPoint + * @param dp dataPoint updated + */ @Override public void onNewValue(DataPoint dp) { pushToWeb(dp); diff --git a/src/test/java/Web.java b/src/test/java/Web.java index ff0c5e6..1c25c31 100644 --- a/src/test/java/Web.java +++ b/src/test/java/Web.java @@ -5,15 +5,27 @@ import ch.hevs.isi.core.FloatDataPoint; import ch.hevs.isi.db.DatabaseConnector; import ch.hevs.isi.web.WebConnector; +/** + * This class is used to test the web interface. + * It creates a web server on localhost:8888 and sends data to it. + * - Values are sent every 2 seconds + * - A variation of the values is simulated (see the code) + * - Some values are set to the same value as the remote values (see the code) + */ public class Web { public static void main(String[] args) { + // set erase on true MinecraftController.ERASE_PREVIOUS_DATA_INB_DB = true; - FloatDataPoint clock = new FloatDataPoint("CLOAK_FLOAT", false); + + // create data points for the web + FloatDataPoint clock = new FloatDataPoint("CLOCK_FLOAT", false); FloatDataPoint gridVoltage = new FloatDataPoint("GRID_U_FLOAT", true); + // initialize the database and the web DatabaseConnector.getMySelf().initialize(null); WebConnector.getMySelf().initialize("localhost", 8888); + // initialize time to 0 and set the value float time = 0f; clock.setValue(time); @@ -21,23 +33,34 @@ public class Web { while (WebConnector.getMySelf().wss != null) { try { + + // wait 2 seconds Thread.sleep(2000); if(WebConnector.getMySelf().wss.getConnections().size() > 0){ + + // Set the REMOTE_FACTORY_SP value to FACTORY_ST FloatDataPoint rfSP = (FloatDataPoint) DataPoint.getDataPointOnListFromLabel("REMOTE_FACTORY_SP"); if(rfSP != null) new FloatDataPoint("FACTORY_ST", true).setValue(rfSP.getValue()); + // Set the REMOTE_COAL_SP value to COAL_ST FloatDataPoint cfSP = (FloatDataPoint) DataPoint.getDataPointOnListFromLabel("REMOTE_COAL_SP"); if(cfSP != null) new FloatDataPoint("COAL_ST", true).setValue(cfSP.getValue()); + // Set the REMOTE_SOLAR_SP value to SOLAR_ST BooleanDataPoint solar = (BooleanDataPoint) DataPoint.getDataPointOnListFromLabel("REMOTE_SOLAR_SW"); if(solar != null) new BooleanDataPoint("SOLAR_CONNECT_ST", true).setValue(solar.getValue()); + // Set the REMOTE_WIND_SP value to WIND_ST BooleanDataPoint wind = (BooleanDataPoint) DataPoint.getDataPointOnListFromLabel("REMOTE_WIND_SW"); if(wind != null) new BooleanDataPoint("WIND_CONNECT_ST", true).setValue(wind.getValue()); + + // increment time and set the value time += 0.1f; clock.setValue(time); + + // set the grid voltage value with a modulated value gridVoltage.setValue(750 + (100*time)%100); } } catch (InterruptedException e) {