Конечно вряд ли кто откликнется и проконсультирует меня, ибо сайт почти мертв... но.
Вобщем хочу для официального глобала сделать прогу для автообновления мода (проверка версии и скачивание обновления с сервера).
У нас имеется пара программистов на форуме и хотелось бы, чтобы кто то поделился опытом и предложил оптимальный алгоритм действия проги, язык программирования, который удобнее для этого, предупредил о подводных камнях (фаерволы там может всякие и т.п.), может подкинул пару тематических статей.
Так, у меня имеется исходник лаунчера на PhpDevelStudio и на крайняк можно писать на нем, но это довольно кривая среда, которая в exe вшивает довольно увесистое дополнение для разжевывание кода и ваще, проги на нем часто антивирусы путают с вирусами (раньше по крайней мере такое было)....
По структуре проги есть такие мысли:
Code
1. Прога залезает в файл в игре, где читает текущую версию мода. 2. Прога лезет на сервер в специальный файл, где указана последняя версия. 3. Если версия игры соответствует последней -показывает кнопку запуска игры, иначе - лезет на сервере в еще один файл, название которого соответствует текущей версии. В файле указаны директории необходимых файлов для обновления на сервере и директории в корне игры, куда их надо залить. Прога это делает. При этом должна показываться какая то индикация загрузки. После скачки каждого файла хорошо бы еще проверить его хэш. 4. После скачивания всех файлов, снова повторяется цикл с п.1. (мы ведь скачали просто чуть более новую версию, а надо до последней обновить). 5. Еще было бы неплохо встроить в прогу маленькое окно браузера, которое грузит штмл страничку с сервера, куда можно полезную инфу записать.
Алгоритм:
Code
При запуске проги: 1. Проверяем наличие ехе запуска игры. Если нет - жалуемся на директорию. 2. Проверяем наличие файла установок innolauncher.ini . Если его нет - создаем с дефолтным значением. 3. Проверяем наличие записи в реестре о текущей версии мода. Если нет - записываем версию 0.0, чтобы мод скачался. 4. Проверяем наличие подключения к серверу. Если нет - то не скачиваем картинку с новостями и не делаем проверку обновлений. Кнопку меняем на "играть оффлайн". 5. Сравниваем текущую версию с последней на сервере. Если версия не последняя - предлагаем обновить.
Code
При скачивании обновлений: 1. Смотрим на сайте в ini файле текущей версии название версии следующего обновления. 2. Читаем во второй строке директорию файла необходимого обновления и хэш сумму. 3. Скачиваем, проверяем хэш, если совпадает - идем дальше, если нет - выводим диалог с предложением повтора скачивания или отмены обновления. 4. Читаем следующую строку и повторяем с пункта 2. Так - до момента скачивания всех необходимых файлов. 5. Еще раз проверяем на всякий все хэши скаченных файлов и если совпадают - обновляем версию в реестре.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
а можно сделать как у дропбокса, прога сверяет все файлы с сервером, затем скачивает те, которые обновлены
хм кста, хорошая идея... только интересно на сколько это сервак будет грузить... каждый файл надо будет по хэшу проверять каждый раз. зато это в плане заливки обновлений удобно - тупо скинул в папку...
Вобщем ща как раз думаю как лучше реализовать скачивание апдейтов... Можешь все-таки паковать обновления в файлы автоустановки? так меньше шансов, что что то потеряется при обновлении...
Вот пока что выходит:
Картинка в центре будет также грузиться с сервера, или как вариант - будет фрейм с браузером в окне проге (но в нем я пока не могу скролл бар убрать, а он вид портит).
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
Еще один вопрос: диалог обновления. Вариантов несколько.
1. При нахождении обновления выводиться окно диалога типа обновить да\нет. 2. При нахождении обновления выводится запись в статус, блокируется кнопка играть и обновление скачивается. 3. Выводится запись статус. Но обновление не скачивается сразу, а кнопка играть заменяется на "обновить"
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
1. При нахождении обновления выводиться окно диалога типа обновить да\нет.
Скорее всего, так лучше. Можно при первом запуске сделать диалог "включить автообновление? (да/нет)", чтобы трафик не просаживать при следующем запуске (вдруг у кого-то не анлим) и добавить кнопку "Проверить обновления" в сам лаунчер.
4erveR, я все-же выбрал вариант с заменой кнопки "играть" на "обновить" при наличии обновлений.
Quote (4erveR)
добавить кнопку "Проверить обновления" в сам лаунчер.
нет смысла. на проверку наличия обновлений уходит всего 6-7 байт трафика (просто версия сверяется).
Сами обновления на сервере будут в виде конфиг файлов... примерно как подключение плагинов в the elder scrolls серии (если через текстовый документ подрубать). Только кроме адреса файла нужно будет еще хэш-сумму указать скорее всего. Сейчас как раз работаю над созданием цикла закачки согласно этому конфиг файлу. просто закачка уже реализована.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
А будет показан changelog при запросе обновления? Ведь если какое-то нововведение не понравится, игрок может отказаться от обновления.
Добавлено (03.06.2012, 11:32) --------------------------------------------- Не думаю, что всем понравится "насильный" переход на новую версию)
Добавлено (03.06.2012, 11:45) --------------------------------------------- Вот одна из идей: сделать флажок "Обновить" рядом с кнопкой запуска (наподобие Force Update в лаунчере майна от AnjoCaido). И (уже мб и бред) сделать возможность бэкапа файлов мода.
Сообщение отредактировал 4erveR - ВС, 03.06.2012, 11:48:59
А будет показан changelog при запросе обновления? Ведь если какое-то нововведение не понравится, игрок может отказаться от обновления.
чэйндж лог скорее всего будет, но возможности отказаться от обновления наверное не будет - т.к. модификация в основном создается для игры по сети и надо, чтоб у всех одна версия была.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
вобщем писал этот автоапдейтер на PHP Devel Studio. Но в процессе разработке обнаружился баг в среде (говорил, что она кривая в первом собже). Короче не удается выкачивать с сервера несколько файлов подряд. После скачивания первого файла компонент загрузки накрывается и вторую загрузку уже стартовать не хочет. Пытаюсь может как то решить эту проблему, но на форуме молчат и походу придется все-таки пойти по пути варианта, где прога просто проверяет версию, а потом скачивает и запускает установку патча-обновления. То есть патч одним файлом.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
4erveR, переписывать мне точно неохота уже. Так что буду продолжать то, что начал.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)