Client.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. isAuthorized = Bank.authorizedUser(ut.Login, ut.Password);
  43. System.out.println(String.format("Пользователь %s авторизовался", ut.Login));
  44. objectOutputStream.writeObject(new SendMessage("С возвращением!"));
  45. objectOutputStream.flush();
  46. objectOutputStream.reset();
  47. continue;
  48. case REGISTRATION:
  49. Bank.registerUser(new User(ut.Name, ut.Phone, ut.Login, ut.Password));
  50. objectOutputStream.writeObject(new SendMessage("Поздравляем! Вы успешно зарегистрировались!"));
  51. objectOutputStream.flush();
  52. objectOutputStream.reset();
  53. continue;
  54. }
  55. }
  56. break;
  57. case BILL:
  58. if (header.Data instanceof BillTransport) {
  59. BillTransport bt = (BillTransport) header.Data;
  60. switch (bt.TYPE) {
  61. case AUTHORIZATION:
  62. System.out.println("Авторизация");
  63. authorizedCard = Bank.authorization(bt.BILL_NUMBER, bt.PIN);
  64. if (authorizedCard) {
  65. objectOutputStream.writeObject(new SendMessage("Авторизация карты успешно"));
  66. } else {
  67. objectOutputStream.writeObject(new SendMessage("В авторизации отказано"));
  68. }
  69. objectOutputStream.flush();
  70. objectOutputStream.reset();
  71. continue;
  72. case SIGN_CONTRACT:
  73. System.out.println("Открытие счёта");
  74. SecretData secretData = Bank.insert(user, bt.BALANCE);
  75. objectOutputStream.writeObject(secretData);
  76. objectOutputStream.flush();
  77. continue;
  78. case BREAK_CONTRACT:
  79. System.out.println("Закрытие счёта");
  80. if (!authorizedCard) {
  81. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  82. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  83. objectOutputStream.flush();
  84. continue;
  85. }
  86. Bank.delete(bt.BILL_NUMBER);
  87. break;
  88. case DEPOSIT:
  89. System.out.println("Пополнение");
  90. if (!authorizedCard) {
  91. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  92. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  93. objectOutputStream.flush();
  94. continue;
  95. }
  96. Bank.deposit(bt.BALANCE, bt.BILL_NUMBER);
  97. break;
  98. case WITHDRAW:
  99. System.out.println("Снятие");
  100. if (!authorizedCard) {
  101. System.out.println("Для совершения операций со счётом необходимо авторизоваться");
  102. objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
  103. objectOutputStream.flush();
  104. continue;
  105. }
  106. Bank.withdraw(bt.BALANCE, bt.BILL_NUMBER);
  107. break;
  108. }
  109. }
  110. break;
  111. }
  112. objectOutputStream.writeObject(new SendMessage("Нет действий..."));
  113. objectOutputStream.flush();
  114. }
  115. } catch (ClassNotFoundException | IOException exception) {
  116. if (exception.getMessage() != null) {
  117. System.out.println(exception.getMessage());
  118. }
  119. interrupt();
  120. }
  121. System.out.println(new Timestamp(System.currentTimeMillis()) + " Client disconnected: " + socket.getInetAddress().getHostAddress());
  122. try {
  123. is.close();
  124. os.close();
  125. socket.close();
  126. } catch (IOException exception) {
  127. System.out.println(exception.getMessage());
  128. }
  129. }
  130. }