From c968c1be7892fbc1ba0571d30a03b20e3f8a5abc Mon Sep 17 00:00:00 2001 From: icelimetea Date: Sun, 24 Apr 2022 14:45:01 +0100 Subject: [PATCH] Refactor some parts of NewLaunch --- .../launcher/org/multimc/EntryPoint.java | 155 ++++++++---------- libraries/launcher/org/multimc/Launcher.java | 2 +- .../launcher/org/multimc/ParamBucket.java | 51 +++--- 3 files changed, 95 insertions(+), 113 deletions(-) diff --git a/libraries/launcher/org/multimc/EntryPoint.java b/libraries/launcher/org/multimc/EntryPoint.java index 0f904f5f..c923bbde 100644 --- a/libraries/launcher/org/multimc/EntryPoint.java +++ b/libraries/launcher/org/multimc/EntryPoint.java @@ -16,22 +16,24 @@ package org.multimc;/* import org.multimc.onesix.OneSixLauncher; -import java.io.*; -import java.nio.charset.Charset; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; public class EntryPoint { - private enum Action - { - Proceed, - Launch, - Abort - } + + private final ParamBucket params = new ParamBucket(); + + private org.multimc.Launcher launcher; public static void main(String[] args) { EntryPoint listener = new EntryPoint(); + int retCode = listener.listen(); + if (retCode != 0) { System.out.println("Exiting with " + retCode); @@ -41,111 +43,92 @@ public class EntryPoint private Action parseLine(String inData) throws ParseException { - String[] pair = inData.split(" ", 2); + String[] pair = inData.split("\\s+", 2); - if(pair.length == 1) - { - String command = pair[0]; - if (pair[0].equals("launch")) + if (pair.length == 0) + throw new ParseException("Unexpected empty string!"); + + switch (pair[0]) { + case "launch": { return Action.Launch; + } - else if (pair[0].equals("abort")) + case "abort": { return Action.Abort; + } - else throw new ParseException("Error while parsing:" + pair[0]); - } + case "launcher": { + if (pair.length != 2) + throw new ParseException("Expected 2 tokens, got 1!"); - if(pair.length != 2) - throw new ParseException("Pair length is not 2."); + if (pair[1].equals("onesix")) { + launcher = new OneSixLauncher(); - String command = pair[0]; - String param = pair[1]; + Utils.log("Using onesix launcher."); + + return Action.Proceed; + } else { + throw new ParseException("Invalid launcher type: " + pair[1]); + } + } + + default: { + if (pair.length != 2) + throw new ParseException("Error while parsing:" + pair[0]); + + params.add(pair[0], pair[1]); - if(command.equals("launcher")) - { - if(param.equals("onesix")) - { - m_launcher = new OneSixLauncher(); - Utils.log("Using onesix launcher."); - Utils.log(); return Action.Proceed; } - else - throw new ParseException("Invalid launcher type: " + param); } - - m_params.add(command, param); - //System.out.println(command + " : " + param); - return Action.Proceed; } public int listen() { - BufferedReader buffer; - try - { - buffer = new BufferedReader(new InputStreamReader(System.in, "UTF-8")); - } catch (UnsupportedEncodingException e) - { - System.err.println("For some reason, your java does not support UTF-8. Consider living in the current century."); + Action action = Action.Proceed; + + try (BufferedReader reader = new BufferedReader(new InputStreamReader( + System.in, + StandardCharsets.UTF_8 + ))) { + String line; + + while (action == Action.Proceed) { + if ((line = reader.readLine()) != null) { + action = parseLine(line); + } else { + action = Action.Abort; + } + } + } catch (IOException | ParseException e) { + Utils.log("Launcher ABORT due to exception:"); + e.printStackTrace(); + return 1; } - boolean isListening = true; - boolean isAborted = false; + // Main loop - while (isListening) - { - String inData; - try - { - // Read from the pipe one line at a time - inData = buffer.readLine(); - if (inData != null) - { - Action a = parseLine(inData); - if(a == Action.Abort) - { - isListening = false; - isAborted = true; - } - if(a == Action.Launch) - { - isListening = false; - } - } - else - { - isListening = false; - isAborted = true; - } - } - catch (IOException e) - { - System.err.println("Launcher ABORT due to IO exception:"); - e.printStackTrace(); - return 1; - } - catch (ParseException e) - { - System.err.println("Launcher ABORT due to PARSE exception:"); - e.printStackTrace(); - return 1; - } - } - if(isAborted) + if (action == Action.Abort) { System.err.println("Launch aborted by the launcher."); return 1; } - if(m_launcher != null) + + if (launcher != null) { - return m_launcher.launch(m_params); + return launcher.launch(params); } + System.err.println("No valid launcher implementation specified."); + return 1; } - private ParamBucket m_params = new ParamBucket(); - private org.multimc.Launcher m_launcher; + private enum Action { + Proceed, + Launch, + Abort + } + } diff --git a/libraries/launcher/org/multimc/Launcher.java b/libraries/launcher/org/multimc/Launcher.java index d8cb6d1b..c5e8fbc1 100644 --- a/libraries/launcher/org/multimc/Launcher.java +++ b/libraries/launcher/org/multimc/Launcher.java @@ -18,5 +18,5 @@ package org.multimc; public interface Launcher { - abstract int launch(ParamBucket params); + int launch(ParamBucket params); } diff --git a/libraries/launcher/org/multimc/ParamBucket.java b/libraries/launcher/org/multimc/ParamBucket.java index 2fde1329..8ff03ddc 100644 --- a/libraries/launcher/org/multimc/ParamBucket.java +++ b/libraries/launcher/org/multimc/ParamBucket.java @@ -19,62 +19,62 @@ package org.multimc; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; public class ParamBucket { + + private final Map> paramsMap = new HashMap<>(); + public void add(String key, String value) { - List coll = null; - if(!m_params.containsKey(key)) - { - coll = new ArrayList(); - m_params.put(key, coll); - } - else - { - coll = m_params.get(key); - } - coll.add(value); + paramsMap.computeIfAbsent(key, k -> new ArrayList<>()) + .add(value); } public List all(String key) throws NotFoundException { - if(!m_params.containsKey(key)) + List params = paramsMap.get(key); + + if (params == null) throw new NotFoundException(); - return m_params.get(key); + + return params; } public List allSafe(String key, List def) { - if(!m_params.containsKey(key) || m_params.get(key).size() < 1) - { + List params = paramsMap.get(key); + + if (params == null || params.isEmpty()) return def; - } - return m_params.get(key); + + return params; } public List allSafe(String key) { - return allSafe(key, new ArrayList()); + return allSafe(key, new ArrayList<>()); } public String first(String key) throws NotFoundException { List list = all(key); - if(list.size() < 1) - { + + if (list.isEmpty()) throw new NotFoundException(); - } + return list.get(0); } public String firstSafe(String key, String def) { - if(!m_params.containsKey(key) || m_params.get(key).size() < 1) - { + List params = paramsMap.get(key); + + if (params == null || params.isEmpty()) return def; - } - return m_params.get(key).get(0); + + return params.get(0); } public String firstSafe(String key) @@ -82,5 +82,4 @@ public class ParamBucket return firstSafe(key, ""); } - private HashMap> m_params = new HashMap>(); }