/Lab6

Primary LanguageJava

Lab 5-7

Было реализованно консольное приложения, которое предоставляет управление коллекцией объектов в интерактивном режиме. В коллекции хранятся объекты класса Flat.

В интерактивном режиме программа должна поддерживать выполнение следующих команд:
help - вывести справку по доступным командам
info - вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)
show - вывести в стандартный поток вывода все элементы коллекции в строковом представлении
add {element} - добавить новый элемент в коллекцию
update id {element} - обновить значение элемента по id
remove by id {element} - удалить элемент из коллекции по id
clear - очистить коллекцию
execute_script filename - считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме
exit : завершить программу add_if_min {element} : добавить новый элемент в коллекцию, если его значение меньше, чем у наименьшего элемента этой коллекции
remove_lower {element} : удалить из коллекции все элементы, меньшие, чем заданный
reorder : отсортировать коллекцию в порядке, обратном нынешнему
remove_all_by_house house : удалить из коллекции все элементы, значение поля house которого эквивалентно заданному
average_of_number_of_rooms : вывести среднее значение поля numberOfRooms для всех элементов коллекции
max_by_furniture : вывести любой объект из коллекции, значение поля furniture которого является максимальным

Серверная часть реализует:

  1. Приём подключений
  2. Чтение запроса
  3. Обработка полученных заказов
  4. Отправка ответа клименту

Клиент корректно обрабатывает временную недоступность сервера.
Обмен данными между клиентом и сервером осуществляется по протоколу TCP
Для обмена данными на сервере используется сетевой канал
Для обмена данными на клиенте используется потоки ввода-вывода

Для хранения данных используется реляционная СУБД (PostgresQL).
Организована возможность регистрации и авторизации пользователей.
У пользователя есть возможность указать пароль.
Пароли при хранении хэшируются алгоритмом SHA-256
Запрещено выполнение команд не авторизованным пользователям.
При хранении объектов сохраняется информация о пользователе, который создал этот объект.
Пользователи имеют возможность просмотра всех объектов коллекции, но модифицировать могут только принадлежащие им.
Для идентификации пользователя отправляется логин и пароль с каждым запросом.

Реализована многопоточная обработка запросов.

  1. Для многопоточного чтения запросов использовано создание нового потока (java.lang.Thread)
  2. Для многопотчной обработки полученного запроса использован Cached thread pool
  3. Для многопоточной отправки ответа использовано создание нового потока (java.lang.Thread)

Данный репозиторий - это реализация серверной части
Клиентская часть находится в репозитории client