Работа с пакетами — различия между версиями

Материал из Perfect World Develop Wiki
Перейти к: навигация, поиск
Строка 26: Строка 26:
 
|}
 
|}
 
Список пакетов из gdeliveryd, gamedbd и uniquenamed воссоздан парсингом отладочной информации ([http://en.wikipedia.org/wiki/DWARF DWARF]). Список и структуры пакетов актуальны для всех версий. Для пакетов сделаны зависимости друг от друга — легко найти пакет, который придет от сервера как ответ, и наоборот. Зависимости отображаются на страницах пакетов. Для каждого сервиса предоставлены списки ProtocolType и CallID, пакеты из последнего можно вызывать только со стороны сервера.
 
Список пакетов из gdeliveryd, gamedbd и uniquenamed воссоздан парсингом отладочной информации ([http://en.wikipedia.org/wiki/DWARF DWARF]). Список и структуры пакетов актуальны для всех версий. Для пакетов сделаны зависимости друг от друга — легко найти пакет, который придет от сервера как ответ, и наоборот. Зависимости отображаются на страницах пакетов. Для каждого сервиса предоставлены списки ProtocolType и CallID, пакеты из последнего можно вызывать только со стороны сервера.
 
== Структура пакетов ==
 
{| class="wikitable" border="1"
 
|-
 
! Тип данных
 
! Название
 
|-
 
| [[CUInt]]
 
| Opcode
 
|-
 
| [[CUInt]]
 
| Length
 
|-
 
| byte[]
 
| Content
 
|}
 
  
 
== PHP ==
 
== PHP ==

Версия 14:36, 19 июня 2018

Пакеты / Packets
Сервис / Service Ссылки / Links Комментарий / Note
gdeliveryd ProtocolType 1.1.6 v6 — 1.5.5 v156
CallID
gamedbd ProtocolType 1.5.1 v101
CallID
uniquenamed ProtocolType 1.5.1 v101
CallID

Список пакетов из gdeliveryd, gamedbd и uniquenamed воссоздан парсингом отладочной информации (DWARF). Список и структуры пакетов актуальны для всех версий. Для пакетов сделаны зависимости друг от друга — легко найти пакет, который придет от сервера как ответ, и наоборот. Зависимости отображаются на страницах пакетов. Для каждого сервиса предоставлены списки ProtocolType и CallID, пакеты из последнего можно вызывать только со стороны сервера.

PHP

Пример работы

Для примера рассмотрим получение никнейма персонажа по его ID из сервиса gamedbd через пакет GetRoleBaseArg.

<?
include("packet_class.php");
$GetRoleBase = new WritePacket();
$GetRoleBase -> WriteUInt32(-1); // always for gamedbd
$GetRoleBase -> WriteUInt32(1024); // roleid
$GetRoleBase -> Pack(0xBC5); // opcode
 
if (!$GetRoleBase -> Send("localhost", 29400)) // send to gamedbd
return;
 
$GetRoleBase_Re = new ReadPacket($GetRoleBase); // reading packet from stream
$packetinfo = $GetRoleBase_Re -> ReadPacketInfo(); // read opcode and length
$GetRoleBase_Re -> ReadUInt32(); // always
$GetRoleBase_Re -> ReadUInt32(); // retcode
$GetRoleBase_Re -> ReadUByte(); // version
$GetRoleBase_Re -> ReadUInt32(); // id
echo $GetRoleBase_Re -> ReadUString(); // show rolename
?>

Замечания по WritePacket

  • Для работы с пакетами gdeliveryd следует установить true значению passestablished.
...
$packet = new WritePacket();
$packet -> passestablished = true;
...
  • Для игнорирования ответного пакета (применительно к пакетам, у которых вообще нет ответных) следует установить false значению getresponse.
...
$packet = new WritePacket();
$packet -> getresponse = false;
...