summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShazaAli <shazamamdouh@aucegypt.edu>2024-12-03 09:39:18 -0500
committerShazaAli <shazamamdouh@aucegypt.edu>2024-12-03 09:39:18 -0500
commit55be062da68cd74214e24801adfe86244d608c3e (patch)
tree3718d356d1050279bc13338909d8f4585380014b /src
parent79837dd95a90891943659194c43f732a364ad9ff (diff)
downloadsoen423-55be062da68cd74214e24801adfe86244d608c3e.zip
Replica 1 Failing SHE MTL QUE Comm
Diffstat (limited to 'src')
-rw-r--r--src/main/java/derms/replica1/DERMSServer.java23
-rw-r--r--src/main/java/derms/replica1/DERMSServerPublisher.java4
-rw-r--r--src/main/java/derms/replica1/Replica1.java36
3 files changed, 41 insertions, 22 deletions
diff --git a/src/main/java/derms/replica1/DERMSServer.java b/src/main/java/derms/replica1/DERMSServer.java
index 72849a1..585a946 100644
--- a/src/main/java/derms/replica1/DERMSServer.java
+++ b/src/main/java/derms/replica1/DERMSServer.java
@@ -22,17 +22,22 @@ public class DERMSServer implements DERMSInterface {
private static List<String> cities = Arrays.asList("MTL", "QUE", "SHE");
private static List<String> resourceNames = Arrays.asList("AMBULANCE", "FIRETRUCK", "PERSONNEL");
+ private final Random r = new Random();
+ private final Map<String, Integer> portsMap = new HashMap<String, Integer>() {{
+ put("MTL", r.nextInt(60000-8000) + 8000);
+ put("QUE", r.nextInt(60000-8000) + 8000);
+ put("SHE", r.nextInt(60000-8000) + 8000);
+ }};
public DERMSServer() {
// Default constructor to support JAX-WS
- super();
- this.serverID = "MTL";
- resources = new HashMap<>();
- new Thread(this::listenForMessages).start();
+// super();
+// this.serverID = "MTL";
+// resources = new HashMap<>();
+// new Thread(this::listenForMessages).start();
}
public DERMSServer(String serverID) throws InterruptedException {
- super();
this.serverID = serverID;
resources = new HashMap<>();
new Thread(this::listenForMessages).start();
@@ -40,7 +45,7 @@ public class DERMSServer implements DERMSInterface {
}
private void listenForMessages() {
- try (DatagramSocket socket = new DatagramSocket()) {
+ try (DatagramSocket socket = new DatagramSocket(getServerPortsFromCentralRepo().get(serverID))) {
this.serverPort.set(socket.getLocalPort());
byte[] buffer = new byte[1024];
@@ -216,11 +221,7 @@ public class DERMSServer implements DERMSInterface {
private Map<String, Integer> getServerPortsFromCentralRepo() {
// Mocking response as web services since no derms.CentralRepoInterface.
- return new HashMap<String, Integer>() {{
- put("MTL", 4321);
- put("QUE", 4322);
- put("SHE", 4323);
- }};
+ return new HashMap<>(portsMap);
}
@Override
diff --git a/src/main/java/derms/replica1/DERMSServerPublisher.java b/src/main/java/derms/replica1/DERMSServerPublisher.java
index df175b6..3edf16c 100644
--- a/src/main/java/derms/replica1/DERMSServerPublisher.java
+++ b/src/main/java/derms/replica1/DERMSServerPublisher.java
@@ -6,8 +6,8 @@ public class DERMSServerPublisher {
public static void main(String[] args) {
try {
Endpoint.publish("http://localhost:8387/ws/derms", new DERMSServer("MTL"));
-// Endpoint.publish("http://localhost:8081/ws/derms", new DERMSServer("QUE"));
-// Endpoint.publish("http://localhost:8082/ws/derms", new DERMSServer("SHE"));
+ Endpoint.publish("http://localhost:8081/ws/derms", new DERMSServer("QUE"));
+ Endpoint.publish("http://localhost:8082/ws/derms", new DERMSServer("SHE"));
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
diff --git a/src/main/java/derms/replica1/Replica1.java b/src/main/java/derms/replica1/Replica1.java
index ef45e80..a59ed4c 100644
--- a/src/main/java/derms/replica1/Replica1.java
+++ b/src/main/java/derms/replica1/Replica1.java
@@ -25,6 +25,7 @@ public class Replica1 implements Replica {
private final String responderClientID = "MTL";
private final String coordinatorClientID = "MTLC1111";
private final ReplicaManager replicaManager;
+ private DERMSServer server;
public Replica1(ReplicaManager replicaManager) {
this.replicaManager = replicaManager;
@@ -50,7 +51,21 @@ public class Replica1 implements Replica {
@Override
public void startProcess() {
- pool.execute(DERMSServer::new);
+ try {
+ server = new DERMSServer("MTL");
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ try {
+ new DERMSServer("SHE");
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ try {
+ new DERMSServer("QUE");
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
alive = true;
log.info(getClass().getSimpleName() + " started.");
log.config("Local address is "+localAddr.toString());
@@ -61,28 +76,30 @@ public class Replica1 implements Replica {
log.info(request.toString());
String status = "";
+ boolean isSuccess = true;
try {
switch (request.getFunction()) {
case "addResource":
- status = responderClient.addResource(request.getResourceID(), request.getResourceType(), request.getDuration());
+ status = server.addResource(request.getResourceID(), request.getResourceType(), request.getDuration());
break;
case "removeResource":
- status = responderClient.removeResource(request.getResourceID(), request.getDuration());
+ status = server.removeResource(request.getResourceID(), request.getDuration());
break;
case "listResourceAvailability":
- status = String.join(",", responderClient.listResourceAvailability(request.getResourceType()));
+// status = String.join(",", responderClient.listResourceAvailability(request.getResourceType()));
+ status = String.join(",", server.listResourceAvailability(request.getResourceType()));
break;
case "requestResource":
- status = coordinatorClient.requestResource(coordinatorClientID, request.getResourceID(), request.getDuration());
+ status = server.requestResource(coordinatorClientID, request.getResourceID(), request.getDuration());
break;
case "findResource":
- status = String.join(",", coordinatorClient.findResource(coordinatorClientID, request.getResourceType()));
+ status = String.join(",", server.findResource(coordinatorClientID, request.getResourceType()));
break;
case "returnResource":
- status = coordinatorClient.returnResource(coordinatorClientID, request.getResourceID());
+ status = server.returnResource(coordinatorClientID, request.getResourceID());
break;
case "swapResource":
- status = coordinatorClient.swapResource(coordinatorClientID, request.getOldResourceID(), request.getOldResourceType(), request.getResourceID(), request.getResourceType());
+ status = server.swapResource(coordinatorClientID, request.getOldResourceID(), request.getOldResourceType(), request.getResourceID(), request.getResourceType());
break;
default:
status = "Failure: unknown function '" + request.getFunction() + "'";
@@ -90,9 +107,10 @@ public class Replica1 implements Replica {
} catch (Exception e) {
log.warning(e.getMessage());
status = "Failure: " + request.getFunction() + ": " + e.getMessage();
+ isSuccess = false;
}
- Response response = new Response(request, replicaManager.getReplicaId(), status, false); // TODO: isSuccess flag
+ Response response = new Response(request, replicaManager.getReplicaId(), status, isSuccess); // TODO: isSuccess flag
log.info("Processed request " + request + "; response: " + response);
replicaManager.sendResponseToFE(response);
}