From 4d2174226139b1fb6c9ffa1317bc6981b4e17c5e Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Sun, 31 Jan 2021 19:55:59 +0100 Subject: [PATCH] Allow using cli for server --- server/build.gradle | 5 ++ .../java/fr/insa/clavardator/server/Main.java | 72 +++++++++++++++++-- .../fr/insa/clavardator/server/Presence.java | 6 +- .../fr/insa/clavardator/server/Proxy.java | 5 +- 4 files changed, 77 insertions(+), 11 deletions(-) diff --git a/server/build.gradle b/server/build.gradle index 4942427..423a55d 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -1,5 +1,6 @@ plugins { id 'application' + id 'com.github.johnrengelman.shadow' version '6.1.0' } group 'fr.insa.clavardator.server' @@ -16,6 +17,10 @@ dependencies { mainClassName = 'fr.insa.clavardator.server.Main' +shadowJar { + mergeServiceFiles() +} + run{ standardInput = System.in } \ No newline at end of file diff --git a/server/src/main/java/fr/insa/clavardator/server/Main.java b/server/src/main/java/fr/insa/clavardator/server/Main.java index a122782..8998cd2 100644 --- a/server/src/main/java/fr/insa/clavardator/server/Main.java +++ b/server/src/main/java/fr/insa/clavardator/server/Main.java @@ -2,21 +2,85 @@ package fr.insa.clavardator.server; import fr.insa.clavardator.lib.util.Log; +import java.util.List; import java.util.Scanner; public class Main { + private static final int PROXY_PORT = 35750; + private static final int PRESENCE_PORT = 35650; + + private static final List HELP_ARGS = List.of("-h", "--help"); + private static final List VERSION_ARGS = List.of("-v", "--version"); + private static final List PROXY_ARGS = List.of("-x", "--proxy"); + private static final List PRESENCE_ARGS = List.of("-p", "--presence"); + + private static int proxyPort = PROXY_PORT; + private static int presencePort = PRESENCE_PORT; + + private static void printHelp() { + System.out.println("\nClavardator INSA presence server v1.0.0\n"); + System.out.println("usage: [options]\n"); + System.out.println("Options:"); + System.out.println(" -h, --help Display help message."); + System.out.println(" -v, --version Display version information."); + System.out.println(" -X , --proxy Set the proxy port."); + System.out.println(" -p , --presence Set the presence server port."); + } + + private static void printVersion() { + System.out.println("\nClavardator INSA presence server v1.0.0\n"); + } + + private static int getPort(String value, int defaultValue) { + int port = defaultValue; + try { + port = Integer.parseInt(value.trim()); + } catch (NumberFormatException e) { + System.out.println("Could not read port " + value + ". Using default."); + } + return port; + } + + private static void readArgs(String[] args) { + if (args.length > 0) { + if (HELP_ARGS.contains(args[0])) { + printHelp(); + System.exit(0); + } + if (VERSION_ARGS.contains(args[0])) { + printVersion(); + System.exit(0); + } + for (int i = 0; i < args.length -1; i++) { + if (PROXY_ARGS.contains(args[i])) { + proxyPort = getPort(args[i + 1], PROXY_PORT); + } + if (PRESENCE_ARGS.contains(args[i])) { + presencePort = getPort(args[i + 1], PRESENCE_PORT); + } + } + if (presencePort == proxyPort) { + System.out.println("Proxy and presence ports must be different"); + System.exit(1); + } + } + } public static void main(String[] args) { - Log.v(Main.class.getSimpleName(), "Server started! You can stop it by typing stop"); - Proxy proxy = new Proxy(); - Presence presence = new Presence(); + readArgs(args); + + System.out.println("\nType q then press enter to exit\n"); + Log.v(Main.class.getSimpleName(), "Starting proxy on port " + proxyPort); + Proxy proxy = new Proxy(proxyPort); + Log.v(Main.class.getSimpleName(), "Starting presence server on port " + presencePort); + Presence presence = new Presence(presencePort); String line; Scanner scanner = new Scanner(System.in); do { line = scanner.nextLine(); - } while (!line.equals("stop")); + } while (!line.equals("q")); proxy.stop(); presence.stop(); diff --git a/server/src/main/java/fr/insa/clavardator/server/Presence.java b/server/src/main/java/fr/insa/clavardator/server/Presence.java index 095c262..00d7491 100644 --- a/server/src/main/java/fr/insa/clavardator/server/Presence.java +++ b/server/src/main/java/fr/insa/clavardator/server/Presence.java @@ -12,19 +12,17 @@ import java.net.Socket; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import java.util.stream.Collectors; public class Presence { - private static final int PRESENCE_PORT = 35650; private final Map subscribers = new HashMap<>(); private final ArrayList connectedUsers = new ArrayList<>(); private final TcpListener presenceListener; - public Presence() { + public Presence(int port) { presenceListener = new TcpListener(); presenceListener.acceptConnection( - PRESENCE_PORT, + port, this::subscribe, e -> Log.e(getClass().getSimpleName(), "Error while registering a user", e)); } diff --git a/server/src/main/java/fr/insa/clavardator/server/Proxy.java b/server/src/main/java/fr/insa/clavardator/server/Proxy.java index f7205ec..2f43079 100644 --- a/server/src/main/java/fr/insa/clavardator/server/Proxy.java +++ b/server/src/main/java/fr/insa/clavardator/server/Proxy.java @@ -12,14 +12,13 @@ import java.util.HashMap; import java.util.Map; public class Proxy { - private static final int PROXY_PORT = 35750; private final HashMap users = new HashMap<>(); private final TcpListener proxyListener; - public Proxy() { + public Proxy(int port) { proxyListener = new TcpListener(); proxyListener.acceptConnection( - PROXY_PORT, + port, clientSocket -> { Log.v(getClass().getSimpleName(), "Accepting a new user");