diff options
Diffstat (limited to 'src/main/java/derms/Replica4.java')
| -rw-r--r-- | src/main/java/derms/Replica4.java | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/main/java/derms/Replica4.java b/src/main/java/derms/Replica4.java new file mode 100644 index 0000000..760f8bb --- /dev/null +++ b/src/main/java/derms/Replica4.java @@ -0,0 +1,108 @@ +package derms; + +//import derms.Replica3pkg.ResponderClient; +import java.io.*; +import java.util.*; + +import derms.Replica4pkg.RemoteServer; + +public class Replica4 implements Replica { + + private ReplicaManager replicaManager; + private RemoteServer remoteServer; + private boolean alive = true; + + public Replica4(ReplicaManager replicaManager){ + this.replicaManager = replicaManager; + } + + @Override + public boolean isAlive() { + return alive; + } + + @Override + public void startProcess() { + this.remoteServer = new RemoteServer(); + System.out.println("[Replica 4] Process started."); + } + + @Override + public void processRequest(Request request) { + ResponderClient responderClient; + CoordinatorClient coordinatorClient; + String responseMessage; + switch (request.getFunction()) { + case "addResource": + responderClient = new ResponderClient(request.getClientID()); + responseMessage = responderClient.addResource(request.getResourceID(), request.getResourceType(), request.getDuration()); + break; + case "removeResource": + responderClient = new ResponderClient(request.getClientID()); + responseMessage = responderClient.removeResource(request.getResourceID(), request.getDuration()); + break; + case "listResourceAvailability": + responderClient = new ResponderClient(request.getClientID()); + responseMessage = responderClient.listResourceAvailability(request.getResourceType()); + break; + case "requestResource": + coordinatorClient = new CoordinatorClient(request.getClientID()); + responseMessage = coordinatorClient.requestResource(request.getResourceID(), request.getDuration()); + break; + case "findResource": + coordinatorClient = new CoordinatorClient(request.getClientID()); + responseMessage = coordinatorClient.findResource(request.getResourceType()); + break; + case "returnResource": + coordinatorClient = new CoordinatorClient(request.getClientID()); + responseMessage = coordinatorClient.returnResource(request.getResourceID()); + break; + case "swapResource": + coordinatorClient = new CoordinatorClient(request.getClientID()); + responseMessage = coordinatorClient.swapResource( + request.getClientID(), + request.getOldResourceID(), + request.getOldResourceType(), + request.getResourceID(), + request.getResourceType() + ); + break; + default: + responseMessage = "Unrecognized function: " + request.getFunction(); + log("Unrecognized function in request: " + request.getFunction()); + break; + } + + Response response = new Response(request.getSequenceNumber(), responseMessage); + 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 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 |