diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-26 15:52:51 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-26 15:52:51 -0500 |
| commit | ab118d47c1c371e5d30f576216a8f347bd746974 (patch) | |
| tree | eb250f7f28a3a3b7d30a53188fa60f9a5ef80c6f /src/main/java/derms/frontend/FE.java | |
| parent | e70b94657e27ac898953643b771ba48d48740b26 (diff) | |
| download | soen423-ab118d47c1c371e5d30f576216a8f347bd746974.zip | |
frontend
Diffstat (limited to 'src/main/java/derms/frontend/FE.java')
| -rw-r--r-- | src/main/java/derms/frontend/FE.java | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/src/main/java/derms/frontend/FE.java b/src/main/java/derms/frontend/FE.java new file mode 100644 index 0000000..e49dd61 --- /dev/null +++ b/src/main/java/derms/frontend/FE.java @@ -0,0 +1,176 @@ +package derms.frontend; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; + +import javax.xml.ws.Endpoint; + +//import constants.Constants; + +public class FE { + private static final int sequencerPort = 1333; + private static final String sequencerIP = "192.168.2.17"; +// private static final String sequencerIP = "localhost"; + private static final String RM_Multicast_group_address = "230.1.1.10"; + private static final int FE_SQ_PORT = 1414; + private static final int FE_PORT = 1999; + private static final int RM_Multicast_Port = 1234; + public static String FE_Address = "http://localhost:8067/service/FE"; + private static final String FE_IP_Address = ""; + + +// public static String FE_IP_Address = "localhost"; + + public static void main(String[] args) { + try { + FEInterface inter = new FEInterface() { + @Override + public void informRmHasBug(int RmNumber) { +// String errorMessage = new MyRequest(RmNumber, "1").toString(); + MyRequest errorMessage = new MyRequest(RmNumber, "1"); + System.out.println("Rm:" + RmNumber + "has bug"); +// sendMulticastFaultMessageToRms(errorMessage); + sendUnicastToSequencer(errorMessage); + } + + @Override + public void informRmIsDown(int RmNumber) { +// String errorMessage = new MyRequest(RmNumber, "2").toString(); + MyRequest errorMessage = new MyRequest(RmNumber, "2"); + System.out.println("Rm:" + RmNumber + "is down"); +// sendMulticastFaultMessageToRms(errorMessage); + sendUnicastToSequencer(errorMessage); + } + + @Override + public int sendRequestToSequencer(MyRequest myRequest) { + return sendUnicastToSequencer(myRequest); + } + + @Override + public void retryRequest(MyRequest myRequest) { + System.out.println("No response from all Rms, Retrying request..."); + sendUnicastToSequencer(myRequest); + } + }; + DERMSServerImpl servant = new DERMSServerImpl(inter); + Endpoint endpoint = Endpoint.publish(FE_Address, servant); + Runnable task = () -> { + listenForUDPResponses(servant); + }; + Thread thread = new Thread(task); + thread.start(); + + } catch (Exception e) { +// System.err.println("Exception: " + e); + e.printStackTrace(System.out); +// Logger.serverLog(serverID, "Exception: " + e); + } + +// System.out.println("FrontEnd Server Shutting down"); +// Logger.serverLog(serverID, " Server Shutting down"); + + } + + private static int sendUnicastToSequencer(MyRequest requestFromClient) { + DatagramSocket aSocket = null; + String dataFromClient = requestFromClient.toString(); + System.out.println("FE:sendUnicastToSequencer>>>" + dataFromClient); + int sequenceID = 0; + try { + aSocket = new DatagramSocket(FE_SQ_PORT); + byte[] message = dataFromClient.getBytes(); + InetAddress aHost = InetAddress.getByName(sequencerIP); + DatagramPacket requestToSequencer = new DatagramPacket(message, dataFromClient.length(), aHost, sequencerPort); + + aSocket.send(requestToSequencer); + + aSocket.setSoTimeout(1000); + // Set up an UPD packet for recieving + byte[] buffer = new byte[1000]; + DatagramPacket response = new DatagramPacket(buffer, buffer.length); + // Try to receive the response from the ping + aSocket.receive(response); + String sentence = new String(response.getData(), 0, + response.getLength()); + System.out.println("FE:sendUnicastToSequencer/ResponseFromSequencer>>>" + sentence); + sequenceID = Integer.parseInt(sentence.trim()); + System.out.println("FE:sendUnicastToSequencer/ResponseFromSequencer>>>SequenceID:" + sequenceID); + } catch (SocketException e) { + System.out.println("Failed: " + requestFromClient.noRequestSendError()); + System.out.println("Socket: " + e.getMessage()); + } catch (IOException e) { + System.out.println("Failed: " + requestFromClient.noRequestSendError()); + e.printStackTrace(); + System.out.println("IO: " + e.getMessage()); + } finally { + if (aSocket != null) + aSocket.close(); + } + return sequenceID; + } + + public static void sendMulticastFaultMessageToRms(String errorMessage) { + DatagramSocket aSocket = null; + try { + aSocket = new DatagramSocket(); + byte[] messages = errorMessage.getBytes(); + InetAddress aHost = InetAddress.getByName(RM_Multicast_group_address); + + DatagramPacket request = new DatagramPacket(messages, messages.length, aHost, RM_Multicast_Port); + System.out.println("FE:sendMulticastFaultMessageToRms>>>" + errorMessage); + aSocket.send(request); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + private static void listenForUDPResponses(DERMSServerImpl servant) { + DatagramSocket aSocket = null; + try { + +// aSocket = new MulticastSocket(1413); +// InetAddress[] allAddresses = Inet4Address.getAllByName("SepJ-ROG"); + InetAddress desiredAddress = InetAddress.getByName(FE_IP_Address); +// //In order to find the desired Ip to be routed by other modules (WiFi adapter) +// for (InetAddress address : +// allAddresses) { +// if (address.getHostAddress().startsWith("192.168.2")) { +// desiredAddress = address; +// } +// } +// aSocket.joinGroup(InetAddress.getByName("230.1.1.5")); + aSocket = new DatagramSocket(FE_PORT, desiredAddress); + byte[] buffer = new byte[1000]; + System.out.println("FE Server Started on " + desiredAddress + ":" + FE_PORT + "............"); + + while (true) { + DatagramPacket response = new DatagramPacket(buffer, buffer.length); + aSocket.receive(response); + String sentence = new String(response.getData(), 0, + response.getLength()).trim(); + System.out.println("FE:Response received from Rm>>>" + sentence); + RmResponse rmResponse = new RmResponse(sentence); +// String[] parts = sentence.split(";"); + + System.out.println("Adding response to FrontEndImplementation:"); + servant.addReceivedResponse(rmResponse); +// DatagramPacket reply = new DatagramPacket(response.getData(), response.getLength(), response.getAddress(), +// response.getPort()); +// aSocket.send(reply); + } + + } catch (SocketException e) { + System.out.println("Socket: " + e.getMessage()); + } catch (IOException e) { + System.out.println("IO: " + e.getMessage()); + } finally { +// if (aSocket != null) +// aSocket.close(); + } + } +}
\ No newline at end of file |