diff options
| author | BMatajsz <90217645+BMatajsz@users.noreply.github.com> | 2024-12-02 17:25:26 -0500 |
|---|---|---|
| committer | BMatajsz <90217645+BMatajsz@users.noreply.github.com> | 2024-12-02 17:25:26 -0500 |
| commit | 06b85e583dd9242855b2ca9173a580c766733a25 (patch) | |
| tree | 3328857a43dae98d2d58157e5a01868f2abb8e7a | |
| parent | 6767d5b22d105cdbae568b4734c6835f2828118d (diff) | |
| download | soen423-06b85e583dd9242855b2ca9173a580c766733a25.zip | |
Added Replica4
| -rw-r--r-- | src/main/java/derms/Replica3pkg/CoordinatorClient.java | 155 | ||||
| -rw-r--r-- | src/main/java/derms/Replica3pkg/ResponderClient.java | 154 | ||||
| -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); |