Чтобы настроить систему обновлений нужен веб-сервер, с быстрым каналом.
Структура папок выглядит следующим образом (это пример):
* [Ссылки могут видеть только зарегистрированные пользователи. ]
o info ([Ссылки могут видеть только зарегистрированные пользователи. ])
+ pid ([Ссылки могут видеть только зарегистрированные пользователи. ]) — файл содержит число из клиентского файла pid.ini o launcher ([Ссылки могут видеть только зарегистрированные пользователи. ])
+ version ([Ссылки могут видеть только зарегистрированные пользователи. ]) — содержит число — текущую версию ланчера
+ files.md5 ([Ссылки могут видеть только зарегистрированные пользователи. ]) — содержит список файлов и их md5-сумму папки launcher клиента o patcher ([Ссылки могут видеть только зарегистрированные пользователи. ])
+ version ([Ссылки могут видеть только зарегистрированные пользователи. ]) — содержит число — текущую версию патчера
+ files.md5 ([Ссылки могут видеть только зарегистрированные пользователи. ]) — содержит список файлов и их md5-сумму папки patcher клиента
+ v-X.inc ([Ссылки могут видеть только зарегистрированные пользователи. ]) — например, v-3.inc, содержит список файлов, их md5-сумму и знак операции (+ — новый файл, ! — файл изменен). 3 — разница между текущей версией и версией клиента. т.е. если у клиента версия 78, а на сервере уже 85, то клиент будет качать файл v-7.inc o element ([Ссылки могут видеть только зарегистрированные пользователи. ])
+ version ([Ссылки могут видеть только зарегистрированные пользователи. ]) — содержит число — текущую версию элементов, та самая, что отображается в окне патчера
+ files.md5 ([Ссылки могут видеть только зарегистрированные пользователи. ]) — содержит список файлов и их md5-сумму папки element клиента
+ v-X.inc ([Ссылки могут видеть только зарегистрированные пользователи. ]) — например, v-3.inc, содержит список файлов, их md5-сумму и знак операции (+ — новый файл, ! — файл изменен). 3 — разница между текущей версией и версией клиента. т.е. если у клиента версия 78, а на сервере уже 85, то клиент будет качать файл v-7.inc
Каждый файл files.md5 и v-X.inc имеет внизу [Ссылки могут видеть только зарегистрированные пользователи. ]
Алгоритмы обновления
В клиенте ПВ два уровня обновления:
1. launcher/launcher.exe — та мини-программа, которая лезет на сервер обновлений только для того, чтобы узнать не нужно ли обновлять patcher и себя; 2. patcher/patcher.exe — основной патчер, он качает отдельные кусочки pck-файлов, карты, списки серверов, словом все, что находится в папке element.
Помимо этого, есть и два метода обновления
1. Полная проверка. Рекомендуется делать когда есть какие-то проблемы с клиентом или он не синхронизирован с текущим;
2. Регулярное обновление. Происходит в обычном случае.
Рассмотрим каждый метод более подробно.
Полная проверка
Для того, чтобы произошла полная проверка, нужно запустить клиент через launcher/FixIt.bat . После этого launcher/launcher.exe полностью обновит себя, содержимое своей папки (с помощью [Ссылки могут видеть только зарегистрированные пользователи. ]) и папки patcher (с помощью [Ссылки могут видеть только зарегистрированные пользователи. ]) (включая подпапки). Потом, как обычно, запустится patcher/patcher.exe .
Если клиент нажмет кнопку «Проверка», то patcher/patcher.exe скачает файл [Ссылки могут видеть только зарегистрированные пользователи. ] и начнет проверять md5-сумму тех файлов, что перечислены там, с просчитанными суммами тех, что есть у клиента. Клиент скачает только отличающиеся и новые файлы. Если включен антивирус, то процесс займет продолжительное время.
С технической точки зрения процесс выглядит так:
1. launcher/FixIt.bat запускает launcher/launcher.exe FullCheck, т.е. с параметром полной проверки 2. launcher/launcher.exe скачивает [Ссылки могут видеть только зарегистрированные пользователи. ] и сравнивает с числом из pid.ini из patcher, если совпадают, то к следующему шагу, если нет — выдаст ошибку 3. launcher/launcher.exe скачает файл [Ссылки могут видеть только зарегистрированные пользователи. ], и поочередно проверит суммы всех файлов, скачает отличающиеся. Тоже самое проделает с файлом [Ссылки могут видеть только зарегистрированные пользователи. ] и папкой patcher . 4. запустится patcher/patcher.exe, после нажатия на «Проверку», патчер начнет качать большой файл [Ссылки могут видеть только зарегистрированные пользователи. ] и будет сверять каждый файл, перечисленный там, с тем, который имеется у клиента и скачает отличающиеся.
Регулярное обновление
Обычное обновление не требует от игрока каких-то специфических действий, кроме как запуск игры через launcher/launcher.exe (как это происходит на оф-серверах). launcher/launcher.exe проверит свою версию, скачает новые/измененные файлы, если они есть, и запустит patcher/patcher.exe .
patcher/patcher.exe скачает файл [Ссылки могут видеть только зарегистрированные пользователи. ], если он отличается от версии клиента, то скачает [Ссылки могут видеть только зарегистрированные пользователи. ], где X — разница версий и начнет проверять md5-сумму тех файлов, что перечислены там, с просчитанными суммами тех, что есть у клиента. Клиент скачает только отличающиеся и новые файлы. Если включен антивирус, то процесс займет продолжительное время.
С технической точки зрения процесс выглядит так:
1. launcher/launcher.exe скачивает [Ссылки могут видеть только зарегистрированные пользователи. ] и сравнивает с числом из pid.ini из patcher, если совпадают, то к следующему шагу, если нет — выдаст ошибку 2. launcher/launcher.exe скачивает [Ссылки могут видеть только зарегистрированные пользователи. ] и сравнивает с клиентской версией launcher, если совпадают, то к следующему шагу, если нет — скачает именно файл [Ссылки могут видеть только зарегистрированные пользователи. ], и поочередно проверит суммы всех файлов, скачает отличающиеся. После проделает тоже самое с [Ссылки могут видеть только зарегистрированные пользователи. ] и [Ссылки могут видеть только зарегистрированные пользователи. ], где X — разница версий и начнет проверять md5-сумму тех что перечислены там, с просчитанными суммами тех, что есть у клиента. 3. запустится patcher/patcher.exe, и повторит все действия что и launcher/launcher.exe, только с [Ссылки могут видеть только зарегистрированные пользователи. ] и [Ссылки могут видеть только зарегистрированные пользователи. ], где X — разница версий и начнет проверять md5-сумму тех что перечислены там, с просчитанными суммами тех, что есть у клиента.
Структура файлов
Цифровая подпись нужна для аутентификации и валидации клиента. Поэтому, каждый файл подписан цифровой подписью длинной 173 символа, разбитую на три строки (через 64 символа).
Подпись генерируется для текста, который идет до надписи -----BEGIN ELEMENT SIGNATURE----- с помощью закрытого ключа, клиентские программы launcher/launcher.exe и patcher/patcher.exe проверяют ее с помощью открытого ключа, который зашит у них в коде (его необходимо заменить на свой при установке, иначе первая же валидация не пройдет).
Первая строка: версия клиента, версия на сервере и размер обновления в байтах. Все пишется через пробел, вналаче строки идет знак диез (решетка) — #.
Далее список файлов. Каждая строка состоит из операции (! — обновить файл, + — добавить), md5-суммы, и пути файла. Путь файла преобразован с помощью base64, при том, что каждое имя папки или файла преобразуется отдельно, слеши преобразуются в дефисы, чтобы не было коллизий. Т.е. файл /Y29uZmlncw==/YmFkd29yZHMudHh0 равносилен файлу configs/badwords.txt.
Исходя из предыдущего примера понятно, что каждый pck-архив должен быть распакован.
Каждый файл папки element (либо launcher, либо patcher) расположен по адресу [Ссылки могут видеть только зарегистрированные пользователи. ] (либо [Ссылки могут видеть только зарегистрированные пользователи. ], либо [Ссылки могут видеть только зарегистрированные пользователи. ]), т.е. файл /Y29uZmlncw==/YmFkd29yZHMudHh0 находится [Ссылки могут видеть только зарегистрированные пользователи. ].
Если путь начинается со слеша, то это значит, что путь файлу лежит от корня директории (element, launcher или patcher), если не начинается со слеша, то файл лежит в предыдущей директории. Т.е. файл /ZGF0YQ==/Z3Nob3AuZGF0YQ== находится по адресу [Ссылки могут видеть только зарегистрированные пользователи. ], так же как и следующий за ним файл YXV0b2FkdmFuY2Vtb3VudGFpbjIuaHRm ([Ссылки могут видеть только зарегистрированные пользователи. ]).
Далее идет строка -----BEGIN ELEMENT SIGNATURE-----.
После нее начинается подпись.
Анализировать файлы files.md5 нет смысла. Там отсутствует номер клиентской версии, и знаки операций.