package org.jrenner.fps.utils; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.jrenner.fps.Main; import org.jrenner.fps.net.NetManager; import org.jrenner.fps.net.NetServer; import org.jrenner.fps.net.ServerType; /** only for Desktop and Headless */ public class CommandArgs { public static ScreenSize process(String[] args) { Options options = new Options(); options.addOption("s", "server", false, "start online server"); options.addOption("p", "port", true, "specify TCP port to either host on (server) or connect to (client)"); options.addOption("c", "client", false, "connect to server as a client"); options.addOption("a", "address", true, "supply hostname address to connect to"); options.addOption("d", "lag-delay", true, "simulate lag with argument = milliseconds of lag"); options.addOption("z", "screensize", true, "supply screen size in the form of WIDTHxHEIGHT, i.e. 1920x1080"); options.addOption("h", "help", false, "print help"); boolean printHelpAndQuit = false; ScreenSize screenSize = null; CommandLineParser parser = new BasicParser(); CommandLine cli = null; try { cli = parser.parse(options, args); } catch (ParseException e) { e.printStackTrace(); printHelpAndQuit = true; } if (cli != null && cli.hasOption('h')) { printHelpAndQuit = true; } if (cli != null && cli.getOptions().length == 0) { Main.serverType = ServerType.Local; Main.hasClient = true; } else if (cli != null && !printHelpAndQuit) { if (cli.hasOption('z')) { String[] pieces = cli.getOptionValue('z').split("x"); int width = Integer.parseInt(pieces[0]); int height = Integer.parseInt(pieces[1]); screenSize = new ScreenSize(); screenSize.width = width; screenSize.height = height; } if (cli.hasOption('s')) { Main.serverType = ServerType.Online; System.out.println("server type: online"); } if (cli.hasOption('l')) { if (Main.serverType != null) { System.out.println("please choose local or online server, not both"); printHelpAndQuit = true; } else { Main.serverType = ServerType.Local; } } if (cli.hasOption('c')) { Main.hasClient = true; } if (cli.hasOption('a')) { String value = cli.getOptionValue('a'); if (value != null) { NetManager.host = value; } } if (cli.hasOption('p')) { int port = Integer.parseInt(cli.getOptionValue('p')); NetManager.tcpPort = port; } if (cli.hasOption('d')) { NetServer.simulateLag = true; int lagMillis = Integer.parseInt(cli.getOptionValue('d')); NetServer.lagMin = lagMillis; NetServer.lagMax = lagMillis; } // verify if (!Main.isClient() && !Main.isServer()) { System.out.println("please choose client and server options"); printHelpAndQuit = true; } } if (printHelpAndQuit) { HelpFormatter hf = new HelpFormatter(); hf.printHelp("java -jar myjarfile.jar <args>", options); System.exit(1); } return screenSize; } public static class ScreenSize { public int width, height; } }