Перекачать файлики...
Подумалось, что может работать так:
- Клиент запрашивает Пакет и получает в ответ сообщение об начале подготовки Пакета.
- Сервер, получив запрос на Пакет, создает пустой список файлов с отметкой об начале и на базе этого списка отсылает сообщение об начале подготовки Пакета. Сами файлы в этот момент не создаются, но запускается процедура их создания.
- Клиент запрашивает "Следующий Файл", не зная есть ли файл на сервер (да, похоже на поллинг) и получает один из 4-х ответов (и => реакции):
- - Файл готов, имя файла => запрос к Серверу на передачу файла
- - Файлов больше нет => заканчиваем докачку длинных/медленных файлов и завершаем процесс получения Пакета.
- - Не готово, ждите х секунд => просто тупо ждем указанный период, потом повторяем запрос "Следующий Файл"
-
- Произошла ошибка => терминируем закачку, выкидываем в мусорник все полученное до этого
На Сервере.
По получении запроса Пакета создается пустой "Список Файлов" (не реальные файлы, а лишь список) с записью "Генерация Начата 01/03/2019 16:20" и запускается процесс генерации.
В начале генерации файла создается запись об Файле с маркером - "Генерация Файла Начата", по окончании маркер меняется на "Генерация Файла Закончена". При ошибке маркер меняем на "Ошибка Генерации".
Когда последний из необходимых файлов поступил в генерацию в "Список Файлов" помещается запись "Больше файлов не будет".
По окончанию генерации последнего файла в "Список Файлов" пишем "Генерация завершена".
При получении запроса "Следующий Файл" выполняется:
- "Список Файлов" проверяется на маркер "Ошибка Генерации". Если такой есть - формируется ответ "Произошла Ошибка";
- Берется первая запись из "Списка Файлов" с маркером "Генерация Файла Закончена" и маркер заменяется на "Начата Передача Клиенту". По окончании передачи маркер меняется на "Передача Клиенту завершена".
- При отсутствии маркеров "Генерация Файла Закончена" и записи "Генерация завершена" - формируется ответ "Не готово, ждите х секунд"
- При наличии записи "Генерация завершена" и отсутствии маркеров "Генерация Файла Закончена" Сервер отвечает "Файлов больше нет".
Потенциальная проблемы:
- не отслеживаются ошибки передачи файлоv, но можно добавить МД5 в "Файл Готов" и обязать Клиента сообщать "Файл Получен, имя файла"
- не отслеживаются ошибки некорректной смены маркеров. Можно добавить запрос "Текущий Статус" с ответом "Все Хорошо" и "Жопа, однако..."