aboutsummaryrefslogtreecommitdiff
path: root/libraries/launcher/org/multimc/EntryPoint.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/launcher/org/multimc/EntryPoint.java')
-rw-r--r--libraries/launcher/org/multimc/EntryPoint.java167
1 files changed, 77 insertions, 90 deletions
diff --git a/libraries/launcher/org/multimc/EntryPoint.java b/libraries/launcher/org/multimc/EntryPoint.java
index 0f904f5f..b626d095 100644
--- a/libraries/launcher/org/multimc/EntryPoint.java
+++ b/libraries/launcher/org/multimc/EntryPoint.java
@@ -16,136 +16,123 @@ 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;
+import java.util.logging.Level;
+import java.util.logging.Logger;
public class EntryPoint
{
- private enum Action
- {
- Proceed,
- Launch,
- Abort
- }
+
+ private static final Logger LOGGER = Logger.getLogger("EntryPoint");
+
+ 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);
+ LOGGER.info("Exiting with " + retCode);
+
System.exit(retCode);
}
}
private Action parseLine(String inData) throws ParseException
{
- String[] pair = inData.split(" ", 2);
+ String[] tokens = inData.split("\\s+", 2);
- if(pair.length == 1)
- {
- String command = pair[0];
- if (pair[0].equals("launch"))
+ if (tokens.length == 0)
+ throw new ParseException("Unexpected empty string!");
+
+ switch (tokens[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 (tokens.length != 2)
+ throw new ParseException("Expected 2 tokens, got " + tokens.length);
- if(pair.length != 2)
- throw new ParseException("Pair length is not 2.");
+ if (tokens[1].equals("onesix")) {
+ launcher = new OneSixLauncher();
- String command = pair[0];
- String param = pair[1];
+ LOGGER.info("Using onesix launcher.");
+
+ return Action.Proceed;
+ } else {
+ throw new ParseException("Invalid launcher type: " + tokens[1]);
+ }
+ }
+
+ default: {
+ if (tokens.length != 2)
+ throw new ParseException("Error while parsing:" + inData);
+
+ params.add(tokens[0], tokens[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.");
- 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;
+ 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 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;
- }
+ } catch (IOException | ParseException e) {
+ LOGGER.log(Level.SEVERE, "Launcher ABORT due to exception:", e);
+
+ return 1;
}
- if(isAborted)
+
+ // Main loop
+ if (action == Action.Abort)
{
- System.err.println("Launch aborted by the launcher.");
+ LOGGER.info("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.");
+
+ LOGGER.log(Level.SEVERE, "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
+ }
+
}