![]() |
[COLOR="White"]
Сетевой протокол Quake 3 Опубликовано 29 ноября 2011 Автор: Darren Этот документ описывает сетевой протокол, который Quake 3 использует для общения с клиентами и внешним миром (серверами запросов). В настоящее время в стадии разработки. Я в последнее время (август 2012) добавил запись в блоге с пересмотренной версией моего протокола 43 (прокси-сервер). Запрос Запросить сервер очень просто. Отправляется UDP пакет с 4 байтным заголовком (0xffffffff) и текстовой строкой GetStatus. Есть много сайтов, которые содержат подробное описание, так что я не буду вдаваться в подробности. Игровой протокол 68 – в версии 1.32 Все игровые пакеты – UDP, но есть еще процессы «обмена рукопожатиями», которые должны произойти до того, как вы получите право присоединиться к серверу. Клиент посылает запрос на получение идентификатора (иногда вам нужно отправить несколько запросов, прежде чем сервер среагирует). http://w.ho.by/tmp/pub_q3proto/q3proto_img1.png Если сервер способен принимать новые подключения, он ответит. http://w.ho.by/tmp/pub_q3proto/q3proto_img2.png После этого клиент имеет и может отправить запрос на подключение. Но, увы: является Хаффман-упакованным в протоколе 68 и НЕ является открытым текстом, как показано ниже. Протокол 43 использует текстовую версию. http://w.ho.by/tmp/pub_q3proto/q3proto_img3.png представляет собой строку, содержащую детальные параметры подключеняи игрока, например: Код:
\cg_predictItems\1\sex\male\handicap\100\color\3\snaps\40\rate\10000\model\doom/red\name\UnnamaedPlayer\protocol\68\qport\\challenge\Если подключение успешно, сервер ответит следующим образом: http://w.ho.by/tmp/pub_q3proto/q3proto_img4.png Сервер поставит вас в CNCT (подключающееся) состояние и начнет отправлять вам обновления игры. Вот где комуникация значительно усложняется, поэтому я предупреждаю вас, что следующее может быть неполным и, возможно, неправильно – хотя я надеюсь, что это не так! Клиент – серверу http://w.ho.by/tmp/pub_q3proto/q3proto_img5.png Команды клиента Код:
0 - clc_badhttp://w.ho.by/tmp/pub_q3proto/q3proto_img6.png Команды сервера Код:
0 - svc_bad(1) - сжатие Хаффмана с использованием заданного набора узлов для дальнейшего сокращения длины сообщения (подробности см. ниже). http://w.ho.by/tmp/pub_q3proto/q3proto_img7.png (2) - XOR алгоритм, используемый сервером для декодирования содержимого сообщения. Код:
#define CL_ENCODE_START 12[I]Замечания Данные имеют смешанный порядок следования байт, это верно? Фрагментация пакетов работает с помощью расчета sequencetNumber и FRAGMENT_BIT (где FRAGMENT_BIT это [FONT="Courier New"]1 |
Данный материал выложен здесь с целью поиска аудитории, заинтересованной или опытной в указанных вопросах. Ежели кто-то работал с протоколом Quake3, разрабатывал ПО для него, просьба комментировать и дополнять. Необходима любая информация, так как официального опубликованного RFC в каком-либо виде нет. Этот материал, фактически все, что известно.
Один из важных моментов - разобраться с применением сжатия Хаффмана. Как и с чем его есть в этом случае, м.б. пример рабочего софта... Авторы полезного контента будут щедро поощрены репутацией. |
Спасибо, полезно!
|
| Время: 14:33 |