package com.company; import java.io.*; import java.net.Socket; import java.sql.Timestamp; class SendMessage implements Serializable { public String msg; public SendMessage(String msg) { this.msg = msg; } } public class Client extends Thread { private Socket socket; private InputStream is; private OutputStream os; private boolean authorized; /** * @param socket сокет клиента */ public Client(Socket socket) throws IOException { this.socket = socket; this.is = this.socket.getInputStream(); this.os = this.socket.getOutputStream(); authorized = false; } @Override public void run() { while (!isInterrupted()) { try { // Принимаем сообщение от клиента ObjectInputStream objectInputStream = new ObjectInputStream(is); ObjectOutputStream objectOutputStream = new ObjectOutputStream(os); UserMessage userMessage = (UserMessage) objectInputStream.readObject(); switch (userMessage.TYPE) { case AUTHORIZATION: authorized = Bank.authorization(userMessage.BILL_NUMBER, userMessage.PIN); break; case SIGN_CONTRACT: SecretData secretData = Bank.insert(userMessage.PASSPORT, userMessage.PHONE, userMessage.FULLNAME, userMessage.BALANCE); objectOutputStream.writeObject(secretData); objectOutputStream.flush(); continue; case BREAK_CONTRACT: if (!authorized) { System.out.println("Для совершения операций со счётом необходимо авторизоваться"); objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться.")); objectOutputStream.flush(); continue; } Bank.delete(userMessage.BILL_NUMBER); break; case DEPOSIT: if (!authorized) { System.out.println("Для совершения операций со счётом необходимо авторизоваться"); objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться.")); objectOutputStream.flush(); continue; } Bank.deposit(userMessage.BALANCE, userMessage.BILL_NUMBER); break; case WITHDRAW: if (!authorized) { System.out.println("Для совершения операций со счётом необходимо авторизоваться"); objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться.")); objectOutputStream.flush(); continue; } Bank.withdraw(userMessage.BALANCE, userMessage.BILL_NUMBER); break; } // Посылаем ответ с результатом работы для не обработанных действий objectOutputStream.writeObject(new SendMessage("Действие успешно выполнено")); objectOutputStream.flush(); } catch (ClassNotFoundException | IOException exception) { System.out.println(new Timestamp(System.currentTimeMillis()) + " Client disconnected: " + socket.getInetAddress().getHostAddress()); if (exception.getMessage() != null) { System.out.println(exception.getMessage()); } interrupt(); } } try { is.close(); os.close(); socket.close(); } catch (IOException exception) { System.out.println(exception.getMessage()); } } }