reus - TrueCat17/Ren-Engine GitHub Wiki

Ren-Engine Update System

В Ren-Engine есть система обновлений.
Эта система не делает вообще ничего без прямого указания пользователя:

  • Нет автоматических проверок (вышло ли новое обновление?);
  • Нет уведомлений (обновление вышло, не хотите ли скачать?);
  • Нет автоматического обновления;
  • Есть дополнительное подтверждение с указанием размера файлов, требующих скачивания.

Всё это не только является уважением к пользователю, но также дополнительно повышает безопасность и уменьшает расход интернет-трафика.

Ещё несколько плюсов:

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

Использование

Для использования системы обновлений нужно лишь поместить простой текстовый файл upd_link.txt со ссылкой на сервер в корневую папку игры (в которой находятся resources и var) или в папку мода (на самом деле, можно в любую папку игры, но обычно будут интересны лишь эти 2 варианта).

Если игра обнаруживает хоть 1 такой файл, то в экране настроек появляется вкладка "Обновления".
На ней можно проверить обновления и обновить игру или моды.

REUS of Demo


Сервер

Сервер должен уметь лишь раздавать файлы (файловый сервер), т. е. ему не нужно запускать скрипты и делать что-то ещё.
Разве что единственным требованием выступает доступ по протоколу https.
Таким образом, в качестве сервера обновлений вашей игры или мода может выступать даже github.

Работает всё следующим образом:

  • Берутся файлы из репозитория https://github.com/TrueCat17/reus-template (для гитхаба - можно просто создать свой репозиторий на основе этого шаблона);
  • Если нет папки zips (по умолчанию), то её нужно создать;
  • Собранный в Лаунчере zip-архив поместить в эту папку zips;
  • Запустить (у себя, локально) скрипт update.py;
  • Загрузить все обновления в этой папке на сервер.

И на этом всё - сервер создан и начал работу.
Теперь стоит проверить, что доступен (например, в браузере) файл your.server/version.txt.

Важно: файл должен быть доступен для скачивания, а не просто "красиво отображаться" со всеми HTML-элементами сайта. Т. е. для гитхаба это будет что-то типа raw.githubusercontent.com/TrueCat17/RE-Demo-upd-sys/master/ (пример из демки).

Если по ссылке скачивается файл version.txt, то её нужно обрезать до последнего слэша (т. е. your.server/ из примера выше) и добавить в upd_link.txt в основной папке вашего проекта.

Кстати, теперь вы можете ещё и давать ссылку на zip-архив, который содержит ваш проект целиком, и вам не нужно будет хранить его где-то ещё.

Для дальнейших обновлений нужно снова поместить новый архив в папку zips (если вы решили хранить несколько версий - будет выбран последний созданный/изменённый), снова запустить update.py (он напишет выбранный zip и список изменений) и снова отправить изменения на сервер - и на этом всё!


Технические подробности

Движок отличает файлы по их размеру (в байтах) и хэшу (sha256).

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

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

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

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

Примерная оценка использования трафика при "проверке" обновления (не самого обновления):

  • скачивается файл version.txt (несколько десятков байт + HTTP-заголовки);
  • если он изменился, то скачивается info.txt (несколько десятков килобайт + HTTP-заголовки);
  • HTTP-заголовки ориентировачно весят несколько килобайт на запрос.

Итого, для маленьких проектов - 30-40 КБ, для больших - 100-200 КБ, а если на сервере не было изменений с прошлой проверки - около 2 КБ.

⚠️ **GitHub.com Fallback** ⚠️