Лабораторная работа №6
Разделить программу из лабораторной работы №5 на клиентский и серверный модули. Серверный модуль должен осуществлять выполнение команд по управлению коллекцией. Клиентский модуль должен в интерактивном режиме считывать команды, передавать их для выполнения на сервер и выводить результаты выполнения.
Необходимо выполнить следующие требования:
Операции обработки объектов коллекции должны быть реализованы с помощью Stream API с использованием лямбда-выражений.
Объекты между клиентом и сервером должны передаваться в сериализованном виде.
Объекты в коллекции, передаваемой клиенту, должны быть отсортированы по местоположению
Клиент должен корректно обрабатывать временную недоступность сервера.
Обмен данными между клиентом и сервером должен осуществляться по протоколу UDP
Для обмена данными на сервере необходимо использовать сетевой канал
Для обмена данными на клиенте необходимо использовать датаграммы
Сетевые каналы должны использоваться в неблокирующем режиме.
Обязанности серверного приложения:
Работа с файлом, хранящим коллекцию.
Управление коллекцией объектов.
Назначение автоматически генерируемых полей объектов в коллекции.
Ожидание подключений и запросов от клиента.
Обработка полученных запросов (команд).
Сохранение коллекции в файл при завершении работы приложения.
Сохранение коллекции в файл при исполнении специальной команды, доступной только серверу (клиент такую команду отправить не может).
Серверное приложение должно состоять из следующих модулей (реализованных в виде одного или нескольких классов):
Модуль приёма подключений.
Модуль чтения запроса.
Модуль обработки полученных команд.
Модуль отправки ответов клиенту.
Сервер должен работать в однопоточном режиме.
Обязанности клиентского приложения:
Чтение команд из консоли.
Валидация вводимых данных.
Сериализация введённой команды и её аргументов.
Отправка полученной команды и её аргументов на сервер.
Обработка ответа от сервера (вывод результата исполнения команды в консоль).
Команду save из клиентского приложения необходимо убрать.
Команда exit завершает работу клиентского приложения.