Работа с пакетами в PHP

Материал из Perfect World Develop Wiki
Версия от 16:11, 19 июня 2018; DesmondHume (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

Для примера рассмотрим получение никнейма персонажа по его 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;
...