Всем привет. Появилась необходимость в создании приложения, являющегося своего родом "лаунчером" (запускатором) для одной игры.
Единственная загвоздка, с которой я столкнулся - правильное обновление файлов игры.
Видов обновления может быть два:
- Полное обновление
- Частичное обновление
Если с первым пунктом все более-менее понятно (архив со всеми файлами загружаем и распаковываем), то со вторым пунктом не особо. Нет, конечно, можно при запуске приложения проверять версию программы и сравнивать с последней, той, что на сервере. Если локального файла версии нет, то качать полное обновление и прописывать версию из архива с этим обновлением, после чего снова сравнивать версию и если различается, то качать патч для этой версии и накатывать обновление сверху.
Вопрос первый: Насколько эффективно и эстетично обновление посредством загрузки патчей? То есть, версия будет иметь формат:
3.2.11.25. При запуске приложения/проверки наличия обновлений и загрузки обновлений будет проверяться версия. Если версия не соответствует, будет осуществляться проверка на то, какая из блоков цифр в версии отличается. То есть, если у пользователя версия
3.2.11.10, а на сервере
3.2.11.25, то качаться будут версии с *.*.*.10 по *.*.*.25 по очереди и накатывать патчи каждой из этих версий. А на сервере будет храниться какой нибудь файл с версиями, где они все будут перечисляться.
Вопрос второй: Как по-вашему мнению реализовано это у Steam? Загрузка по частям заголовками? Трафик во-время загрузки файлов идет через 80 порт с серверов Valve и content-type там
application/octet-stream. Значит я прав? Но ведь не один большой файл таким образом качается, а много мелких, значит это просто отдача файлов таким образом у них осуществляется.
Как у них осуществляется проверка наличия даже самого ненужного файла? Удалил файл из каталога, а он берет и докачивает его. Проверяет перед запуском все каталоги на время изменения и сравнивает с серверными?
Вопрос третий: Насколько эффективно будет сравнивать время изменения каталогов у пользователя и сравнивать с серверными? Ведь если даже в самой глубокой директории был изменен/удален/создан файл, то самый верхний по иерархии каталог будет иметь дату изменения ту, когда был затронут файл. Соответственно, таким образом можно избежать большого количества рекурсивных проверок.
И, соответственно, обновиться будет проще. Удаляем измененный каталог и закачиваем заново.
Какое ваше мнение? Можете что то подсказать по-этому поводу?