From 51d3b7fe05fac5d42445d73e7ec047d523bdfbb5 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Mon, 2 Dec 2024 18:44:11 -0500 Subject: coordinator client --- src/main/java/derms/client/CoordinatorClient.java | 119 ++++++++++++++++++++++ src/main/java/derms/client/ResponderClient.java | 2 +- 2 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 src/main/java/derms/client/CoordinatorClient.java diff --git a/src/main/java/derms/client/CoordinatorClient.java b/src/main/java/derms/client/CoordinatorClient.java new file mode 100644 index 0000000..570d76b --- /dev/null +++ b/src/main/java/derms/client/CoordinatorClient.java @@ -0,0 +1,119 @@ +package derms.client; + +import derms.frontend.DERMSInterface; + +import java.net.MalformedURLException; + +public class CoordinatorClient extends CLI { + public static final String usage = "Usage: java derms.client.CoordinatorClient "; + + private final String coordinatorID; + private final DERMSInterface server; + + private CoordinatorClient(String coordinatorID, String FEhost) throws MalformedURLException { + this.coordinatorID = coordinatorID; + this.server = Client.connectToServer(FEhost); + + commands.put("request", new Request()); + cmdDescriptions.add(new Description( + "request ", + "Borrow a resource.")); + + commands.put("find", new Find()); + cmdDescriptions.add(new Description( + "find ", + "List borrowed resources.")); + + commands.put("return", new Return()); + cmdDescriptions.add(new Description( + "return ", + "Return a borrowed resource.")); + + commands.put("swap", new Swap()); + cmdDescriptions.add(new Description( + "swap ", + "Return the old resource and borrow the new one.")); + } + + public static void main(String[] args) { + if (args.length < 2) { + System.err.println(usage); + System.exit(1); + } + + String coordinatorID = args[0]; + String FEhost = args[1]; + + try { + (new CoordinatorClient(coordinatorID, FEhost)).run(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + + private class Request implements Command { + @Override + public void exec(String[] args) { + if (args.length < 2) + System.out.println("invalid arguments for 'request'"); + else + request(args[0], args[1]); + } + + private void request(String resourceID, String durationStr) { + try { + int duration = Integer.parseInt(durationStr); + if (duration < 0) + throw new NumberFormatException("duration less than 0"); + String response = server.requestResource(coordinatorID, resourceID, duration); + System.out.println(response); + } catch (NumberFormatException e) { + System.out.println("invalid duration: " + e.getMessage()); + } + } + } + + private class Find implements Command { + @Override + public void exec(String[] args) { + if (args.length < 1) + System.out.println("invalid arguments for 'find'"); + else find(args[0]); + } + + private void find(String resourceID) { + String response = server.findResource(coordinatorID, resourceID); + System.out.println(response); + } + } + + private class Return implements Command { + @Override + public void exec(String[] args) { + if (args.length < 1) + System.out.println("invalid arguments for 'return'"); + else + returnResource(args[0]); + } + + private void returnResource(String resourceID) { + String response = server.returnResource(coordinatorID, resourceID); + System.out.println(response); + } + } + + private class Swap implements Command { + @Override + public void exec(String[] args) { + if (args.length < 4) + System.out.println("invalid arguments for 'swap'"); + else + swap(args[0], args[1], args[2], args[3]); + } + + private void swap(String oldResourceID, String oldResourceType, String newResourceID, String newResourceType) { + String response = server.swapResource(coordinatorID, oldResourceID, oldResourceType, newResourceID, newResourceType); + System.out.println(response); + } + } +} diff --git a/src/main/java/derms/client/ResponderClient.java b/src/main/java/derms/client/ResponderClient.java index 57bb132..23361d7 100644 --- a/src/main/java/derms/client/ResponderClient.java +++ b/src/main/java/derms/client/ResponderClient.java @@ -5,7 +5,7 @@ import derms.frontend.DERMSInterface; import java.net.MalformedURLException; public class ResponderClient extends CLI { - public static final String usage = "Usage: java derms.client.ResponderClientCLI "; + public static final String usage = "Usage: java derms.client.ResponderClient "; private final DERMSInterface server; -- cgit v1.2.3