Работа с пакетами в PHP — различия между версиями
Материал из Perfect World Develop Wiki
(Новая страница: «= PHP = * Код класса <pre><? // Bei Desmond Hume class ReadPacket { public $data, $pos; function __construct($obj = null) { $this -> data = $obj -…») |
|||
(не показано 10 промежуточных версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | + | * [[Код класса 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:11, 19 июня 2018
Пример работы
Для примера рассмотрим получение никнейма персонажа по его 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; ...