Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.38 KB | None | 0 0
  1. package pl.polsl.java.kamil.zietek.lab4.network;
  2.  
  3. import java.io.*;
  4. import java.net.*;
  5. import javax.swing.JTextField;
  6. import javax.swing.JTextPane;
  7. import javax.swing.table.DefaultTableModel;
  8.  
  9. /**
  10.  * Class with communication protocol for client
  11.  *
  12.  * @author Kamil Zietek
  13.  * @version 4.0
  14.  */
  15. public class TCPClient {
  16.  
  17.     /**
  18.      * Socket, that will be connected to server
  19.      */
  20.     private final Socket clientSocket;                              //wszystko okej przepisane
  21.  
  22.     /**
  23.      * buffered input character stream
  24.      */
  25.     private final BufferedReader inFromServer;
  26.     /**
  27.      * Formatted output character stream
  28.      */
  29.     private final PrintWriter outToServer;
  30.  
  31.     /**
  32.      * Creates the client socket
  33.      *
  34.      * @param address server address
  35.      * @param port server port
  36.      * @throws IOException when port is already bind
  37.      */
  38.     public TCPClient(String address, int port) throws IOException {
  39.         clientSocket = new Socket(address, port);
  40.         outToServer = new PrintWriter(
  41.                 new BufferedWriter(
  42.                         new OutputStreamWriter(
  43.                                 clientSocket.getOutputStream())), true);
  44.         inFromServer = new BufferedReader(
  45.                 new InputStreamReader(
  46.                         clientSocket.getInputStream()));
  47.     }
  48.  
  49.     /**
  50.      * Sends command to server
  51.      *
  52.      * @param command command from user
  53.      * @return true if success, false if something failed
  54.      */
  55.     public boolean executeCommand(String command) {
  56.         command = command.toUpperCase();
  57.  
  58.         outToServer.println(command);
  59.         try {
  60.             return (inFromServer.readLine().equals("OK"));
  61.         } catch (IOException e) {
  62.             System.err.println(e.getMessage());
  63.         }
  64.         return false;
  65.     }
  66.  
  67.     /**
  68.      * Method that creates new players from table
  69.      *
  70.      * @param model jTableModel with players
  71.      * @return true if created, false if error
  72.      */
  73.     public boolean createPlayers(DefaultTableModel model) {
  74.         if (executeCommand("REGISTER")) {
  75.             outToServer.println(model.getRowCount());
  76.             try {
  77.                 boolean finish = false;
  78.                 int i = 0;
  79.                 while (!finish) {
  80.                     String str = inFromServer.readLine();
  81.                     switch (str) {
  82.                         case "OK_GIVE_NAME":
  83.                             outToServer.println(model.getValueAt(i, 1));
  84.                             break;
  85.                         case "OK_GIVE_SURNAME":
  86.                             outToServer.println(model.getValueAt(i, 2));
  87.                             break;
  88.                         case "OK_GIVE_AGE":
  89.                             outToServer.println(model.getValueAt(i, 3));
  90.                             break;
  91.                         case "OK_ADDED":
  92.                             i++;
  93.                             break;
  94.                         case "REGISTER_SUCCESS":
  95.                             finish = true;
  96.                             break;
  97.                         default:
  98.                             return false;
  99.                     }
  100.                 }
  101.             } catch (IOException e) {
  102.                 System.err.println(e.getMessage());
  103.             }
  104.             return true;
  105.         } else {
  106.             return false;
  107.         }
  108.     }
  109.  
  110.     /**
  111.      * Refresh table with players
  112.      *
  113.      * @param table table to be refreshed
  114.      */
  115.     public void refreshPlayersTable(DefaultTableModel table) {
  116.         if (executeCommand("GET_PLAYERS")) {
  117.             int numberOfPlayers;
  118.             try {
  119.                 numberOfPlayers = Integer.parseInt(inFromServer.readLine());
  120.                 for (int i = 0; i < numberOfPlayers; i++) {
  121.                     outToServer.println("OK_GIVE_NAME");
  122.                     String name = inFromServer.readLine();
  123.                     outToServer.println("OK_GIVE_SURNAME");
  124.                     String surname = inFromServer.readLine();
  125.                     outToServer.println("OK_GIVE_AGE");
  126.                     int age = Integer.parseInt(inFromServer.readLine());
  127.                     outToServer.println("OK_GIVE_CREDITS");
  128.                     int credits = Integer.parseInt(inFromServer.readLine());
  129.  
  130.                     table.setValueAt(i + 1, i, 0);
  131.                     table.setValueAt(name, i, 1);
  132.                     table.setValueAt(surname, i, 2);
  133.                     table.setValueAt(age, i, 3);
  134.                     table.setValueAt(credits, i, 4);
  135.  
  136.                     outToServer.println("OK_GET");
  137.                 }
  138.                 outToServer.println("GET_PLAYERS_SUCCESS");
  139.  
  140.             } catch (IOException e) {
  141.                 System.err.println(e.getMessage());
  142.             }
  143.  
  144.         }
  145.     }
  146.  
  147.     /**
  148.      * Refresh player's ticket on tab tickets
  149.      *
  150.      * @param i ID of player
  151.      * @param numbers text field with ticket numbers
  152.      * @param credits text field with credits
  153.      */
  154.     public void refreshPlayerTicket(int i, JTextField numbers, JTextField credits) {
  155.         if (executeCommand("GET_PLAYER_TICKET")) {
  156.             outToServer.println(i);
  157.             try {
  158.                 String resp = inFromServer.readLine();
  159.                 if (resp.equals("NO_TICKET")) {
  160.                     numbers.setText("Ticket not bought!");
  161.                 } else {
  162.                     numbers.setText(resp);
  163.                 }
  164.                 outToServer.println("GIVE_CREDITS");
  165.                 credits.setText(inFromServer.readLine());
  166.             } catch (IOException | NumberFormatException e) {
  167.                 System.err.println(e.getMessage());
  168.             }
  169.  
  170.         }
  171.     }
  172.  
  173.     /**
  174.      * Buy new ticket for specified player
  175.      *
  176.      * @param i ID of player
  177.      * @return true if success, false if fail
  178.      */
  179.     public boolean buyNewTicket(int i) {
  180.         if (executeCommand("BUY_TICKET")) {
  181.             outToServer.println(i);
  182.             try {
  183.                 if (inFromServer.readLine().equals("OK_BOUGHT")) {
  184.                     return true;
  185.                 }
  186.             } catch (IOException e) {
  187.                 System.err.println(e.getMessage());
  188.             }
  189.         }
  190.         return false;
  191.     }
  192.  
  193.     /**
  194.      * Refresh drawings results
  195.      *
  196.      * @param allDrawings text field with all drawings
  197.      * @param thisDrawing text field with last drawing
  198.      */
  199.     public void refreshDrawingResults(JTextPane allDrawings, JTextPane thisDrawing) {
  200.         if (executeCommand("DRAWING_RESULTS")) {
  201.             try {
  202.                 String received, text;
  203.                 outToServer.println("GET_LAST_DRAWING");
  204.                 text = "";
  205.                 while (!(received = inFromServer.readLine()).equals("LAST_DRAWING_SENT")) {
  206.                     text += received;
  207.                     text += '\n';
  208.                 }
  209.                 thisDrawing.setText(text);
  210.  
  211.                 outToServer.println("GET_ALL_DRAWINGS");
  212.                 text = "";
  213.                 while (!(received = inFromServer.readLine()).equals("ALL_DRAWINGS_SENT")) {
  214.                     text += received;
  215.                     text += '\n';
  216.                 }
  217.                 allDrawings.setText(text);
  218.             } catch (IOException e) {
  219.                 System.err.println(e.getMessage());
  220.             }
  221.             outToServer.println("DRAWINGS_REFRESH_SUCCESS");
  222.         }
  223.     }
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement