123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- 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 authorizedCard;
- private boolean isAuthorized;
- private User user;
- /**
- * @param socket сокет клиента
- */
- public Client(Socket socket) throws IOException {
- this.socket = socket;
- this.is = this.socket.getInputStream();
- this.os = this.socket.getOutputStream();
- authorizedCard = false;
- isAuthorized = false;
- }
- @Override
- public void run() {
- try {
- // Принимаем сообщение от клиента
- ObjectInputStream objectInputStream = new ObjectInputStream(is);
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(os);
- while (!isInterrupted()) {
- Header header = (Header) objectInputStream.readObject();
- switch (header.Type) {
- case USER:
- if (header.Data instanceof UserTransport) {
- UserTransport ut = (UserTransport) header.Data;
- switch (ut.Type) {
- case AUTHORIZATION:
- isAuthorized = Bank.authorizedUser(ut.Login, ut.Password);
- System.out.println(String.format("Пользователь %s авторизовался", ut.Login));
- objectOutputStream.writeObject(new SendMessage("С возвращением!"));
- objectOutputStream.flush();
- objectOutputStream.reset();
- continue;
- case REGISTRATION:
- Bank.registerUser(new User(ut.Name, ut.Phone, ut.Login, ut.Password));
- objectOutputStream.writeObject(new SendMessage("Поздравляем! Вы успешно зарегистрировались!"));
- objectOutputStream.flush();
- objectOutputStream.reset();
- continue;
- }
- }
- break;
- case BILL:
- if (header.Data instanceof BillTransport) {
- BillTransport bt = (BillTransport) header.Data;
- switch (bt.TYPE) {
- case AUTHORIZATION:
- System.out.println("Авторизация");
- authorizedCard = Bank.authorization(bt.BILL_NUMBER, bt.PIN);
- if (authorizedCard) {
- objectOutputStream.writeObject(new SendMessage("Авторизация карты успешно"));
- } else {
- objectOutputStream.writeObject(new SendMessage("В авторизации отказано"));
- }
- objectOutputStream.flush();
- objectOutputStream.reset();
- continue;
- case SIGN_CONTRACT:
- System.out.println("Открытие счёта");
- SecretData secretData = Bank.insert(user, bt.BALANCE);
- objectOutputStream.writeObject(secretData);
- objectOutputStream.flush();
- continue;
- case BREAK_CONTRACT:
- System.out.println("Закрытие счёта");
- if (!authorizedCard) {
- System.out.println("Для совершения операций со счётом необходимо авторизоваться");
- objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
- objectOutputStream.flush();
- continue;
- }
- Bank.delete(bt.BILL_NUMBER);
- break;
- case DEPOSIT:
- System.out.println("Пополнение");
- if (!authorizedCard) {
- System.out.println("Для совершения операций со счётом необходимо авторизоваться");
- objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
- objectOutputStream.flush();
- continue;
- }
- Bank.deposit(bt.BALANCE, bt.BILL_NUMBER);
- break;
- case WITHDRAW:
- System.out.println("Снятие");
- if (!authorizedCard) {
- System.out.println("Для совершения операций со счётом необходимо авторизоваться");
- objectOutputStream.writeObject(new SendMessage("Действие не выполнено! Необходимо авторизоваться."));
- objectOutputStream.flush();
- continue;
- }
- Bank.withdraw(bt.BALANCE, bt.BILL_NUMBER);
- break;
- }
- }
- break;
- }
- objectOutputStream.writeObject(new SendMessage("Нет действий..."));
- objectOutputStream.flush();
- }
- } catch (ClassNotFoundException | IOException exception) {
- if (exception.getMessage() != null) {
- System.out.println(exception.getMessage());
- }
- interrupt();
- }
- System.out.println(new Timestamp(System.currentTimeMillis()) + " Client disconnected: " + socket.getInetAddress().getHostAddress());
- try {
- is.close();
- os.close();
- socket.close();
- } catch (IOException exception) {
- System.out.println(exception.getMessage());
- }
- }
- }
|