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(); } } }