Веб-обновление (Web Updater)

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску

Ren'Py включает в себя инструмент для обновления, который может автоматически скачивать и устанавливать обновления для игр, созданных на этом движке и размещенных на сайте. Это может быть полезно для поддержания большой по объему игры в актуальном состоянии.


Инструмент обновления работает автоматически, выполняя следующие действия:

  1. Скачивание индексного файла, который управляет процессом обновления.
  2. Направление запроса пользователя для подтверждения начала процесса обновления.
  3. Создание файла архива из файлов, расположенных на локальном диске.
  4. Скачивание файла, управляющего процессом обновления, с помощью утилиты zsync с сервера.
  5. Использование утилиты zsync для обновления файла архива до версии, которая расположена на сервере. Zsync автоматически вычисляет различия между двумя файлами и пытается скачать только те части, которые были изменены.
  6. Распаковка архива, замена файлов на локальный диск.
  7. Удаление промежуточных файлов между старой и новой версией.
  8. Перезагрузка игры.


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

Требования к серверу (Server Requirements)[править | править код]

Для корректного функционирования инструмента обновления необходимо разместить игру на собственном хостинге. У вас должна быть возможность напрямую скачивать файлы обновления, переходя по соответствующему URL-адресу, а также ваш сервер должен поддерживать запросы диапазона HTTP. Это означает, что вам потребуется оплачивать хостинг, так как файлообменные сайты обычно не поддерживают необходимые функции.

Сборка обновления (Building an Update)[править | править код]

Обновления создаются автоматически при построении дистрибутивов игры. Чтобы создать обновление, установите значение True для переменной build.include_update, расположенной в файле options.rpy. Это разблокирует опцию «Обновить сборку» в разделе «Построить дистрибутивы», расположенном в Ren'Py Launcher. Поставьте галочку напротив этой опции и Ren'Py создаст файлы обновления.


Файлы обновления состоят из:

updates.json
Индекс доступных обновлений и их версий.
package.sums
Содержит контрольные суммы для каждого блока в пакете.
package.update.gz
Содержит данные обновления для данного пакета.
package.update.json
Содержит список файлов в каждом пакете, который инструмент обновления использует при загрузке DLC.
package.zsync
Управляющий файл, используемый zsync для управления процессом скачивания файлов.


Вы должны загрузить все эти файлы в один каталог на вашем сервере.

Функции (Functions)[править | править код]

Для запуска процесса обновления вызовите либо action updater.update, либо action updater.Update.


updater.Update(*args, **kwargs)

Действие, которое вызывает updater.update(). Все аргументы сохраняются и передаются в эту функцию.


updater.UpdateVersion(url, check_interval=21600, simulate=None, **kwargs)

Эта функция связывается с сервером по url и определяет наличие более новой версии программного обеспечения, доступного по этому URL-адресу. Если есть, эта функция возвращает новую версию. Иначе функция возвращает значение None.
Так как установление связи с сервером может занять некоторое время, эта функция запускает поток в фоновом режиме и немедленно возвращает версию, которая была доступна при последнем обращении к серверу, либо возвращает None, если к серверу не обращались. Поток, запущенный в фоновом режиме, перезапустит текущее взаимодействие, как только будет установлено соединение с сервером, что приведёт к обновлению экранов, вызывающих эту функцию.
Каждый URL-адрес будет связываться с сервером не более одного раза за сеанс Ren'Py и не более одного раза через каждый интервал, определенный в секундах переменной check_interval. Если сервер не отвечает, кэшированные данные будут возвращены.
Дополнительные именованные аргументы (включая simulate) передаются в механизм обновления, как если бы они были заданы функцией updater.update().


updater.can_update(base=None)

Возвращает значение True, если обновление может быть выполнено успешно. Возвращает значение False, если обновление полностью невозможно. Например, если директория с обновлениями была удалена.
Заметьте, что эта функция не определяет действительно ли доступно обновление. Для этих целей используйте updater.UpdateVersion().


updater.get_installed_packages(base=None)

Возвращает список установленных имён пакетов DLC.
base
Основная директория для обновления. По умолчанию используется основная директория текущего проекта.


updater.update(url, base=None, force=False, public_key=None, simulate=None, add=[], restart=True, confirm=True)

Обновляет игру, созданную на движке Ren'Py, до последней версии.
url
URL-адрес расположения файла updates.json.
base
Основная директория, которая будет обновлена. По умолчанию используется директория текущей игры (обычно это можно проигнорировать).
force
Производит принудительное обновление, даже если номера версий совпадают (используется для тестирования).
public_key
Путь к файлу PEM, содержащему открытый ключ, по которому проверяется подпись обновления (обычно это можно проигнорировать).
simulate
Используется для тестирования обновления графического интерфейса пользователя без фактического выполнения обновления. Может принимать следующие значения:
  1. None для выполнения обновления.
  2. "available" для проверки тех случаев, когда обновление доступно.
  3. "not_available" для тестирования тех случаев, когда обновление не доступно.
  4. "error" для проверки ошибки обновления.
add
Список пакетов, добавляемых во время обновления. Необходимо только для DLC.
restart
Перезагружает игру после обновления.
confirm
Должен ли Ren'Py предложить пользователю подтвердить обновление? Если принимает значение False, обновление будет продолжено без подтверждения.

Экран (Screen)[править | править код]

Для настройки внешнего вида инструмента обновления, можно изменить экран updater. Экран по умолчанию определяется в файле common/00updater.rpy.

Источник[править | править код]

Статья "Web Updater" на английском языке.


На главную страницу Официальная документация движка Вернуться к началу статьи