Программа которая обновляет игры

Собственно продолжение темы http://www.gamedev.ru/code/forum/?id=156154 и логическое завершение моей работы над системой ресурсов.

Основной объём данных содержится в 2-х последних файлах, которые меняются подобно поверхности жесткого диска, т.к. ресурсы могут добавлятся или изменется, но уже записаанные и неизменные ресурсы НИКОГДА не меняют своего положения. Т.е. при обновлении имеем 3 изменившихся файла, сравнительно небольшого размера и 2 огромных файла с частичными изменениями.
Т.е. можно смело перекачивать 3 первых файла полностью, но вот для 2-х последних требуется лишь обновить изменившиеся регионы.

Также можно добавить возможность загружать файлы предобновлений и применять их в момент обновления (что-бы народ не сидел без игры, пока качается свежий апдейт — но это для онлайн игр только)

Собственно жду критики и советов по улучшению.

#1
4:33, 2 янв 2012

Ну неужели никто не делал свою систему обновлений?

  • berserkovich
  • Постоялец

#2

Как обновить приложение без Плей Маркета


17:48, 2 янв 2012

Bishop
С системой обновлений не работал, но работал немного с торрентами.
Могу сказать что торренты плохо дружат с большими объёмами (в игре 100500 мелких файлов например). В libtorrent-rasterbar например стоит ограничение на 5 мегабайт объёма торрент-файла. Его в принципе можно снять, но тут ещё проблема с трекерами — половина из них использует эту либу, другая половина просто крешит на торрент-файле чуть больше метра. Поэтому мне пришлось разбивать данные на несколько торрент-файлов.
Ещё rehash довольна небыстрая операция, которая прямо зависит от объёма данных
Ну и я бы не грузил каждый раз торрент-файл, а сравнивал бы версию или хеш

#3
17:57, 2 янв 2012

Обновление через торрент — не лучшая идея. А вот раздача клиента через торрент — абсолютно нормальное, так уже делают вовсю 🙂

#4
18:50, 2 янв 2012

berserkovich
> Могу сказать что торренты плохо дружат с большими объёмами (в игре 100500
> мелких файлов например).
Что-то такое тоже слышал, хотя вроде мангу в несжатом виде торентами раздают (а там тоже файлов будь здоров), но мне в любом случае пофиг — файлов мало.

berserkovich
> В libtorrent-rasterbar например стоит ограничение на 5 мегабайт объёма
> торрент-файла.
Хм. обычно не видел торент файлы больше 200Кб, при каких настройках получаются такие?

berserkovich
> Его в принципе можно снять, но тут ещё проблема с трекерами — половина из них
> использует эту либу, другая половина просто крешит на торрент-файле чуть больше
> метра.
А они разве не только хэш торента хранят и список участников обмена, им вообще должно быть пофиг.

berserkovich
> Ещё rehash довольна небыстрая операция, которая прямо зависит от объёма данных
Медленнее обычной проверки хэш-сум всего клиента? (его целостность то тоже проверять нужно)

Читайте также:
Программа для настройки разъемов звука на ПК

berserkovich

КАК ОБНОВЛЯТЬ ДРАЙВЕРА | ЛУЧШАЯ ПРОГРАММА ДЛЯ ОБНОВЛЕНИЯ ВСЕХ ДРАЙВЕРОВ


> Ну и я бы не грузил каждый раз торрент-файл, а сравнивал бы версию или хеш
Хм, можно еще так, проверяем зарегнут ли старый торент на трекере, если нет — значит торент поменялся.

ufna
> Обновление через торрент — не лучшая идея
Почему?

ufna
> А вот раздача клиента через торрент — абсолютно нормальное, так уже делают
> вовсю 🙂
Ну это да, уже года 2 так точно. Собственно это меня и надоумело.

#5
19:22, 2 янв 2012

Bishop
> > Обновление через торрент — не лучшая идея
> Почему?

На самом деле пофиг, только контролируй вручную удаление файлов.

#6
19:51, 2 янв 2012

berserkovich
> Поэтому мне пришлось разбивать данные на несколько торрент-файлов.

а не проще ли было свои мелкие файлы в пак закатать?

  • berserkovich
  • Постоялец

#7
20:57, 2 янв 2012

Bishop
> при каких настройках получаются такие?
дефолтных. у меня была игра на 11 гигов и over 80k файлов (dev версия), торрент в результате весил около 8мб. Думаю это сравнимо с каким-нибудь l4d со всеми аддонами и длц например

> А они разве не только хэш торента хранят и список участников обмена
я имею в виду сервер. нужно ведь откуда-то раздавать же ещё

> Медленнее обычной проверки хэш-сум всего клиента?
это фактически и есть такая проверка и в моём случае она длилась около 15 минут

ITIhonov
> а не проще ли было свои мелкие файлы в пак закатать?
конечно проще, но я на это никак повлиять не мог =

Вообще с 2Гб данных на ~100 файлов всё довольно шустро работает и если тех. процесс позволяет оставаться в разумных рамках, то можно особо не заморачиваться на этот счёт

#8
21:26, 2 янв 2012

У Blozzard всё прекрасно работает через торрент.

#9
21:45, 2 янв 2012

berserkovich
> over 80k файлов
Мне уже страшно за стриминг 🙂 Такое не то что раздавать через торент, такое вообще никуда за пределы девелоперской машины пускать нельзя 🙂

berserkovich
> это фактически и есть такая проверка и в моём случае она длилась около 15 минут
Что есть нормально для такого кол-ва файлов (одно открытие/закрытие чего стоят), проверка вообще скорее всего упрётся в диск, а не в алгоритм хэш-суммы.

zlos
> У Blozzard всё прекрасно работает через торрент.
Спасибо, не знал. я почему-то думал что у них свой p2p протокол.

#10
17:47, 4 янв 2012

Mortal Online обновлялся через торрент. Там не стопицциод файлов, но и не монолитные паки (UE3, в общем). Там использовали либу Mono.Torrent.dll, если не путаю.

Источник: gamedev.ru

Как сделать автоматическое обновление клиента онлайн-игры

В этой статье я расскажу о том, как я сделал систему автообновления клиентской онлайн-игры. Ссылка на исходники (Delphi) в конце статьи. На самом деле такую фичу я реализовал в двух своих играх, и если первый блин вышел немного комом (в игре Spectromancer), то вторая реализация получилась весьма удобной и эффективной. Это моя первая статья на Хабре, так что сильно не бейте, а лучше укажите на недостатки в комментариях 🙂

Читайте также:
Какие программы снимаются в Останкино

Алгоритм обновления игры

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

Проверка версии

Первым делом при запуске клиент спрашивает у сервера номер актуальной версии (X) и номер минимально допустимой без обновления (Y). Если версия клиента не ниже Y, то обновление не требуется, в противном случае клиент запускает утилиту обновления «GetNewVersion.exe X», а сам завершает работу.

Как видим, номер версии передаётся параметром — это позволяет при желании обновить игру до любой доступной на сервере версии, и даже понизить её. Если параметр не передать — утилита сама запросит у сервера номер актуальной версии. Номер версии — это просто целое число, схема нумерации может быть любой, например у меня версия 1.12 соответствует номеру 1120.

Ответ от сервера не приходит мгновенно, а до его получения мы не можем создать окно игры, ведь возможно придётся его тут же закрыть, а непонятные мерцания на экране — это совсем не то, что нам нужно. Время ожидания ответа надо бы чем-то занять, и клиент занимает его загрузкой/распаковкой наиболее тяжелых JPEG’ов. Слишком долго ждать тоже нельзя: игрок запустил игру — а на экране ничего не происходит, непорядок. Поэтому если в течение 1.0 сек. ответ от сервера так и не поступил — загрузка игры продолжается в обычном порядке. В этом нет ничего страшного: как только игрок попытается залогиниться на сервер, он получит сообщение о необходимости обновить клиент, либо о том, что сервер недоступен.

Скачивание списка файлов

Зная номер версии, утилита обновления скачивает список файлов по адресу: [base_ur]>/[версия]/filelist
Это просто список файлов в формате CSV с указанием контрольных сумм, а также размеров в сжатом и несжатом виде, каждая строчка выглядит в нём примерно так:
18*Priest.tga;1053151921D9;91719;107372
Здесь «18*» означает, что 18 символов в имени файла такие же как и у предыдущего файла. Поскольку файлы обычно идут в алфафитном порядке, а пути могут быть длинными — это существенно экономит размер файла-списка. Для веб-сервера, на котором не включена компрессия, это означает, что файл скачается быстрее и обновление начнётся раньше.

Скачивание новых или изменённых файлов

Обновление игр в Steam

Чтобы играть по сети, необходимо иметь самую свежую версию продукта. Игры в Steam, как правило, делают это автоматически. Однако всё же бывают различные неполадки. Или, может быть, вы сами выбрали неправильные настройки. Разберёмся, как обновить игру в Steam, и что делать, если сервис этому препятствует.

Читайте также:
Матрица может быть применена для определения производственной программы организации

Как обновить игру в Steam

Как поставить автообновление

Если купленная программа не обновляется по мере выходов новых версий автоматически, значит что-то не в порядке с настройками. Исправим это.

  1. Открываем Стим.
  2. Находим в «Библиотеке» ту игрушку, у которой проблемы с загрузкой новых версий.
  3. Кликаем по ней правой кнопкой мыши и выбираем пункт «Свойства».

Свойства игры в Steam

Свойства игры в Steam

Раздел обновления в Steam

Раздел «Обновления» в Steam

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

Обновление вручную

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

Там игрушка точно потребует загрузить свежую версию и начнёт обновляться.

Такие же услуги предлагает и сам Стим при его запуске. Если у ваших продуктов вышли новые версии, он оповестит об этом и предложит обновиться.

Проблемы с автообновлением

Почему не обновляются игры, если все параметры настроены правильно? Иногда бывает так, что автоматическое обновление выставлено, но тем не менее, Стим всё равно не обновляет. Решить эту проблему можно, как правило, одним способом.

  1. Нажимаем на кнопку «Steam» в левом верхнем углу окна программы.
  2. Открываем раздел «Настройки».

Настройки в Steam

Настройки в Steam

Выбор региона в Steam

Выбор региона в Steam

В других случаях, если уже стоит свой регион, помогает установить другой или выйти и заново зайти в Стим.

В некоторых случаях помогает проверка целостности кэша.

  1. Находим в библиотеке нужную игрушку.
  2. Щёлкаем по ней ПКМ.
  3. Открываем «Свойства».
  4. Находим «Локальные файлы» и проверяем там кэш.

Проверить целостность файлов игры в Steam

«Проверить целостность файлов игры» в Steam

Такие ошибки возникают из-за различных активных взаимодействий с сервисом, но могут происходить и сами по себе.

Ещё одна серьёзная проблема

Некоторые пользователи при попытке запустить очередное творение разработчиков обнаруживают сообщение: «Проверка наличия обновлений для игр Steam». После этого они вообще не могут начать играть: иногда долгое время, иногда доступ к игрушке перекрывается полностью.

Проверка наличия обновлений для игр Steam

Проверка наличия обновлений для игр Steam

Что делать в таких случаях?

  • Попробуйте выйти из своей учётной записи. Затем зайдите, но во время входа пройдите процедуру восстановления пароля. Такое действие убирает этот программный баг.
  • Удалите из папки со Steam некоторые файлы, а точнее файлы с расширением .blob. Беспокоиться за них не стоит. Эти файлы автоматически восстанавливаются системой. Как показывает практика, этот метод решает проблемы с обновлениями.

Теперь вы знаете, как разными способами обновить игру в Стиме. А также, как решить возможные ошибки, связанные с обновлением программ.

Источник: nastroyvse.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru