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

Материал из Perfect World Develop Wiki
Перейти к: навигация, поиск
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
 
{| class="wikitable" border="1" width=100%
 
{| class="wikitable" border="1" width=100%
 
|-
 
|-
! colspan="3" | Пакеты / Packets
+
! colspan="3" | Списки пакетов
 
|-
 
|-
! Сервис / Service
+
! Сервис
! Ссылки / Links
+
! Ссылки
! Комментарий / Note
+
! Комментарий
 
|-
 
|-
 
! rowspan="2" | gdeliveryd
 
! rowspan="2" | gdeliveryd
Строка 27: Строка 27:
 
Список пакетов из gdeliveryd, gamedbd и uniquenamed воссоздан парсингом отладочной информации ([http://en.wikipedia.org/wiki/DWARF DWARF]). Список и структуры пакетов актуальны для всех версий. Для пакетов сделаны зависимости друг от друга — легко найти пакет, который придет от сервера как ответ, и наоборот. Зависимости отображаются на страницах пакетов. Для каждого сервиса предоставлены списки ProtocolType и CallID, пакеты из последнего можно вызывать только со стороны сервера.
 
Список пакетов из gdeliveryd, gamedbd и uniquenamed воссоздан парсингом отладочной информации ([http://en.wikipedia.org/wiki/DWARF DWARF]). Список и структуры пакетов актуальны для всех версий. Для пакетов сделаны зависимости друг от друга — легко найти пакет, который придет от сервера как ответ, и наоборот. Зависимости отображаются на страницах пакетов. Для каждого сервиса предоставлены списки ProtocolType и CallID, пакеты из последнего можно вызывать только со стороны сервера.
  
== PHP ==
+
= Реализации =
* [[Код класса PHP для работы с пакетами]]
+
* [[Работа с пакетами в PHP|PHP]]
=== Пример работы ===
+
Для примера рассмотрим получение никнейма персонажа по его ID из сервиса gamedbd через пакет [[GetRoleBaseArg]].
+
<syntaxhighlight lang="php"><?
+
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
+
?></syntaxhighlight>
+
=== Замечания по WritePacket ===
+
* Для работы с пакетами gdeliveryd следует установить true значению passestablished.
+
<syntaxhighlight lang="php">...
+
$packet = new WritePacket();
+
$packet -> passestablished = true;
+
...</syntaxhighlight>
+
* Для игнорирования ответного пакета (применительно к пакетам, у которых вообще нет ответных) следует установить false значению getresponse.
+
<syntaxhighlight lang="php">...
+
$packet = new WritePacket();
+
$packet -> getresponse = false;
+
...</syntaxhighlight>
+

Текущая версия на 16:09, 19 июня 2018

Списки пакетов
Сервис Ссылки Комментарий
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, пакеты из последнего можно вызывать только со стороны сервера.

Реализации