[ all classes ]
[ it.polimi.ingsw.view.CLI ]
Coverage Summary for Class: AppCLI (it.polimi.ingsw.view.CLI)
Class | Class, % | Method, % | Line, % |
---|---|---|---|
AppCLI | 0% (0/ 1) | 0% (0/ 7) | 0% (0/ 90) |
1 package it.polimi.ingsw.view.CLI;
2
3 import it.polimi.ingsw.utils.Observable;
4 import it.polimi.ingsw.utils.Observer;
5 import it.polimi.ingsw.view.socket.AppInterface;
6 import it.polimi.ingsw.view.socket.Connection;
7 import it.polimi.ingsw.view.socket.Parser;
8
9 import java.util.Scanner;
10
11 /**
12 * CLI Application
13 */
14 public class AppCLI extends Observable<String> implements Observer<String>, AppInterface {
15 /**
16 * Socket connection
17 */
18 private Connection connection;
19 /**
20 * Status Request, if a response of the request is needed
21 */
22 private Boolean statusRequest;
23 /**
24 * CLI Scanner
25 */
26 private final Scanner scanner;
27 /**
28 * Printer
29 */
30 private ViewPrinter printer;
31 /**
32 * Player username
33 */
34 private String username;
35
36 /**
37 * AppCLI Constructor
38 *
39 * @param scanner scanner
40 */
41 public AppCLI(Scanner scanner) {
42 this.scanner = scanner;
43 }
44
45 /**
46 * Set Socket Connection
47 */
48 private void setServer() {
49 String in = "";
50 connection = null;
51 while (!in.toUpperCase().equals("QUIT")) {
52 ViewPrinter.clearConsole();
53 ViewPrinter.printLogo();
54
55 System.out.println(" Type QUIT to exit from server setup");
56 System.out.print(" Server IP & Port: ");
57 in = scanner.nextLine();
58 try {
59 String[] in2 = in.split(" ");
60 if (in2.length == 2) {
61 System.out.println(" Connecting..");
62 connection = new Connection(in2[0], Integer.parseInt(in2[1]));
63 Parser parser = new Parser();
64 printer = new ViewPrinter(parser);
65
66 parser.addObservers(printer);
67 this.addObservers(connection);
68 connection.addObservers(this);
69 connection.addObservers(parser);
70 connection.setMaster(this);
71 new Thread(connection).start();
72 break;
73 }
74 } catch (Exception e) {
75 // fail parsing
76 }
77 }
78 }
79
80 /**
81 * Set Socket/Player Username
82 */
83 private void setUsername() {
84 ViewPrinter.clearConsole();
85 ViewPrinter.printLogo();
86 while (connection != null && connection.getStatus()) {
87 System.out.print(" Insert username: ");
88 String in = scanner.nextLine();
89 if (in.length() != 0)
90 try {
91 statusRequest = null;
92 notify(in);
93 System.out.println(" Waiting for server response...");
94 while (statusRequest == null) {
95 Thread.sleep(300);
96 }
97 if (statusRequest == true) {
98 username = in;
99 printer.setUsername(username);
100 break;
101 } else
102 System.out.println(" Username not available");
103
104 } catch (Exception e) {
105 }
106 }
107 }
108
109 /**
110 * Set Game Mode
111 */
112 private void setMode() {
113
114 ViewPrinter.clearConsole();
115 ViewPrinter.printLogo();
116
117 while (connection != null && connection.getStatus()) {
118 System.out.print(" Choose a game mode (Type 1 or 2)\n 1) Two players\n 2) Three players\n ");
119 String in = scanner.nextLine();
120 if (in.equals("1") || in.equals("2"))
121 try {
122 statusRequest = null;
123 notify(in.equals("1") ? "TWO" : "THREE");
124 System.out.println(" Waiting for server response...");
125 while (statusRequest == null) {
126 Thread.sleep(300);
127 }
128 if (statusRequest == true)
129 break;
130 } catch (Exception e) {
131 // fail parsing
132 }
133 }
134 }
135
136 /**
137 * CLI Start Application
138 */
139 public void start() {
140 String in = "";
141 while (!in.toUpperCase().equals("QUIT")) {
142 setServer();
143 setMode();
144 setUsername();
145 ViewPrinter.clearConsole();
146 ViewPrinter.printLogo();
147
148 if (connection != null && connection.getStatus()) {
149 System.out.println(" Waiting for other players...");
150 printer.addObservers(connection);
151 printer.setStatus(true);
152 }
153
154 while (!in.toUpperCase().equals("QUIT") && connection != null && connection.getStatus()) {
155 in = scanner.nextLine();
156 printer.useAction(in);
157 }
158
159 if (connection != null && connection.getStatus())
160 connection.close();
161 System.out.print("\n Type QUIT to close the CLI, or any other key to play again.\n ");
162 in = scanner.nextLine();
163 }
164 }
165
166 /**
167 * Update about request status from server
168 */
169 @Override
170 public void update(String in) {
171 if (in.equals("ok"))
172 statusRequest = true;
173
174 if (in.equals("ko"))
175 statusRequest = false;
176 }
177
178 @Override
179 public void onDisconnection() {
180 System.out.println("\n Network error, Try later.");
181 }
182 }