Позволяет собирать и читать пакеты на PHP. Слеплен на скорую руку. Приветствуются предложения. Структура: Пример получения ника перса по его ID (в пакете есть и другая инфа, чтобы было, смотреть структуру GRoleBase), чтобы понять работу класса: PHP: <?include("packet_class.php");$GetRoleBase = new WritePacket();$GetRoleBase -> WriteUInt32(-1); // always$GetRoleBase -> WriteUInt32(1024); // userid$GetRoleBase -> Pack(0xBC5);if (!$GetRoleBase -> Send("localhost", 29400)) // send to gamedbdreturn;$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(); // idecho $GetRoleBase_Re -> ReadUString(); // show rolename?>
А в PHP разве нет перегрузки методов? 代码: procedure Write(Value: Byte); overload; procedure Write(Value: SmallInt); overload; procedure Write(Value: Word); overload; procedure Write(Value: Integer); overload; procedure Write(Value: Cardinal); overload; procedure Write(Value: Int64); overload; procedure Write(Value: UInt64); overload; procedure Write(Value: Single); overload; procedure Write(Value: Real); overload; procedure Write(Value: Boolean); overload;
Там нет обязательного четкого приведения типов. В переменную можно кидать любые типы, или кастовать в нужный по необходимости (при различных операциях сложения и модификаций php может это делать сам), поэтому overload методы тут только добавят гемороя. Какой же это UInt если с минусом?)
По поводу предложений: ввести 2 переменных done и overflow для проверки статуса после завершения чтения пакета. А также учесть при чтении, что чтение может продолжаться даже после выхода из размеров буфера и добавить соотв. проверки и возврат дефолтного нуля.
UPD (thnx @vieraw): Удалена WriteInt32 Удалена WriteString Буфер увеличен до 128 кбайт Свойства объявлены как public Переписана функция упаковки в CUInt32