Продолжаем разбор кухни апдейтера. Есть одна вещь, без которой весь механизм превращается в лотерею, это манифест обновления, тот самый UpdateInfo.xml. По сути это карта, какие файлы должны быть у клиента, где они лежат и какие у них параметры. Если карта неверная, дальше уже неважно, насколько красивый у вас launcher.

Когда апдейтер стартует проверку, он опирается именно на эту карту. Он не угадывает по папке клиента и не надеется на удачу. Он идет по списку и проверяет каждый файл по правилам.

Правильная проверка всегда многоступенчатая. Сначала наличие файла. Потом размер. И только потом хеш сумма. Почему так. Потому что размер это быстрый фильтр, а хеш это проверка содержимого. Файл может быть того же веса, но совсем другим по данным. Именно поэтому без хеша вы получаете невидимые поломки, которые вылезают уже в игре.

Принцип работы CRC32

В этой задаче часто используют CRC32. Не потому что так модно, а потому что это быстрый и практичный вариант для массовой проверки файлов в патч системах. Он хорошо подходит там, где важны скорость прохода и надежная фиксация изменений. Один байт поменялся и контрольная сумма уже другая.

Дальше начинается самое важное. Если файл не прошел проверку, апдейтер не просто пишет ошибку и сдается. Он ставит файл в очередь на загрузку, скачивает архив, распаковывает, потом снова проверяет целостность. Если что то пошло не так, делает повторную попытку. Вот эта связка скачал, распаковал, перепроверил и делает систему взрослой.

Про ошибки и несовпадения в UpdateInfo.xml

Где обычно рвется процесс у админов. Несовпадение между свежим UpdateInfo.xml и набором архивов на хосте. Или выкладка наспех, когда часть файлов еще от старого билда. Визуально кажется, что все загружено, а по факту клиент получает конфликт версий и вы получаете очередь в поддержку.

Если хочется меньше аварий после релиза, дисциплина простая. Сначала корректный билд и манифест. Потом публикация. Потом тестовый прогон quick и full на чистом клиенте. И только после этого анонс игрокам.

И да, UpdateInfo.xml это не служебный файлик для галочки. Это центр управления обновлением. Пока это понимает команда, апдейты проходят ровно. Когда про это забывают, начинаются мистические баги.