Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 05.11.2012, 00:17   #1
Lestar
Бывалый
 
Аватар для Lestar
 
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений
(для 880 пользователей)
Автоапдейтер.

Стоит задача написать автопдейтер приложения. Проверили версию, скачали патч, пропатчили приложение. Вызывает вопрос обновления приложения. Я так понимаю мы будем работаем с бинарными данными. Вопрос заключается в том, что файл ресурсов мы имеем размером 400 метров например, но нам необходимо заменить лишь часть ресурсов из него. Каким образом их вычленить из общей массы? Буду благодарен за линки что то почитать, так как недопонимаю что именно гуглить.

UP1. Единственная мысль приходит это предварительно сравнивать старый и новый файлы ресурсов побайтово и получить коллекцию байтов с индексами, которые нужно заменить.
Up2. Но при подобной реализации встает вопрос, если в новом ресурсе изменения окажутся в начале массива, то после чтения из потока данных и их сравнения, получим коллекцию байтов для обновления, почти соответствующую по размеру файлу ресурсов, что не есть правильно.
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
(Offline)
 
Ответить с цитированием
Старый 05.11.2012, 02:17   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Автоапдейтер.

Если хранятся данные в файле ресурсов, то у тебя должна быть нормальная архитектура для хранения данных и индексирования адресов к данным, эдакий XML (например) заголовок, со списком данных, иерархией и т.п.
Далее если это есть, то ты будешь работать с хранилищем данных как с обыкновенной файловой системой.
Есть версии, каждая версия содержит информацию о изменениях, также есть ключевые версии, например каждая 8мая, которая имеет полный список файлов. Ключевые версии - обычно это версия которую качаешь с сайта когда качаешь полную игру. Получается что версию на сайте прийдётся обновлять не каждую версию, а лишь каждую 8ую, или сколько ты захочешь.
Далее зная текущую версию и разницу версий, находим все патчи, и затем создаём такой же xml со списком файлов, начиная со старых патчей к новым, чтобы если обновился дважды один и тот же файл, старый в итоге перезаписался новым. Когда имеем полный список, передаём данные клиенту (этот xml), и он начинает запрашивать сервер файлы по списку.
При этом если клиент не допатчился и закрыл приложение, затем пришёл позже, а там уже новый патч, то ему присылается лишь заголовки между той которую он не закончил и новым патчем, и клиент у себя уже дополняет свой патч файл (заголовки) так чтобы он был полным.
Каждый файл должен иметь также номер версии с которой он был закачан (к обновлению которому принадлежит).
Зачем это нужно?
Представь у тебя файл ресурсов с огромным заголовком тысяч файлов.
И тут ты напортачил и патч не работает. Делаем hard repair. Сервер выдаёт полный файл заголовок со списком всех файлов а также их версий. Клиент пробегается по своему списку файлов, сверяет версии, если есть расхождение вносит файл с расхождением и версию в временный заголовочный файл для последующего запроса.
После Repair'а при наличии расхождений, запросит у сервера файлы для обновления.

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

Не думаю что на эту тему есть какие-то конкретные решения, т.к. оно очень зависит от специфики проекта и кучи факторов, следственно зная общие представления и задачи - тебе нужно разработать эту систему самостоятельно.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Lestar (05.11.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:52.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com