Client.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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 authorizedCard;
  16. private boolean isAuthorized;
  17. private User user;
  18. /**
  19. * @param socket сокет клиента
  20. */
  21. public Client(Socket socket) throws IOException {
  22. this.socket = socket;
  23. this.is = this.socket.getInputStream();
  24. this.os = this.socket.getOutputStream();
  25. authorizedCard = false;
  26. isAuthorized = false;
  27. }
  28. @Override
  29. public void run() {
  30. try {
  31. // Принимаем сообщение от клиента
  32. ObjectInputStream objectInputStream = new ObjectInputStream(is);
  33. ObjectOutputStream objectOutputStream = new ObjectOutputStream(os);
  34. while (!isInterrupted()) {
  35. Header header = (Header) objectInputStream.readObject();
  36. switch (header.Type) {
  37. case USER:
  38. if (header.Data instanceof UserTransport) {
  39. UserTransport ut = (UserTransport) header.Data;
  40. switch (ut.Type) {
  41. case AUTHORIZATION:
  42. user = Bank.authorizedUser(ut.Login, ut.Password);
  43. if (user != null) {
  44. System.out.println(String.format("Пользователь %s авторизовался", user.getName()));
  45. objectOutputStream.writeObject(new SendMessage("С возвращением, " + user.getName()));
  46. } else {
  47. System.out.println("Пользователь ввел не верный логин/пароль");
  48. objectOutputStream.writeObject(new SendMessage("Неверный логин/пароль"));
  49. }
  50. objectOutputStream.flush();
  51. objectOutputStream.reset();
  52. continue;
  53. case REGISTRATION:
  54. Bank.registerUser(new User(ut.Name, ut.Phone, ut.Login, ut.Password));
  55. objectOutputStream.writeObject(new SendMessage("Поздравляем! Вы успешно зарегистрировались!"));
  56. objectOutputStream.flush();
  57. objectOutputStream.reset();
  58. continue;
  59. }
  60. }
  61. break;
  62. case BILL:
  63. if (header.Data instanceof BillTransport) {
  64. BillTransport bt = (BillTransport) header.Data;
  65. switch (bt.TYPE) {
  66. case AUTHORIZATION:
  67. System.out.println("Авторизация");
  68. authorizedCard = Bank.authorization(bt.BILL_NUMBER, bt.PIN);
  69. if (authorizedCard) {
  70. objectOutputStream.writeObject(new SendMessage("Авторизация карты успешно"));
  71. } else {
  72. objectOutputStream.writeObject(new SendMessage("В авторизации отказано"));
  73. }
  74. objectOutputStream.flush();
  75. objectOutputStream.reset();
  76. continue;
  77. case SIGN_CONTRACT:
  78. System.out.println("Открытие счёта");
  79. SecretData secretData = Bank.insert(user, bt.BALANCE);
  80. objectOutputStream.writeObject(secretData);
  81. objectOutputStream.flush();
  82. continue;
  83. case BREAK_CONTRACT:
  84. System.out.println("Закрытие счёта");
  85. if (!authorizedCard) {
  86. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  87. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  88. objectOutputStream.flush();
  89. continue;
  90. }
  91. Bank.delete(bt.BILL_NUMBER);
  92. break;
  93. case DEPOSIT:
  94. System.out.println("Пополнение");
  95. if (!authorizedCard) {
  96. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  97. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  98. objectOutputStream.flush();
  99. continue;
  100. }
  101. Bank.deposit(bt.BALANCE, bt.BILL_NUMBER);
  102. break;
  103. case WITHDRAW:
  104. System.out.println("Снятие");
  105. if (!authorizedCard) {
  106. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  107. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  108. objectOutputStream.flush();
  109. continue;
  110. }
  111. Bank.withdraw(bt.BALANCE, bt.BILL_NUMBER);
  112. break;
  113. }
  114. }
  115. break;
  116. }
  117. objectOutputStream.writeObject(new SendMessage("Нет действий..."));
  118. objectOutputStream.flush();
  119. }
  120. } catch (ClassNotFoundException | IOException exception) {
  121. if (exception.getMessage() != null) {
  122. System.out.println(exception.getMessage());
  123. }
  124. }
  125. System.out.println(new Timestamp(System.currentTimeMillis()) + " Client disconnected: " + socket.getInetAddress().getHostAddress());
  126. try {
  127. is.close();
  128. os.close();
  129. socket.close();
  130. } catch (IOException exception) {
  131. System.out.println(exception.getMessage());
  132. }
  133. }
  134. }