Files
2026-04-13 01:01:04 +03:00

5.0 KiB

Техническое задание к программе

Необходимо выполнить следующие требования:

  • Операции обработки объектов коллекции должны быть реализованы с помощью Stream API с использованием лямбда-выражений.
  • Объекты между клиентом и сервером должны передаваться в сериализованном виде.
  • Объекты в коллекции, передаваемой клиенту, должны быть отсортированы по названию
  • Клиент должен корректно обрабатывать временную недоступность сервера.
  • Обмен данными между клиентом и сервером должен осуществляться по протоколу UDP
  • Для обмена данными на сервере необходимо использовать датаграммы
  • Для обмена данными на клиенте необходимо использовать сетевой канал
  • Сетевые каналы должны использоваться в неблокирующем режиме.

Обязанности серверного приложения:

  • Работа с файлом, хранящим коллекцию.
  • Управление коллекцией объектов.
  • Назначение автоматически генерируемых полей объектов в коллекции.
  • Ожидание подключений и запросов от клиента.
  • Обработка полученных запросов (команд).
  • Сохранение коллекции в файл при завершении работы приложения.
  • Сохранение коллекции в файл при исполнении специальной команды, доступной только серверу (клиент такую команду отправить не может).

Серверное приложение должно состоять из следующих модулей (реализованных в виде одного или нескольких классов):

  • Модуль приёма подключений.
  • Модуль чтения запроса.
  • Модуль обработки полученных команд.
  • Модуль отправки ответов клиенту.

Сервер должен работать в однопоточном режиме.

Обязанности клиентского приложения:

  • Чтение команд из консоли.
  • Валидация вводимых данных.
  • Сериализация введённой команды и её аргументов.
  • Отправка полученной команды и её аргументов на сервер.
  • Обработка ответа от сервера (вывод результата исполнения команды в консоль).
  • Команду save из клиентского приложения необходимо убрать.
  • Команда exit завершает работу клиентского приложения.

Важно! Команды и их аргументы должны представлять из себя объекты классов. Недопустим обмен "простыми" строками. Так, для команды add или её аналога необходимо сформировать объект, содержащий тип команды и объект, который должен храниться в вашей коллекции.

Принцип работы клиентской части

  1. ввод команды
  2. валидация команды (без запроса на сервер, у клиента должна быть информация о доступных командах)
  3. ввод аргументов
  4. запрос на сервер
  5. обработка ответа от сервера
  6. вывод информации

Принцип работы серверного приложения

  1. подключение
  2. получение запроса
  3. выполнение команды
  4. отправка ответа

Примечания

  1. сервер может работать сразу с несколькими клиентами, но не параллельно
  2. клиент продолжает работать даже если сервер -- нет (должно быть информирование пользователя о том, что сервер умер + попытки подключения раз в N секунд)
  3. Общение между клиентом и сервером должно быть в виде json строк