Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
5 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 27
1

Обновление игрового клиента

20.10.2014, 15:59. Показов 640. Ответов 13
Метки нет (Все метки)

Есть игровой клиент, я для него пишу лаунчер.
Подкиньте идею как правильно обновлять игровой клиент.

Со скачиванием файлов в принципе разобрался, есть готовая функция, скачивающая файлы по HTTP.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2014, 15:59
Ответы с готовыми решениями:

Обновление игрового клиента
Есть клиент онлайн игры, будь это Minecraft, S4, LoL значения не имеет, Есть лаунчер, который...

Обновление базы от сервера на локальный компьютер через клиента
во общем такая проблемка настигла. Объясняю: есть сервер на котором находится база данных ...

Создание установщика игры и игрового клиента
Уважаемые форумчане, очень нужна помощь. Извиняюсь, если не в том подфоруме создала тему, просто не...

Доступ к элементам списка WTL_LISTVIEW игрового клиента
"Тип" списка был определен с помощью Window Spy. К примеру, отправлять сообщения в чат и и читать...

13
174 / 161 / 71
Регистрация: 22.02.2013
Сообщений: 1,770
Записей в блоге: 2
20.10.2014, 17:52 2
при запуске, лаунчера проверяйте версию клиента, если версия клиента не совпадает с версией на сервере - то его необходимо обновить/откатить
0
5 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 27
20.10.2014, 21:20  [ТС] 3
Цитата Сообщение от NotBeginner Посмотреть сообщение
при запуске, лаунчера проверяйте версию клиента, если версия клиента не совпадает с версией на сервере - то его необходимо обновить/откатить
лаунчер должен скачивать по 1 файлу, при этом обновлены могут быть не все сразу, а только некоторые (некоторые файлы возможно вообще изменяться не будут)

каким способом узнавать версию файла (не только исполняемого, и желательно не зависимо от даты изменения и других атрибутов)
0
пофигист широкого профиля
4305 / 2823 / 798
Регистрация: 15.07.2013
Сообщений: 16,357
21.10.2014, 02:26 4
Цитата Сообщение от BARBOSSA Посмотреть сообщение
каким способом узнавать версию файла (не только исполняемого, и желательно не зависимо от даты изменения и других атрибутов)
Это ненаучная фантастика!
У файла не было, нет и не будет никогда версии.
0
5 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 27
21.10.2014, 08:31  [ТС] 5
Цитата Сообщение от northener Посмотреть сообщение
Это ненаучная фантастика!
У файла не было, нет и не будет никогда версии.
не исключаю возможность хранить данные о версиях файлов в некотором списке (только какой формат для этого подойдет?)
0
174 / 161 / 71
Регистрация: 22.02.2013
Сообщений: 1,770
Записей в блоге: 2
21.10.2014, 16:13 6
BARBOSSA,
версия лаунчера - список файлов на обновление и обновляйте все. и ничего не придумывайте..
откуда вы знаете, что он не играл на другом сервере и не обновил эти файлы от туда другой версией. а у вас будет висеть
Цитата Сообщение от BARBOSSA Посмотреть сообщение
хранить данные о версиях файлов в некотором списке (только какой формат для этого подойдет?)
что файлики у него корректные.
0
5 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 27
21.10.2014, 18:41  [ТС] 7
Цитата Сообщение от NotBeginner Посмотреть сообщение
BARBOSSA,
версия лаунчера - список файлов на обновление и обновляйте все. и ничего не придумывайте..
откуда вы знаете, что он не играл на другом сервере и не обновил эти файлы от туда другой версией. а у вас будет висеть
А теперь представим, что у одного будет клиент к примеру 5й версии,
дальше я чтото изменил и выкатил обновку на 6ю версию,
половина народа обновились, половина не запускали лаунчер.
Выкатил еще одну обновку (еще какието файлы изменил/добавил) стала версия 7...
в вашем случае, как я понимаю, половина обновится с 5й на 7ю, и не получит изменений в 6й (которые могут быть не затронуты в 7й версии)
Задача в том, чтобы лаунчер, грубо говоря, обновлял все файлы, что не совпадают по версии (это может быть некий номер или строка, или вообще контрольная сумма)

Мне нужен примерный алгоритм (в действиях), как это проще устроить.
Код я сам напишу под него.
0
174 / 161 / 71
Регистрация: 22.02.2013
Сообщений: 1,770
Записей в блоге: 2
21.10.2014, 21:37 8
BARBOSSA, ну например патчи в вове ( ох давно это было) накатывались поочередно, т.е сначала 6 потом 7 - это как вариант
0
5 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 27
22.10.2014, 19:46  [ТС] 9
Цитата Сообщение от NotBeginner Посмотреть сообщение
BARBOSSA, ну например патчи в вове ( ох давно это было) накатывались поочередно, т.е сначала 6 потом 7 - это как вариант
Вариант, но не совсем удачный. Придется хранить все версии.

Пока остановился на таком варианте:
1)лаунчер скачивает текстовик(upd.txt) со списком всех файлов (у каждого файла указан относительный путь, некоторый идентификатор {обозначает действие удалить/заменить/запустить} и версия {строка 4 символа}),
2)считывает строки в массив
3)считывает предыдущий текстовик(переименованный в Version.txt) в массив (если его нет, скачивается все, что описано в файле upd.txt)
4)сравнивает оба массива, составляя список тех файлов, которые нужно скачать/удалить/запустить (грубо говоря вычисляется различие версий)
5)скачиваются(удаляются) файлы по списку...

Если есть варианты что можно в улучшить?
Либо какой то другой алгоритм?
0
156 / 299 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
22.10.2014, 20:23 10
Лучше всего сравнивать списки обновлений(для нескольких обновлений):
1. Получаем списки файлов, которые надо обновить, пока пользователь пропускал обновления.
2. Сравниваем списки по именам файлов. Если один и тот же файл обновился в нескольких обновлениях, то обновляем до самого свежего.(Дату создания или измения файла, надеюсь, получать умеем).
3. Скачиваем по очередно(лучше всего архивами) файлы.
4. Проверяем их на целостность(вдруг произошла какая-нибудь ошибка).
5. Распаковываем архивы(Удаляем старый файл, и вместо него сохраняем туда обновленный файл).
6. Снова проверяем на целостность.
Готово.
Списки файлов версии игры можно запихнуть в обычную базу данных. Где будут приводится все атрибуты файлов клиента, на текущую версию игры. Лучше даже сравнивать контрольные суммы файлов, для защиты от читерства через модификацию игровых файлов.
При каждом запуске лаунчера можно снова проверять контрольные суммы файлов, это поможет, опять таки, защитить клиент от примения модификации файлов клиента с целью использования читов.
0
5 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 27
23.10.2014, 11:45  [ТС] 11
Цитата Сообщение от саша40 Посмотреть сообщение
1. Получаем списки файлов, которые надо обновить, пока пользователь пропускал обновления.
2. Сравниваем списки по именам файлов. Если один и тот же файл обновился в нескольких обновлениях, то обновляем до самого свежего.(Дату создания или измения файла, надеюсь, получать умеем).
смотреть последнюю версию и добавлять из предыдущих?

Цитата Сообщение от саша40 Посмотреть сообщение
3. Скачиваем по очередно(лучше всего архивами) файлы.
с архивами могут быть траблы... мне не хотелось бы цеплять какие то библиотеки, а на установленные архиваторы надеяться не стоит...

Цитата Сообщение от саша40 Посмотреть сообщение
Списки файлов версии игры можно запихнуть в обычную базу данных.
какой формат проще всего использовать?

Цитата Сообщение от саша40 Посмотреть сообщение
Лучше даже сравнивать контрольные суммы файлов
была такая идея, но если и реализую, то в будущих версиях
но проверку скорее всего буду фоном проводить, или только отдельные файлы (у большого клиента скорее всего займет много времени)
0
156 / 299 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
23.10.2014, 13:09 12
Цитата Сообщение от BARBOSSA Посмотреть сообщение
смотреть последнюю версию и добавлять из предыдущих?
Мы же и так знаем в лаунчере какой версии у пользователя клиент. Нам надо для начала узнать какие версии пользователь пропустил и узнать, что лаунчер должен был при установки этих версий сделать.
Дальше уже сравниваем, произошло обновление файла, который обновляется в не последней, а самой ближайшей к пользовательской, версии игры. И так по версиям к устанавливаемой. Если при проверке, файл больше не обновлялся(в списках), то добавляем в список действий загрузку именно этого файла.
Более детально такой алгоритм трудно объяснить.
Цитата Сообщение от BARBOSSA Посмотреть сообщение
с архивами могут быть траблы... мне не хотелось бы цеплять какие то библиотеки, а на установленные архиваторы надеяться не стоит...
Используй не сжатые архивы(даже свой тип файлов с бинарным содержимым). Или архивы с расширением 7z.(7-zip). Они есть по умолчанию.
Цитата Сообщение от BARBOSSA Посмотреть сообщение
какой формат проще всего использовать?
Две базы:
Первая: Текущая версия игры. Содержимое: Полный список файлов с контрольными суммами и прочими параметрами.
Вторая: Списки обновлений. Содержимое: На каждое обновлений свой список изменений.
Я не знаю форматы баз. Но подойдут обычные текстовые таблицы, как в Exсel.
Цитата Сообщение от BARBOSSA Посмотреть сообщение
была такая идея, но если и реализую, то в будущих версиях
но проверку скорее всего буду фоном проводить, или только отдельные файлы (у большого клиента скорее всего займет много времени)
Фоновая проверка будет нагружать компьютер. Лучше всего проводить проверку в несколько потоков и при запуске лаунчера. Всю информацию выводить пользователю.

Так же загружать и обрабатывать файлы(вычислять контрольные суммы файлов, собирать даты их создания и изменения и прочие) в многопоточном режиме. При установке и распаковке тоже желательно использовать несколько потоков. Организовать их будет не просто, но зато время обновления значительно сократится.
0
5 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 27
23.10.2014, 21:44  [ТС] 13
Цитата Сообщение от саша40 Посмотреть сообщение
Или архивы с расширением 7z.(7-zip). Они есть по умолчанию.
zip поддерживается виндой изначально, а вот 7z это формат архиватора 7-zip

Цитата Сообщение от саша40 Посмотреть сообщение
Фоновая проверка будет нагружать компьютер. Лучше всего проводить проверку в несколько потоков и при запуске лаунчера. Всю информацию выводить пользователю.
при чтении можно заюзать задержку и читать по несколько байт, также хранить гонтрольные суммы в отдельном файле и его проверять до запуска клиента

Добавлено через 7 часов 46 минут
в ходе обсуждений родилась одна идея:
используя библиотеку Synapse обращаться к php скрипту на сервере, передавая содержимое файла Version.txt и получая в ответ список того, что нужно скачать
0
156 / 299 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
24.10.2014, 12:04 14
Цитата Сообщение от BARBOSSA Посмотреть сообщение
при чтении можно заюзать задержку и читать по несколько байт, также хранить гонтрольные суммы в отдельном файле и его проверять до запуска клиента
Не "гонтрольные", а "контрольные".
Зачем по несколько байт, если можно расчитать контрольные суммы md5 и sha256 из всего файла сразу. Так же при проверке не будет лишнем проверять размер файла в байтах.
Цитата Сообщение от BARBOSSA Посмотреть сообщение
используя библиотеку Synapse обращаться к php скрипту на сервере, передавая содержимое файла Version.txt и получая в ответ список того, что нужно скачать
Если сработает, то пожалуйста. Надеюсь, php-скрипты писать умеем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2014, 12:04

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Подскажите ЯП для написания игрового сервера и браузерного клиента
Здравствуйте. Есть цель написать клон одной известной ККИ (колекционной карточной игры). Нужен...

Следующие обновление игрового ПК
Всем привет. На неделе собираюсь сделать обновление для ПК, в связи с выходами хороших и требуемых...

Доработка кода и обновление у клиента
Всем привет. Ситуация такая: мне нужно внести маленькое изменение в код формы справочника(это я...

Динамическое обновление клиента и сервера
Здравствуйте! У меня возникло несколько вопросов. Допустим, сервис работает мультипоточно в...

Обновление клиента World of Tanks
скачал клиент wot установил запускаю и она обновляется на 4 гига очеень долго. дошел до 39...

Обновление набора данных (два клиента, одна база)
Помогите разобраться может кто поможет. Есть база fdb, к ней написаны 2-а клиента на делфях. Первый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.