diff options
| author | ShazaAhmed <ShazaMamdouh@aucegypt.edu> | 2024-11-28 04:35:42 -0500 |
|---|---|---|
| committer | ShazaAhmed <ShazaMamdouh@aucegypt.edu> | 2024-11-28 04:35:42 -0500 |
| commit | fe384df239711ad0990e39d585e64292816bf24f (patch) | |
| tree | a16d0137d60d813c6ff06f2029ad8a935d2a804e /src/main/java/derms/frontend | |
| parent | b7dabf61e2f4deea23c9a4cbf33da419d031c5e8 (diff) | |
| download | soen423-fe384df239711ad0990e39d585e64292816bf24f.zip | |
replicas
Diffstat (limited to 'src/main/java/derms/frontend')
| -rw-r--r-- | src/main/java/derms/frontend/DERMSServerImpl.java | 137 | ||||
| -rw-r--r-- | src/main/java/derms/frontend/FE.java | 20 | ||||
| -rw-r--r-- | src/main/java/derms/frontend/FEInterface.java | 9 | ||||
| -rw-r--r-- | src/main/java/derms/frontend/MyRequest.java | 131 | ||||
| -rw-r--r-- | src/main/java/derms/frontend/RmResponse.java | 147 |
5 files changed, 85 insertions, 359 deletions
diff --git a/src/main/java/derms/frontend/DERMSServerImpl.java b/src/main/java/derms/frontend/DERMSServerImpl.java index 67dd8c5..4008278 100644 --- a/src/main/java/derms/frontend/DERMSServerImpl.java +++ b/src/main/java/derms/frontend/DERMSServerImpl.java @@ -21,7 +21,8 @@ import javax.jws.soap.SOAPBinding.Style; //import constants.PortConstants; //import validation.ValidationService; //import interfaces.DERMSInterface; - +import derms.Request; +import derms.Response; @WebService(endpointInterface = "derms.frontend.DERMSInterface") public class DERMSServerImpl implements DERMSInterface { @@ -38,7 +39,7 @@ public class DERMSServerImpl implements DERMSInterface { private long startTime; private CountDownLatch latch; private FEInterface inter = null; - private final List<RmResponse> responses = new ArrayList<>(); + private final List<Response> responses = new ArrayList<>(); public DERMSServerImpl() { super(); @@ -51,72 +52,72 @@ public class DERMSServerImpl implements DERMSInterface { @Override public synchronized String addResource(String resourceID, String resourceName, int duration) { - MyRequest myRequest = new MyRequest("addResource", ""); - myRequest.setResourceID(resourceID); - myRequest.setResourceType(resourceName); - myRequest.setDuration(duration); - myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest)); - System.out.println("FE Implementation:addEvent>>>" + myRequest.toString()); - return validateResponses(myRequest); + Request request = new Request("addResource", ""); + request.setResourceID(resourceID); + request.setResourceType(resourceName); + request.setDuration(duration); + request.setSequenceNumber(sendUdpUnicastToSequencer(request)); + System.out.println("FE Implementation:addEvent>>>" + request.toString()); + return validateResponses(request); } @Override public synchronized String removeResource(String resourceID, int duration) { - MyRequest myRequest = new MyRequest("removeResource", ""); - myRequest.setResourceID(resourceID); - myRequest.setDuration(duration); - myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest)); - System.out.println("FE Implementation:removeEvent>>>" + myRequest.toString()); - return validateResponses(myRequest); + Request request = new Request("removeResource", ""); + request.setResourceID(resourceID); + request.setDuration(duration); + request.setSequenceNumber(sendUdpUnicastToSequencer(request)); + System.out.println("FE Implementation:removeEvent>>>" + request.toString()); + return validateResponses(request); } @Override public synchronized String listResourceAvailability(String resourceName) { - MyRequest myRequest = new MyRequest("listEventAvailability", ""); - myRequest.setResourceType(resourceName); - myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest)); - System.out.println("FE Implementation:listEventAvailability>>>" + myRequest.toString()); - return validateResponses(myRequest); + Request request = new Request("listEventAvailability", ""); + request.setResourceType(resourceName); + request.setSequenceNumber(sendUdpUnicastToSequencer(request)); + System.out.println("FE Implementation:listEventAvailability>>>" + request.toString()); + return validateResponses(request); } @Override public synchronized String requestResource(String coordinatorID, String resourceID, int duration) { - MyRequest myRequest = new MyRequest("requestResource", coordinatorID); - myRequest.setResourceID(resourceID); - myRequest.setDuration(duration); - myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest)); - System.out.println("FE Implementation:bookEvent>>>" + myRequest.toString()); - return validateResponses(myRequest); + Request request = new Request("requestResource", coordinatorID); + request.setResourceID(resourceID); + request.setDuration(duration); + request.setSequenceNumber(sendUdpUnicastToSequencer(request)); + System.out.println("FE Implementation:bookEvent>>>" + request.toString()); + return validateResponses(request); } @Override public synchronized String findResource(String coordinatorID, String resourceName) { - MyRequest myRequest = new MyRequest("findResource", coordinatorID); - myRequest.setResourceType(resourceName); - myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest)); - System.out.println("FE Implementation:bookEvent>>>" + myRequest.toString()); - return validateResponses(myRequest); + Request request = new Request("findResource", coordinatorID); + request.setResourceType(resourceName); + request.setSequenceNumber(sendUdpUnicastToSequencer(request)); + System.out.println("FE Implementation:bookEvent>>>" + request.toString()); + return validateResponses(request); } @Override public synchronized String returnResource(String coordinatorID, String resourceID) { - MyRequest myRequest = new MyRequest("findResource", coordinatorID); - myRequest.setResourceID(resourceID); - myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest)); - System.out.println("FE Implementation:bookEvent>>>" + myRequest.toString()); - return validateResponses(myRequest); + Request request = new Request("findResource", coordinatorID); + request.setResourceID(resourceID); + request.setSequenceNumber(sendUdpUnicastToSequencer(request)); + System.out.println("FE Implementation:bookEvent>>>" + request.toString()); + return validateResponses(request); } @Override public synchronized String swapResource(String coordinatorID, String oldResourceID, String oldResourceType, String newResourceID, String newResourceType) { - MyRequest myRequest = new MyRequest("swapResource", coordinatorID); - myRequest.setResourceID(newResourceID); - myRequest.setResourceType(newResourceType); - myRequest.setOldResourceID(oldResourceID); - myRequest.setOldResourceType(oldResourceType); - myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest)); - System.out.println("FE Implementation:swapEvent>>>" + myRequest.toString()); - return validateResponses(myRequest); + Request request = new Request("swapResource", coordinatorID); + request.setResourceID(newResourceID); + request.setResourceType(newResourceType); + request.setOldResourceID(oldResourceID); + request.setOldResourceType(oldResourceType); + request.setSequenceNumber(sendUdpUnicastToSequencer(request)); + System.out.println("FE Implementation:swapEvent>>>" + request.toString()); + return validateResponses(request); } public void waitForResponse() { @@ -128,26 +129,26 @@ public class DERMSServerImpl implements DERMSInterface { } } catch (InterruptedException e) { e.printStackTrace(); -// inter.sendRequestToSequencer(myRequest); +// inter.sendRequestToSequencer(request); } // check result and react correspondingly } - private String validateResponses(MyRequest myRequest) { + private String validateResponses(Request request) { String resp; switch ((int) latch.getCount()) { case 0: case 1: case 2: case 3: - resp = findMajorityResponse(myRequest); + resp = findMajorityResponse(request); break; case 4: resp = "Fail: No response from any server"; System.out.println(resp); - if (myRequest.haveRetries()) { - myRequest.countRetry(); - resp = retryRequest(myRequest); + if (request.haveRetries()) { + request.countRetry(); + resp = retryRequest(request); } rmDown(1); rmDown(2); @@ -155,20 +156,20 @@ public class DERMSServerImpl implements DERMSInterface { rmDown(4); break; default: - resp = "Fail: " + myRequest.noRequestSendError(); + resp = "Fail: " + request.noRequestSendError(); break; } System.out.println("FE Implementation:validateResponses>>>Responses remain:" + latch.getCount() + " >>>Response to be sent to client " + resp); return resp; } - private String findMajorityResponse(MyRequest myRequest) { - RmResponse res1 = null; - RmResponse res2 = null; - RmResponse res3 = null; - RmResponse res4 = null; - for (RmResponse response :responses) { - if (response.getSequenceID() == myRequest.getSequenceNumber()) { + private String findMajorityResponse(Request request) { + Response res1 = null; + Response res2 = null; + Response res3 = null; + Response res4 = null; + for (Response response :responses) { + if (response.getSequenceID() == request.getSequenceNumber()) { switch (response.getRmNumber()) { case 1: res1 = response; @@ -197,12 +198,12 @@ public class DERMSServerImpl implements DERMSInterface { if (res4 == null) rmDown(4); // Majority voting logic - List<RmResponse> validResponses = Arrays.asList(res1, res2, res3, res4).stream() + List<Response> validResponses = Arrays.asList(res1, res2, res3, res4).stream() .filter(Objects::nonNull) .collect(Collectors.toList()); Map<String, Long> responseCounts = validResponses.stream() - .collect(Collectors.groupingBy(RmResponse::getResponse, Collectors.counting())); + .collect(Collectors.groupingBy(Response::getResponse, Collectors.counting())); // Find the response with the highest count Optional<Map.Entry<String, Long>> majorityEntry = responseCounts.entrySet().stream() @@ -319,7 +320,7 @@ public class DERMSServerImpl implements DERMSInterface { System.out.println("FE Implementation:notifyOKCommandReceived>>>Response Received: Remaining responses" + latch.getCount()); } - public void addReceivedResponse(RmResponse res) { + public void addReceivedResponse(Response res) { long endTime = System.nanoTime(); responseTime = (endTime - startTime) / 1000000; System.out.println("Current Response time is: " + responseTime); @@ -327,22 +328,22 @@ public class DERMSServerImpl implements DERMSInterface { notifyOKCommandReceived(); } - private int sendUdpUnicastToSequencer(MyRequest myRequest) { + private int sendUdpUnicastToSequencer(Request request) { startTime = System.nanoTime(); - int sequenceNumber = inter.sendRequestToSequencer(myRequest); - myRequest.setSequenceNumber(sequenceNumber); + int sequenceNumber = inter.sendRequestToSequencer(request); + request.setSequenceNumber(sequenceNumber); latch = new CountDownLatch(4); waitForResponse(); return sequenceNumber; } - private String retryRequest(MyRequest myRequest) { - System.out.println("FE Implementation:retryRequest>>>" + myRequest.toString()); + private String retryRequest(Request request) { + System.out.println("FE Implementation:retryRequest>>>" + request.toString()); startTime = System.nanoTime(); - inter.retryRequest(myRequest); + inter.retryRequest(request); latch = new CountDownLatch(4); waitForResponse(); - return validateResponses(myRequest); + return validateResponses(request); } diff --git a/src/main/java/derms/frontend/FE.java b/src/main/java/derms/frontend/FE.java index e49dd61..decea07 100644 --- a/src/main/java/derms/frontend/FE.java +++ b/src/main/java/derms/frontend/FE.java @@ -7,6 +7,8 @@ import java.net.InetAddress; import java.net.SocketException; import javax.xml.ws.Endpoint; +import derms.Request; +import derms.Response; //import constants.Constants; @@ -20,8 +22,8 @@ public class FE { 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) { @@ -30,7 +32,7 @@ public class FE { @Override public void informRmHasBug(int RmNumber) { // String errorMessage = new MyRequest(RmNumber, "1").toString(); - MyRequest errorMessage = new MyRequest(RmNumber, "1"); + Request errorMessage = new Request(RmNumber, "1"); System.out.println("Rm:" + RmNumber + "has bug"); // sendMulticastFaultMessageToRms(errorMessage); sendUnicastToSequencer(errorMessage); @@ -39,21 +41,21 @@ public class FE { @Override public void informRmIsDown(int RmNumber) { // String errorMessage = new MyRequest(RmNumber, "2").toString(); - MyRequest errorMessage = new MyRequest(RmNumber, "2"); + Request errorMessage = new Request(RmNumber, "2"); System.out.println("Rm:" + RmNumber + "is down"); // sendMulticastFaultMessageToRms(errorMessage); sendUnicastToSequencer(errorMessage); } @Override - public int sendRequestToSequencer(MyRequest myRequest) { + public int sendRequestToSequencer(Request myRequest) { return sendUnicastToSequencer(myRequest); } @Override - public void retryRequest(MyRequest myRequest) { + public void retryRequest(Request request) { System.out.println("No response from all Rms, Retrying request..."); - sendUnicastToSequencer(myRequest); + sendUnicastToSequencer(request); } }; DERMSServerImpl servant = new DERMSServerImpl(inter); @@ -75,7 +77,7 @@ public class FE { } - private static int sendUnicastToSequencer(MyRequest requestFromClient) { + private static int sendUnicastToSequencer(Request requestFromClient) { DatagramSocket aSocket = null; String dataFromClient = requestFromClient.toString(); System.out.println("FE:sendUnicastToSequencer>>>" + dataFromClient); @@ -154,7 +156,7 @@ public class FE { String sentence = new String(response.getData(), 0, response.getLength()).trim(); System.out.println("FE:Response received from Rm>>>" + sentence); - RmResponse rmResponse = new RmResponse(sentence); + Response rmResponse = new Response(sentence); // String[] parts = sentence.split(";"); System.out.println("Adding response to FrontEndImplementation:"); diff --git a/src/main/java/derms/frontend/FEInterface.java b/src/main/java/derms/frontend/FEInterface.java index 5a4e6f1..292f960 100644 --- a/src/main/java/derms/frontend/FEInterface.java +++ b/src/main/java/derms/frontend/FEInterface.java @@ -1,11 +1,12 @@ package derms.frontend; +import derms.Request; public interface FEInterface { - void informRmHasBug(int RmNumber); + void informRmHasBug(int replicaId); - void informRmIsDown(int RmNumber); + void informRmIsDown(int replicaId); - int sendRequestToSequencer(MyRequest myRequest); + int sendRequestToSequencer(Request request); - void retryRequest(MyRequest myRequest); + void retryRequest(Request request); }
\ No newline at end of file diff --git a/src/main/java/derms/frontend/MyRequest.java b/src/main/java/derms/frontend/MyRequest.java deleted file mode 100644 index b0f2758..0000000 --- a/src/main/java/derms/frontend/MyRequest.java +++ /dev/null @@ -1,131 +0,0 @@ -package derms.frontend; - -public class MyRequest { - private String function = ""; - private String clientID = ""; - private String resourceType = ""; - private String OldResourceType = ""; - private String resourceID = ""; - private String OldResourceID = ""; - private String FeIpAddress = "FE.FE_IP_Address"; - private int duration = 0; - private int sequenceNumber = 0; - private String MessageType = "00"; - private int retryCount = 1; - - public MyRequest(String function, String clientID) { - setFunction(function); - setClientID(clientID); - } - - public MyRequest(int rmNumber, String bugType) { - setMessageType(bugType + rmNumber); - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getClientID() { - return clientID; - } - - public void setClientID(String clientID) { - this.clientID = clientID; - } - - public String getResourceType() { - return resourceType; - } - - public void setResourceType(String resourceType) { - this.resourceType = resourceType; - } - - public String getOldResourceType() { - return OldResourceType; - } - - public void setOldResourceType(String OldResourceType) { - this.OldResourceType = OldResourceType; - } - - public String getResourceID() { - return resourceID; - } - - public void setResourceID(String resourceID) { - this.resourceID = resourceID; - } - - public String getOldResourceID() { - return OldResourceID; - } - - public void setOldResourceID(String OldResourceID) { - this.OldResourceID = OldResourceID; - } - - public int getDuration() { - return duration; - } - - public void setDuration(int duration) { - this.duration = duration; - } - - public String noRequestSendError() { - return "request: " + getFunction() + " from " + getClientID() + " not sent"; - } - - public int getSequenceNumber() { - return sequenceNumber; - } - - public void setSequenceNumber(int sequenceNumber) { - this.sequenceNumber = sequenceNumber; - } - - public String getFeIpAddress() { - return FeIpAddress; - } - - public void setFeIpAddress(String feIpAddress) { - FeIpAddress = feIpAddress; - } - - public String getMessageType() { - return MessageType; - } - - public void setMessageType(String messageType) { - MessageType = messageType; - } - - public boolean haveRetries() { - return retryCount > 0; - } - - public void countRetry() { - retryCount--; - } - - //Message Format: Sequence_id;FrontIpAddress;Message_Type;function(addResource,...);userID; newEventID;newEventType; oldEventID; oldEventType;bookingCapacity - @Override - public String toString() { - return getSequenceNumber() + ";" + - getFeIpAddress().toUpperCase() + ";" + - getMessageType().toUpperCase() + ";" + - getFunction().toUpperCase() + ";" + - getClientID().toUpperCase() + ";" + - getResourceID().toUpperCase() + ";" + - getResourceType().toUpperCase() + ";" + - getOldResourceID().toUpperCase() + ";" + - getOldResourceType().toUpperCase() + ";" + - getDuration(); - } -} diff --git a/src/main/java/derms/frontend/RmResponse.java b/src/main/java/derms/frontend/RmResponse.java deleted file mode 100644 index f693375..0000000 --- a/src/main/java/derms/frontend/RmResponse.java +++ /dev/null @@ -1,147 +0,0 @@ -package derms.frontend; - -public class RmResponse { - private int sequenceID = 0; - private String response = ""; - private int rmNumber = 0; - private String function = ""; - private String userID = ""; - private String newResourceID = ""; - private String newResourceType = ""; - private String oldResourceID = ""; - private String oldResourceType = ""; - private int duration = 0; - private String udpMessage = ""; - private boolean isSuccess = false; - - public RmResponse(String udpMessage) { - setUdpMessage(udpMessage.trim()); - String[] messageParts = getUdpMessage().split(";"); - setSequenceID(Integer.parseInt(messageParts[0])); - setResponse(messageParts[1].trim()); - setRmNumber(messageParts[2]); - setFunction(messageParts[3]); - setUserID(messageParts[4]); - setNewResourceID(messageParts[5]); - setNewResourceType(messageParts[6]); - setOldResourceID(messageParts[7]); - setOldResourceType(messageParts[8]); - setDuration(Integer.parseInt(messageParts[9])); - } - - public int getSequenceID() { - return sequenceID; - } - - public void setSequenceID(int sequenceID) { - this.sequenceID = sequenceID; - } - - public String getResponse() { - return response; - } - - public void setResponse(String response) { - isSuccess = response.contains("Success:"); - this.response = response; - } - - public int getRmNumber() { - return rmNumber; - } - - public void setRmNumber(String rmNumber) { - if (rmNumber.equalsIgnoreCase("RM1")) { - this.rmNumber = 1; - } else if (rmNumber.equalsIgnoreCase("RM2")) { - this.rmNumber = 2; - } else if (rmNumber.equalsIgnoreCase("RM3")) { - this.rmNumber = 3; - } else { - this.rmNumber = 0; - } - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getUserID() { - return userID; - } - - public void setUserID(String userID) { - this.userID = userID; - } - - public String getNewResourceID() { - return newResourceID; - } - - public void setNewResourceID(String newEventID) { - this.newResourceID = newEventID; - } - - public String getNewResourceType() { - return newResourceType; - } - - public void setNewResourceType(String newEventType) { - this.newResourceType = newEventType; - } - - public String getOldResourceID() { - return oldResourceID; - } - - public void setOldResourceID(String oldEventID) { - this.oldResourceID = oldEventID; - } - - public String getOldResourceType() { - return oldResourceType; - } - - public void setOldResourceType(String oldEventType) { - this.oldResourceType = oldEventType; - } - - public int getDuration() { - return duration; - } - - public void setDuration(int bookingCapacity) { - this.duration = bookingCapacity; - } - - public String getUdpMessage() { - return udpMessage; - } - - public void setUdpMessage(String udpMessage) { - this.udpMessage = udpMessage; - } - - public boolean isSuccess() { - return isSuccess; - } - - @Override - public boolean equals(Object obj) { - if (obj != null) { - if (obj instanceof RmResponse) { - RmResponse obj1 = (RmResponse) obj; - return obj1.getFunction().equalsIgnoreCase(this.getFunction()) - && obj1.getSequenceID() == this.getSequenceID() - && obj1.getUserID().equalsIgnoreCase(this.getUserID()) - && obj1.isSuccess() == this.isSuccess(); -// && obj1.getResponse().equalsIgnoreCase(this.getResponse()); - } - } - return false; - } -} |