Coverage Summary for Class: Client (it.polimi.ingsw.view)

Class Class, % Method, % Line, %
Client 0% (0/1) 0% (0/9) 0% (0/201)


 package it.polimi.ingsw.view;
 
 import it.polimi.ingsw.controller.Game;
 import it.polimi.ingsw.controller.Initializer;
 import it.polimi.ingsw.view.GUI.PlayerGUI;
 import it.polimi.ingsw.view.TUI.PlayerTUI;
 
 import javax.swing.*;
 import java.awt.*;
 import java.io.*;
 import java.net.Socket;
 import java.rmi.RemoteException;
 
 import static it.polimi.ingsw.model.NetMode.RMI;
 import static it.polimi.ingsw.model.NetMode.SOCKET;
 import static it.polimi.ingsw.view.UIMode.GUI;
 import static it.polimi.ingsw.view.UIMode.TUI;
 
 /**
  * class which represent the entry point for the client
  * @author Ettori
  */
 public class Client {
 
     /** variable used to keep track of the UI mode that the player is currently using */
     public static UIMode uiModeCur;
     private final JFrame setupFrame = new JFrame();
     private final JPanel generalPanel = new JPanel();
     private boolean close = true;
 
     /**
      * method for drawing the GUI to ask ip, port for socket and port for RMI
      */
     private void insertIp(){
         setupFrame.setTitle("Insert the IP Address");
         JTextField ipText = new JTextField(" Insert ip: (default = 127.0.0.1) ");
         JTextField socketPortText = new JTextField(" Insert socket port: (default = 3333) ");
         JTextField rmiPortText = new JTextField(" Insert rmi port: (default = 5555) ");
         JButton sendIP = new JButton(" Enter ");
         sendIP.setFont(new Font("Calibri", Font.PLAIN, 25));
 
         ipText.addActionListener(event -> sendIP.doClick());
         socketPortText.addActionListener(event -> sendIP.doClick());
         rmiPortText.addActionListener(event -> sendIP.doClick());
         sendIP.addActionListener((event) ->{
             try {
                 if (!socketPortText.getText().equals(" Insert socket port: (default = 3333) "))
                     Initializer.PORT = Integer.parseInt(socketPortText.getText());
                 if (!rmiPortText.getText().equals(" Insert rmi port: (default = 5555) "))
                     Initializer.PORT_RMI = Integer.parseInt(rmiPortText.getText());
                 if (!ipText.getText().equals(" Insert ip: (default = 127.0.0.1) "))
                     IP.activeIP = ipText.getText();
                 if(IP.activeIP.equals(""))
                     IP.activeIP = "-1";
                 Socket mySocket = null;
                 try {
                     new Thread(() ->{
                         Game.waitForSeconds(3);
                         if(close){
                             System.out.println("\nThe IP address does not exists on this network\n");
                             System.exit(0);
                         }
                     }).start();
                     mySocket = new Socket(IP.activeIP, Initializer.PORT);
                     close = false;
                     ObjectOutputStream out = new ObjectOutputStream(mySocket.getOutputStream());
                     out.writeObject(true);
                     alert("There is already an active game...");
                     new Thread(this::insertInfo).start();
                 } catch (Exception e) {
                     close = false;
                     alert("You are the first player to connect!");
                     new Thread(this::insertPlayers).start();
                 }
             }catch (Exception e){
                 alert("Invalid Selection");
                 ipText.setText(" Insert ip: ");
                 socketPortText.setText(" Insert socket port: ");
                 rmiPortText.setText(" Insert rmi port: ");
                 generalPanel.requestFocusInWindow();
             }
         });
         int w = 1000;
         int h = 600;
         generalPanel.setLayout(new GridLayout(4, 1));
         generalPanel.add(ipText);
         generalPanel.add(socketPortText);
         generalPanel.add(rmiPortText);
         generalPanel.add(sendIP);
         generalPanel.setPreferredSize(new Dimension(w, h));
         generalPanel.requestFocusInWindow();
         setupFrame.add(generalPanel, BorderLayout.CENTER);
         setupFrame.setSize(w, h);
         setupFrame.setResizable(false);
         setupFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setupFrame.pack();
         setupFrame.setLocationRelativeTo(null);
         setupFrame.setVisible(true);
         generalPanel.requestFocus();
     }
     /**
      * method for drawing the GUI to ask number of players and persistence
      */
     private void insertPlayers(){
         setupFrame.setTitle("Insert the Number of Players");
         JRadioButton p_2 = new JRadioButton("2 players");
         JRadioButton p_3 = new JRadioButton("3 players");
         JRadioButton p_4 = new JRadioButton("4 players");
         p_2.setBorder(BorderFactory.createEmptyBorder(0,100,0,0));
         p_3.setBorder(BorderFactory.createEmptyBorder(0,100,0,0));
         p_4.setBorder(BorderFactory.createEmptyBorder(0,100,0,0));
         p_2.setSelected(true);
         ButtonGroup group_1 = new ButtonGroup();
         group_1.add(p_2);
         group_1.add(p_3);
         group_1.add(p_4);
         JTextField pers = new JTextField(" Do you want to load the old game ?");
         pers.setEditable(false);
         JRadioButton yes = new JRadioButton("yes");
         yes.setBorder(BorderFactory.createEmptyBorder(0,100,0,0));
         JRadioButton no = new JRadioButton("no");
         no.setSelected(true);
         ButtonGroup group_2 = new ButtonGroup();
         group_2.add(yes);
         group_2.add(no);
 
         JButton enterBtn = new JButton(" Enter ");
         enterBtn.setFont(new Font("Calibri", Font.PLAIN, 25));
         enterBtn.addActionListener((event) ->{
             int numP = 0;
             String persOpt = "";
             if(p_2.isSelected())
                 numP = 2;
             if(p_3.isSelected())
                 numP = 3;
             if(p_4.isSelected())
                 numP = 4;
             if(yes.isSelected())
                 persOpt = "yes";
             else
                 persOpt = "no";
 
             int finalNumP = numP;
             String finalPersOpt = persOpt;
             setupFrame.dispose();
             try {
                 new Game(finalNumP, finalPersOpt);
             } catch (RemoteException e) {
                 throw new RuntimeException(e);
             }
         });
         generalPanel.removeAll();
         generalPanel.setLayout(new GridLayout(3, 3));
         generalPanel.add(p_2);
         generalPanel.add(p_3);
         generalPanel.add(p_4);
         generalPanel.add(pers);
         generalPanel.add(yes);
         generalPanel.add(no);
         generalPanel.add(new Panel());
         generalPanel.add(enterBtn);
         generalPanel.add(new Panel());
         generalPanel.revalidate();
         generalPanel.repaint();
         setupFrame.setVisible(true);
     }
     /**
      * method for drawing the GUI to ask UI mode, net Mode and resilience
      */
     private void insertInfo(){
         setupFrame.setTitle("Insert the Game Mode");
         JTextField uiText = new JTextField(" Choose UI mode ");
         uiText.setEditable(false);
         JTextField netText = new JTextField(" Choose NET mode ");
         netText.setEditable(false);
         JTextField resilText = new JTextField(" Do you want to reconnect to the running game ?");
         resilText.setEditable(false);
         JRadioButton tui = new JRadioButton("TUI");
         tui.setBorder(BorderFactory.createEmptyBorder(0,100,0,0));
         JRadioButton gui = new JRadioButton("GUI");
         gui.setSelected(true);
         JRadioButton socket = new JRadioButton("Socket");
         socket.setBorder(BorderFactory.createEmptyBorder(0,100,0,0));
         JRadioButton rmi = new JRadioButton("RMI");
         socket.setSelected(true);
         JRadioButton yes = new JRadioButton("Yes");
         yes.setBorder(BorderFactory.createEmptyBorder(0,100,0,0));
         JRadioButton no = new JRadioButton("No");
         no.setSelected(true);
         ButtonGroup group_1 = new ButtonGroup();
         ButtonGroup group_2 = new ButtonGroup();
         ButtonGroup group_3 = new ButtonGroup();
         group_1.add(tui);
         group_1.add(gui);
         group_2.add(socket);
         group_2.add(rmi);
         group_3.add(yes);
         group_3.add(no);
         JButton enterBtn = new JButton(" Enter ");
         enterBtn.setFont(new Font("Calibri", Font.PLAIN, 25));
 
         enterBtn.addActionListener((event) ->{
             setupFrame.dispose();
             if(tui.isSelected() && socket.isSelected()){
                 alert("The game will continue in the terminal...");
                 Client.uiModeCur = TUI;
                 try {
                     new PlayerTUI(SOCKET, yes.isSelected() ? "yes" : "no");
                 } catch (RemoteException e) {
                     alert("Client process unable to start...");
                     System.exit(0);
                 }
                 return;
             }
             if(tui.isSelected() && rmi.isSelected()){
                 Client.uiModeCur = TUI;
                 alert("The game will continue in the terminal...");
                 try {
                     new PlayerTUI(RMI, yes.isSelected() ? "yes" : "no");
                 } catch (RemoteException e) {
                     alert("Client process unable to start...");
                     System.exit(0);
                 }
                 return;
             }
             if(gui.isSelected() && socket.isSelected()){
                 Client.uiModeCur = GUI;
                 try {
                     new PlayerGUI(SOCKET, yes.isSelected() ? "yes" : "no");
                 } catch (RemoteException e) {
                     alert("Client process unable to start...");
                     System.exit(0);
                 }
                 return;
             }
             if(gui.isSelected() && rmi.isSelected()){
                 Client.uiModeCur = GUI;
                 try {
                     new PlayerGUI(RMI, yes.isSelected() ? "yes" : "no");
                 } catch (RemoteException e) {
                     alert("Client process unable to start...");
                     System.exit(0);
                 }
                 return;
             }
         });
         generalPanel.removeAll();
         generalPanel.setLayout(new GridLayout(4, 3));
         generalPanel.add(uiText);
         generalPanel.add(tui);
         generalPanel.add(gui);
         generalPanel.add(netText);
         generalPanel.add(socket);
         generalPanel.add(rmi);
         generalPanel.add(resilText);
         generalPanel.add(yes);
         generalPanel.add(no);
         generalPanel.add(new Panel());
         generalPanel.add(enterBtn);
         generalPanel.add(new Panel());
         generalPanel.revalidate();
         generalPanel.repaint();
         setupFrame.setVisible(true);
     }
     /**
      * helper function for alerting a message to the user (pop-up)
      * @param s the string og the message to show
      */
     private void alert(String s){javax.swing.JOptionPane.showMessageDialog(null, s);}
 
     /**
      * main method which is used by the user to choose the UI and the Network
      @author Ettori
      */
     public Client() {
         new Thread(this::insertIp).start();
     }
 }