summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBMatajsz <90217645+BMatajsz@users.noreply.github.com>2024-12-02 17:25:26 -0500
committerBMatajsz <90217645+BMatajsz@users.noreply.github.com>2024-12-02 17:25:26 -0500
commit06b85e583dd9242855b2ca9173a580c766733a25 (patch)
tree3328857a43dae98d2d58157e5a01868f2abb8e7a /src
parent6767d5b22d105cdbae568b4734c6835f2828118d (diff)
downloadsoen423-06b85e583dd9242855b2ca9173a580c766733a25.zip
Added Replica4
Diffstat (limited to 'src')
-rw-r--r--src/main/java/derms/Replica3pkg/CoordinatorClient.java155
-rw-r--r--src/main/java/derms/Replica3pkg/ResponderClient.java154
-rw-r--r--src/main/java/derms/Replica4.java (renamed from src/main/java/derms/Replica3.java)52
-rw-r--r--src/main/java/derms/Replica4pkg/DERMSInterface.java (renamed from src/main/java/derms/Replica3pkg/DERMSInterface.java)2
-rw-r--r--src/main/java/derms/Replica4pkg/RemoteServer.java (renamed from src/main/java/derms/Replica3pkg/RemoteServer.java)15
-rw-r--r--src/main/java/derms/Replica4pkg/Resource.java (renamed from src/main/java/derms/Replica3pkg/Resource.java)2
-rw-r--r--src/main/java/derms/Replica4pkg/Server.java (renamed from src/main/java/derms/Replica3pkg/Server.java)4
7 files changed, 47 insertions, 337 deletions
diff --git a/src/main/java/derms/Replica3pkg/CoordinatorClient.java b/src/main/java/derms/Replica3pkg/CoordinatorClient.java
deleted file mode 100644
index 9572099..0000000
--- a/src/main/java/derms/Replica3pkg/CoordinatorClient.java
+++ /dev/null
@@ -1,155 +0,0 @@
-//CoordinatorCLient.java
-package derms.Replica3pkg;
-
-import javax.xml.namespace.QName;
-import javax.xml.ws.Service;
-import java.net.URL;
-import java.io.*;
-import java.util.*;
-
-public class CoordinatorClient {
- private String coordinatorID;
- private String serverName;
- private DERMSInterface server;
-
- public CoordinatorClient(String coordinatorID) {
- this.coordinatorID = coordinatorID;
- this.serverName = coordinatorID.substring(0, 3).toUpperCase();
- }
-
- public void connectToServer() {
- try {
- String endpointURL = "";
- switch (serverName) {
- case "MTL":
- endpointURL = "http://localhost:8080/DERMS/MTL?wsdl";
- break;
- case "QUE":
- endpointURL = "http://localhost:8081/DERMS/QUE?wsdl";
- break;
- case "SHE":
- endpointURL = "http://localhost:8082/DERMS/SHE?wsdl";
- break;
- default:
- System.out.println("Invalid server code in coordinatorID.");
- }
-
- URL url = new URL(endpointURL);
- QName qname = new QName("http://DERMS.org/", "ServerService");
- Service service = Service.create(url, qname);
- server = service.getPort(DERMSInterface.class);
-
- System.out.println("Connected to " + serverName + " server.");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public String requestResource(String resourceID, int duration) {
- try {
- String response = server.requestResource(coordinatorID, resourceID, duration);
- log("requestResource", response);
- System.out.println(response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "OK";
- }
-
- public String findResource(String resourceName) {
- try {
- String response = server.findResource(coordinatorID, resourceName);
- log("findResource", response);
- System.out.println("Resources you have occupied:\n" + response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "OK";
- }
-
- public String returnResource(String resourceID) {
- try {
- String response = server.returnResource(coordinatorID, resourceID);
- log("returnResource", response);
- System.out.println(response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "OK";
- }
-
- public String swapResource(String coordinatorID, String oldResourceID, String oldResourceType, String newResourceID, String newResourceType) {
- try {
- String response = server.swapResource(coordinatorID, oldResourceID, oldResourceType, newResourceID, newResourceType);
- log("swapResource", response);
- System.out.println(response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "OK";
- }
-
- private void log(String operation, String response) {
- try (FileWriter fw = new FileWriter(coordinatorID + "_log.txt", true);
- BufferedWriter bw = new BufferedWriter(fw);
- PrintWriter out = new PrintWriter(bw)) {
- String logEntry = String.format("%s - Operation: %s, Response: %s", new Date(), operation, response);
- out.println(logEntry);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- public void run() {
- Scanner scanner = new Scanner(System.in);
- connectToServer();
-
- while (true) {
- System.out.println("Coordinator menu:");
- System.out.println("1. Request Resource");
- System.out.println("2. Find Resource");
- System.out.println("3. Return Resource");
- System.out.println("4. Swap Resource");
- System.out.println("5. Exit");
- System.out.print("Enter choice (number): ");
- int choice = Integer.parseInt(scanner.nextLine());
-
- switch (choice) {
- case 1:
- System.out.print("Enter resourceID: ");
- String resourceID = scanner.nextLine();
- System.out.print("Enter duration: ");
- int duration = Integer.parseInt(scanner.nextLine());
- requestResource(resourceID, duration);
- break;
- case 2:
- System.out.print("Enter resourceName: ");
- String resourceName = scanner.nextLine();
- findResource(resourceName);
- break;
- case 3:
- System.out.print("Enter resourceID: ");
- resourceID = scanner.nextLine();
- returnResource(resourceID);
- break;
- case 4:
- swapResource();
- break;
- case 5:
- System.out.println("Exiting client");
- scanner.close();
- return;
- default:
- System.out.println("Invalid input");
- }
- }
- }
-
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- System.out.print("Enter coordinatorID: ");
- String coordinatorID = scanner.nextLine();
- CoordinatorClient client = new CoordinatorClient(coordinatorID);
- client.run();
- }
-} \ No newline at end of file
diff --git a/src/main/java/derms/Replica3pkg/ResponderClient.java b/src/main/java/derms/Replica3pkg/ResponderClient.java
deleted file mode 100644
index 85dfeaa..0000000
--- a/src/main/java/derms/Replica3pkg/ResponderClient.java
+++ /dev/null
@@ -1,154 +0,0 @@
-//ResponderClient.java
-package derms.Replica3pkg;
-
-
-import javax.xml.namespace.QName;
-import javax.xml.ws.Service;
-import java.io.*;
-import java.net.URL;
-import java.util.*;
-
-public class ResponderClient {
- private String responderID;
- private String serverName;
- private Map<String, DERMSInterface> servers;
-
- public ResponderClient(String responderID) {
- this.responderID = responderID;
- this.serverName = responderID.substring(0, 3).toUpperCase();
- this.servers = new HashMap<>();
- }
-
- public void connectToServer() {
- try {
- String[] serverNames = {"MTL", "QUE", "SHE"};
- String[] endpoints = {
- "http://localhost:8080/DERMS/MTL?wsdl",
- "http://localhost:8081/DERMS/QUE?wsdl",
- "http://localhost:8082/DERMS/SHE?wsdl"
- };
-
- int i = 0;
- for (String name : serverNames) {
- URL url = new URL(endpoints[i]);
- QName qname = new QName("http://DERMS.org/", "ServerService");
- Service service = Service.create(url, qname);
- servers.put(name, service.getPort(DERMSInterface.class));
- System.out.println("Connected to " + name + " server.");
- i++;
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public String addResource(String resourceID, String resourceName, int duration) {
- try {
- String serverCode = resourceID.substring(0, 3).toUpperCase();
- DERMSInterface targetServer = servers.get(serverCode);
- if (targetServer == null) {
- System.out.println("Invalid server code in resourceID.");
- return "Error";
- }
- String response = targetServer.addResource(resourceID, resourceName, duration);
- log("addResource", response);
- System.out.println(response);
- return "OK";
- } catch (Exception e) {
- e.printStackTrace();
- return "Error";
- }
- }
-
- public String removeResource(String resourceID, int duration) {
- try {
- String serverCode = resourceID.substring(0, 3).toUpperCase();
- DERMSInterface targetServer = servers.get(serverCode);
- if (targetServer == null) {
- System.out.println("Invalid server code in resourceID.");
- }
- String response = targetServer.removeResource(resourceID, duration);
- log("removeResource", response);
- System.out.println(response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "OK";
- }
-
- public String listResourceAvailability(String resourceName) {
- try {
- String response = servers.get(serverName).listResourceAvailability(resourceName);
- log("listResourceAvailability", response);
- System.out.println("Available Resources:\n" + response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "OK";
- }
-
- private void log(String operation, String response) {
- try (FileWriter fw = new FileWriter(responderID + "_log.txt", true);
- BufferedWriter bw = new BufferedWriter(fw);
- PrintWriter out = new PrintWriter(bw)) {
- String logEntry = String.format("%s - Operation: %s, Response: %s", new Date(), operation, response);
- out.println(logEntry);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- public void start() {
- Scanner scanner = new Scanner(System.in);
- connectToServer();
-
- while (true) {
- System.out.println("Responder menu:");
- System.out.println("1. Add Resource");
- System.out.println("2. Remove Resource");
- System.out.println("3. List Resource Availability");
- System.out.println("4. Exit");
- System.out.print("Enter choice (number): ");
- int choice = Integer.parseInt(scanner.nextLine());
-
- switch (choice) {
- case 1:
- System.out.print("Enter resourceID: ");
- String resourceID = scanner.nextLine();
- System.out.print("Enter resourceName: ");
- String resourceName = scanner.nextLine();
- System.out.print("Enter duration: ");
- int duration = Integer.parseInt(scanner.nextLine());
- addResource(resourceID, resourceName, duration);
- break;
- case 2:
- System.out.print("Enter resourceID: ");
- resourceID = scanner.nextLine();
- System.out.print("Enter duration (removal): ");
- duration = Integer.parseInt(scanner.nextLine());
- removeResource(resourceID, duration);
- break;
- case 3:
- System.out.print("Enter resourceName: ");
- resourceName = scanner.nextLine();
- listResourceAvailability(resourceName);
- break;
- case 4:
- System.out.println("Exiting client");
- scanner.close();
- return;
- default:
- System.out.println("Invalid input");
- }
- }
- }
-
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- System.out.print("Enter responderID: ");
- String responderID = scanner.nextLine();
- ResponderClient client = new ResponderClient(responderID);
- client.start();
- }
-} \ No newline at end of file
diff --git a/src/main/java/derms/Replica3.java b/src/main/java/derms/Replica4.java
index b1ee8ce..760f8bb 100644
--- a/src/main/java/derms/Replica3.java
+++ b/src/main/java/derms/Replica4.java
@@ -1,30 +1,19 @@
package derms;
-import derms.Replica3pkg.CoordinatorClient;
-import derms.Replica3pkg.RemoteServer;
-import derms.Replica3pkg.ResponderClient;
-import derms.Replica3pkg.Server;
-import derms.net.runicast.ReliableUnicastSender;
-import derms.Replica;
-import derms.ReplicaManager;
-import derms.Request;
-import derms.Response;
-import javax.xml.ws.Endpoint;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.logging.Logger;
+//import derms.Replica3pkg.ResponderClient;
+import java.io.*;
+import java.util.*;
-public class Replica3 implements Replica {
+import derms.Replica4pkg.RemoteServer;
+
+public class Replica4 implements Replica {
private ReplicaManager replicaManager;
private RemoteServer remoteServer;
private boolean alive = true;
- public Replica3(ReplicaManager replicaManager){
+ public Replica4(ReplicaManager replicaManager){
this.replicaManager = replicaManager;
- this.remoteServer = new RemoteServer();
}
@Override
@@ -34,7 +23,8 @@ public class Replica3 implements Replica {
@Override
public void startProcess() {
-
+ this.remoteServer = new RemoteServer();
+ System.out.println("[Replica 4] Process started.");
}
@Override
@@ -79,22 +69,40 @@ public class Replica3 implements Replica {
break;
default:
responseMessage = "Unrecognized function: " + request.getFunction();
- log.severe("Unrecognized function in request: " + request.getFunction());
+ log("Unrecognized function in request: " + request.getFunction());
break;
}
Response response = new Response(request.getSequenceNumber(), responseMessage);
- log.info("Replica " + 3 + " processed request: " + request + ", response: " + response);
+ log("Replica " + 4 + " processed request: " + request + ", response: " + response);
replicaManager.sendResponseToFE(response);
}
@Override
public void restart() {
+ shutDown();
+ startProcess();
+ }
+ public void shutDown(){
+ this.remoteServer.stopServers();
}
@Override
public int getId() {
- return 3;
+ return 4;
+ }
+
+ public synchronized void log(String message) {
+ String logMessage = new Date() + " - " + message;
+ System.out.println(logMessage);
+
+ try (FileWriter fw = new FileWriter("Replica4_log.txt", true);
+ BufferedWriter bw = new BufferedWriter(fw);
+ PrintWriter out = new PrintWriter(bw)) {
+ out.println(logMessage);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
} \ No newline at end of file
diff --git a/src/main/java/derms/Replica3pkg/DERMSInterface.java b/src/main/java/derms/Replica4pkg/DERMSInterface.java
index 14099a5..933e619 100644
--- a/src/main/java/derms/Replica3pkg/DERMSInterface.java
+++ b/src/main/java/derms/Replica4pkg/DERMSInterface.java
@@ -1,4 +1,4 @@
-package derms.Replica3pkg;
+package derms.Replica4pkg;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
diff --git a/src/main/java/derms/Replica3pkg/RemoteServer.java b/src/main/java/derms/Replica4pkg/RemoteServer.java
index 16741dd..a572dbe 100644
--- a/src/main/java/derms/Replica3pkg/RemoteServer.java
+++ b/src/main/java/derms/Replica4pkg/RemoteServer.java
@@ -1,10 +1,12 @@
//RemoteServer.java
-package derms.Replica3pkg;
+package derms.Replica4pkg;
import javax.xml.ws.Endpoint;
import java.util.*;
public class RemoteServer {
+ private List<Endpoint> endpoints = new ArrayList<>();
+
public RemoteServer() {
try {
Map<String, Integer> UDPPorts = new HashMap<>();
@@ -20,7 +22,8 @@ public class RemoteServer {
server.initServer(serverName, UDPPort, UDPPorts);
int port = 8080 + i;
String url = "http://localhost:" + port + "/DERMS/" + serverName;
- Endpoint.publish(url, server);
+ Endpoint endpoint = Endpoint.publish(url, server);
+ endpoints.add(endpoint); // Keep track of the Endpoint
i++;
System.out.println(serverName + " Server ready and waiting ...");
}
@@ -29,4 +32,12 @@ public class RemoteServer {
e.printStackTrace();
}
}
+
+ // Method to stop all servers
+ public void stopServers() {
+ for (Endpoint endpoint : endpoints) {
+ endpoint.stop();
+ }
+ System.out.println("All servers have been stopped.");
+ }
} \ No newline at end of file
diff --git a/src/main/java/derms/Replica3pkg/Resource.java b/src/main/java/derms/Replica4pkg/Resource.java
index fceebca..365957e 100644
--- a/src/main/java/derms/Replica3pkg/Resource.java
+++ b/src/main/java/derms/Replica4pkg/Resource.java
@@ -1,5 +1,5 @@
//Resource.java
-package derms.Replica3pkg;
+package derms.Replica4pkg;
import java.io.Serializable;
diff --git a/src/main/java/derms/Replica3pkg/Server.java b/src/main/java/derms/Replica4pkg/Server.java
index 474e6f5..ee701d3 100644
--- a/src/main/java/derms/Replica3pkg/Server.java
+++ b/src/main/java/derms/Replica4pkg/Server.java
@@ -1,5 +1,5 @@
//Server.java
-package derms.Replica3pkg;
+package derms.Replica4pkg;
import javax.jws.WebService;
import javax.jws.WebMethod;
@@ -464,7 +464,7 @@ public class Server implements DERMSInterface {
}
//Logging method
- private synchronized void log(String message) {
+ public synchronized void log(String message) {
String logMessage = new Date() + " - " + message;
System.out.println(logMessage);