Client.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package com.company;
  2. import java.io.*;
  3. import java.net.Socket;
  4. import java.sql.Timestamp;
  5. class SendMessage implements Serializable {
  6. public String msg;
  7. public SendMessage(String msg) {
  8. this.msg = msg;
  9. }
  10. }
  11. public class Client extends Thread {
  12. private Socket socket;
  13. private InputStream is;
  14. private OutputStream os;
  15. private boolean authorized;
  16. /**
  17. * @param socket сокет клиента
  18. */
  19. public Client(Socket socket) throws IOException {
  20. this.socket = socket;
  21. this.is = this.socket.getInputStream();
  22. this.os = this.socket.getOutputStream();
  23. authorized = false;
  24. }
  25. @Override
  26. public void run() {
  27. while (!isInterrupted()) {
  28. try {
  29. // Принимаем сообщение от клиента
  30. ObjectInputStream objectInputStream = new ObjectInputStream(is);
  31. ObjectOutputStream objectOutputStream = new ObjectOutputStream(os);
  32. UserMessage userMessage = (UserMessage) objectInputStream.readObject();
  33. switch (userMessage.TYPE) {
  34. case AUTHORIZATION:
  35. authorized = Bank.authorization(userMessage.BILL_NUMBER, userMessage.PIN);
  36. break;
  37. case SIGN_CONTRACT:
  38. SecretData secretData = Bank.insert(userMessage.PASSPORT, userMessage.PHONE, userMessage.FULLNAME, userMessage.BALANCE);
  39. objectOutputStream.writeObject(secretData);
  40. objectOutputStream.flush();
  41. continue;
  42. case BREAK_CONTRACT:
  43. if (!authorized) {
  44. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  45. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  46. objectOutputStream.flush();
  47. continue;
  48. }
  49. Bank.delete(userMessage.BILL_NUMBER);
  50. break;
  51. case DEPOSIT:
  52. if (!authorized) {
  53. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  54. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  55. objectOutputStream.flush();
  56. continue;
  57. }
  58. Bank.deposit(userMessage.BALANCE, userMessage.BILL_NUMBER);
  59. break;
  60. case WITHDRAW:
  61. if (!authorized) {
  62. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  63. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  64. objectOutputStream.flush();
  65. continue;
  66. }
  67. Bank.withdraw(userMessage.BALANCE, userMessage.BILL_NUMBER);
  68. break;
  69. }
  70. // Посылаем ответ с результатом работы для не обработанных действий
  71. objectOutputStream.writeObject(new SendMessage("Действие успешно выполнено"));
  72. objectOutputStream.flush();
  73. } catch (ClassNotFoundException | IOException exception) {
  74. System.out.println(new Timestamp(System.currentTimeMillis()) + " Client disconnected: " + socket.getInetAddress().getHostAddress());
  75. if (exception.getMessage() != null) {
  76. System.out.println(exception.getMessage());
  77. }
  78. interrupt();
  79. }
  80. }
  81. try {
  82. is.close();
  83. os.close();
  84. socket.close();
  85. } catch (IOException exception) {
  86. System.out.println(exception.getMessage());
  87. }
  88. }
  89. }