Patch Builder — что, зачем, и как пользоваться?

В данном посте постараюсь подробно рассказать про наш билдер для файлов, зачем он нужен, и как собрать патч для своего апдейтера.
Принцип работы Patch Builder
Билдер — это программа которая подготавливает файлы к тому чтобы с ними мог работать апдейтер. Подготовка происходит в несколько основных этапов:
- Считывание информации о файлах и папках.
- Синхронизация с созданным ранее патчем.
- Построение карты файлов для апдейтера.
- Удаление из патча не участвующих файлов.
- Запаковка всех файлов по отдельности.
Сбор информации
Для того чтобы гарантировать правильно скаченные при апдейте файлы в билдере мы собираем информацию о файлах которая включает имя, размер и самое главное Hash сумму.
Hash сумма — это специфичный идентификатор файла, который высчитывается математическими алгоритмами на основе информации которая содержится в нем. В данный момент мы используем алгоритм CRC32 с точки зрения оптимизации и ускорения процесса сбора информации. При любом изменении файла его хеш-сумма изменится даже если размер останется прежним.
Пример строки с информацией о файле, где 4144 это размер в байтах, а dbc44dcf это хеш сумма: L2.ini 4144 dbc44dcf
Синхронизация.

Если вы уже создали патч для своего клиента не спешите его удалять. В нашем билдере присутствует система синхронизации которая сравнивает прошлый патч с новыми файлами. Магия происходит после сравнения виртуального дерева файлов нового патча с картой файлов ранее созданного патча (UpdateInfo.xml). Результат синхронизации отображается на виртуальном дереве файлов цветовыми индикаторами:

- Зеленый — новый файл.
- Синий — измененный файл.
- Черный — нетронутый файл.
- Красный — удаленный файл.
Сборка
Сборка начинается с превращения виртуального дерева файлов в плоский вид тестового файлика формата xml, назовем ее картой файлов апдейта. В этом файлике содержится вся информация которая потребуется апдейтеру для успешного обновления. Подробнее можно узнать в посте про Updater.

После чего сначала удаляются файлы которые уже не участвуют в новом патче. И наконец происходит запаковка каждого файла в архив с помощью Zip алгоритма с параметром best compression.
После сборки результат билда откроется автоматически.
Как же пользоваться?
Запустите UpdateBuilder.exe. В левой части выберите или перетащите папку с новым патчем. После выбора начнет загружаться информация о файлах. Подробная информация о происходящем пишется в окно логирования.

После построения виртуальной карты файлов пора выбрать папку в которую сохранять результат патча. Если вы уже делали билд выбирайте ту же папку для синхронизации файлов. Если делаете патч в первый раз выбирайте пустую папку.

Синхронизация прошла, и мы получили полную информацию о файлах, что же дальше? А дальше мы можем приступить к настройке параметров файлов в обновлении. В нашей системе есть два вида параметров:
- Участвует ли файл в быстрой (критической) проверке.
- Требуется ли проверять файл на размер и хеш-сумму при обновлении.
Данным параметрам соответствуют два переключателя у каждого файла. Те же переключатели на папках меняют у всех зависимых элементов.

Подробнее про быстрое\критическое обновление

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

Иногда требуется не проверять файлы на изменения а только на наличие, но такие файлы должны лежать в файлах патча, как быть? Просто отключить проверку таких файлов на этапе сборки патча. Примерами файлов могут быть любые пользовательские настройки: «Option.ini», «WindowsInfo.ini», «chatfilter.ini», «User.ini» . Файлы с отключенным флагом будут скачиваться только если отсутствуют у игрока.
Все настройки по умолчанию включены.
После того как все синхронизовано и настроено остается нажать на кнопку «Начать упаковку» и запусть сборку. Вся информация так же отображается в логе, а папка с результатом откроется автоматически.
Останется только скопировать файлы на хост и дать ссылку мне.
В заключении
Напомню всем что исходники билдера находятся в общем доступе на GitHub, буду рад любой активности.
Что ж на этом все, спасибо за внимание! Надеюсь вопросов не осталось, но если все же есть — welcome на форму связи.