Coverage Summary for Class: Main (<empty package name>)
| Class | Class, % | Method, % | Branch, % | Line, % | 
|---|---|---|---|---|
| Main | 0% (0/1) | 0% (0/2) | 0% (0/59) | 0% (0/24) | 
1 import it.polimi.ingsw.Client.CLI.CLI; 2 import it.polimi.ingsw.Client.GUI.GUI; 3 import it.polimi.ingsw.Logger; 4 import it.polimi.ingsw.Server.WelcomeServer; 5 6 import java.net.InetAddress; 7 import java.net.UnknownHostException; 8 import java.util.Arrays; 9 10 /** 11 * main class of the project, call the {@link #main} function to start the whole thing up 12 */ 13 public class Main { 14 private static final String HELP_MESSAGE = """ 15 Welcome to the Eriantys startup tool! 16 17 This tool must be called with at least one of the following arguments: 18 < s > will start the Server (default bound to 0.0.0.0:8080) [ max instances: 1 ] 19 < g > will start a GUI [ max instances: unlimited ] 20 < c > will start the CLI [ max instances: 1 ] 21 < h > or < -h > will print this message [ max instances: 1 ] 22 23 Additionally, one or more of the following arguments may be used: 24 < -d > will enable the logger, useful for debugging [ max instances: 1 ] 25 < -local > will force the server to bind to the loopback address of the machine [ max instances: 1 ] 26 < -port: > followed (without using spaces) by the port the server will be listening to [ max instances: 1 ] 27 28 Here are some examples of argument combinations: 29 -d -local -port80 s [starts the server binding it to 127.0.0.1:80 and enables the logger] 30 -port:420 s [starts the server binding it to 0.0.0.0:420] 31 -d g [starts the GUI enabling the logger] 32 c [starts the CLI] 33 -local s g g c [starts a local server (127.0.0.1:8080) along side 2 GUIs and 1 CLI] 34 """; 35 36 /** 37 * When fed the proper cli inputs, starts the appropriate elements of the project 38 * 39 * @param args the program's arguments 40 */ 41 public static void main(String... args) throws UnknownHostException { 42 InetAddress serverBinding = InetAddress.getByAddress(new byte[]{0, 0, 0, 0}); 43 int serverPort = 8080; 44 // if the args are coherent 45 if (args.length >= 1 && 46 Arrays.stream(args).anyMatch(arg -> arg.equals("s") || arg.equals("g") || arg.equals("c") || arg.equals("h") || arg.equals("-h")) && 47 Arrays.stream(args).filter(arg -> arg.equals("s")).count() <= 1 && 48 Arrays.stream(args).filter(arg -> arg.equals("c")).count() <= 1 && 49 Arrays.stream(args).filter(arg -> arg.equals("h") || arg.equals("-h")).count() <= 1 && 50 Arrays.stream(args).filter(arg -> arg.equals("-d")).count() <= 1 && 51 Arrays.stream(args).filter(arg -> arg.equals("-local")).count() <= 1 && 52 Arrays.stream(args).filter(arg -> arg.startsWith("-port:")).count() <= 1 53 ) { // parse arguments 54 for (String arg : args) { 55 switch (arg.trim().toLowerCase()) { 56 case "-d" -> Logger.enable(true); 57 case "-local" -> serverBinding = InetAddress.getLoopbackAddress(); 58 case String a && a.startsWith("-port:") -> serverPort = Integer.parseInt(a.substring(6)); 59 case default -> { 60 } 61 } 62 } 63 for (String arg : args) { 64 switch (arg.trim().toLowerCase()) { 65 case "h", "-h" -> System.out.println(HELP_MESSAGE); 66 case "c" -> new Thread(new CLI()).start(); 67 case "g" -> new Thread(new GUI()).start(); 68 case "s" -> new Thread(new WelcomeServer(serverPort, serverBinding)).start(); 69 case default -> { 70 } 71 } 72 } 73 } else { 74 System.out.println(HELP_MESSAGE); 75 } 76 } 77 }