123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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());
- }
- }
- }
|