upnova-1

Updater, апдейтер, апдейдор, апдатер, launcher, лаунчер, обновлятор

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

Подготовка и запаковка файлов.

Update Builder

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

Данная программа не только максимально сжимает файлы с помощью Zip библиотек, а также списывает с файлов контрольные хеш суммы и их рамеры. Для расчета хеш сумм используется алгоритм CRC32 о котором будет рассказано подробнее в следующих топиках. Для файлов генерируется карта файлов в формате xml, для того чтоб апдейтер знал с что же ему предстоит качать.

Карта файлов в UpdaterInfo.xml

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

Загрузка файлов и их обработка.

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

У нас есть информация по файлам, которые не прошли проверку, что же дальше?

Бекапим, качаем, распаковываем, все делаем в одно время.

Для скачивания и распаковки организованно две очереди-конвейера. Они ждут продукты как конвейеры на фабриках. Как только загрузился архив файла он сразу же переходит в очередь на распаковку, что позволяет не ждать пока распакуется скачанный файл, а начать качать следующий.

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

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

Итоги:

И так, подводя итог, что же такое апдейтер в 3х пунктах:

  1. Сбор информации по файлам
  2. Проверка файлов по трем уровням
  3. Скачивание и распаковка не прошедших проверку файлов.

Сложно ли это? Думаю, нет, но даже тут есть уйма подводных камней.

Что ж на этом все, спасибо за внимание!

По всем вопросам welcome на форму связи.

Screenshot_10

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

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

Patch Builder

Билдер – это программа которая подготавливает файлы к тому чтобы с ними мог работать апдейтер. Подготовка происходит в несколько основных этапов:

  1. Считывание информации о файлах и папках.
  2. Синхронизация с созданным ранее патчем.
  3. Построение карты файлов для апдейтера.
  4. Удаление из патча не участвующих файлов.
  5. Запаковка всех файлов по отдельности.

Сбор информации

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

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

Пример строки с информацией о файле, где 4144 это размер в байтах, а dbc44dcf это хеш сумма: L2.ini 4144 dbc44dcf

Синхронизация

Patch Builder

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

Patch Builder
  • Зеленый – новый файл.
  • Синий – измененный файл.
  • Черный – нетронутый файл.
  • Красный – удаленный файл.

Сборка

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

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

После сборки результат билда откроется автоматически.

Как же пользоваться?

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

Patch Builder

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

Patch Builder

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

  1. Участвует ли файл в быстрой (критической) проверке.
  2. Требуется ли проверять файл на размер и хеш-сумму при обновлении.

Данным параметрам соответствуют два переключателя у каждого файла. Те же переключатели на папках меняют у всех зависимых элементов.

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

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

Подробнее про проверку на размер и Hash

Все настройки по умолчанию включены.

После того как все синхронизовано и настроено остается нажать на кнопку “Начать упаковку” и запусть сборку. Вся информация так же отображается в логе, а папка с результатом откроется автоматически.

Останется только скопировать файлы на хост и дать ссылку мне.

В заключении

Напомню всем что исходники билдера находятся в общем доступе на GitHub, буду рад любой активности.

Что ж на этом все, спасибо за внимание! Теперь вы немного узнали как создать апдейтер л2 и как работает наш билдер файлов патча lineage 2 (и не только) . Надеюсь вопросов не осталось, но если все же есть – welcome на форму связи