Eliminate usages of BinaryStream->setBuffer() and BinaryStream->reset()

This commit is contained in:
Dylan K. Taylor 2020-06-17 13:49:43 +01:00
parent 893f7cb6ef
commit c618932d25
5 changed files with 16 additions and 11 deletions

View File

@ -55,6 +55,10 @@ abstract class DataPacket implements Packet{
return $this->buf; return $this->buf;
} }
public function setSerializer(PacketSerializer $serializer) : void{
$this->buf = $serializer;
}
public function pid() : int{ public function pid() : int{
return $this::NETWORK_ID; return $this::NETWORK_ID;
} }
@ -105,7 +109,7 @@ abstract class DataPacket implements Packet{
abstract protected function decodePayload(PacketSerializer $in) : void; abstract protected function decodePayload(PacketSerializer $in) : void;
final public function encode() : void{ final public function encode() : void{
$this->buf->reset(); $this->buf = new PacketSerializer();
$this->encodeHeader($this->buf); $this->encodeHeader($this->buf);
$this->encodePayload($this->buf); $this->encodePayload($this->buf);
} }

View File

@ -29,6 +29,8 @@ interface Packet{
public function getSerializer() : PacketSerializer; public function getSerializer() : PacketSerializer;
public function setSerializer(PacketSerializer $serializer) : void;
public function pid() : int; public function pid() : int;
public function getName() : string; public function getName() : string;

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\network\mcpe\protocol; namespace pocketmine\network\mcpe\protocol;
use pocketmine\utils\Binary; use pocketmine\network\mcpe\protocol\serializer\PacketSerializer;
use pocketmine\utils\BinaryDataException; use pocketmine\utils\BinaryDataException;
class PacketPool{ class PacketPool{
@ -199,9 +199,9 @@ class PacketPool{
* @throws BinaryDataException * @throws BinaryDataException
*/ */
public function getPacket(string $buffer) : Packet{ public function getPacket(string $buffer) : Packet{
$offset = 0; $serializer = new PacketSerializer($buffer);
$pk = $this->getPacketById(Binary::readUnsignedVarInt($buffer, $offset) & DataPacket::PID_MASK); $pk = $this->getPacketById($serializer->getUnsignedVarInt() & DataPacket::PID_MASK);
$pk->getSerializer()->setBuffer($buffer, $offset); $pk->setSerializer($serializer);
return $pk; return $pk;
} }

View File

@ -240,8 +240,6 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
$chunkVersion = ord($chunkVersionRaw); $chunkVersion = ord($chunkVersionRaw);
$hasBeenUpgraded = $chunkVersion < self::CURRENT_LEVEL_CHUNK_VERSION; $hasBeenUpgraded = $chunkVersion < self::CURRENT_LEVEL_CHUNK_VERSION;
$binaryStream = new BinaryStream();
switch($chunkVersion){ switch($chunkVersion){
case 15: //MCPE 1.12.0.4 beta (???) case 15: //MCPE 1.12.0.4 beta (???)
case 14: //MCPE 1.11.1.2 (???) case 14: //MCPE 1.11.1.2 (???)
@ -262,7 +260,7 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
continue; continue;
} }
$binaryStream->setBuffer($data); $binaryStream = new BinaryStream($data);
if($binaryStream->feof()){ if($binaryStream->feof()){
throw new CorruptedChunkException("Unexpected empty data for subchunk $y"); throw new CorruptedChunkException("Unexpected empty data for subchunk $y");
} }
@ -324,7 +322,7 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
} }
if(($maps2d = $this->db->get($index . self::TAG_DATA_2D)) !== false){ if(($maps2d = $this->db->get($index . self::TAG_DATA_2D)) !== false){
$binaryStream->setBuffer($maps2d); $binaryStream = new BinaryStream($maps2d);
try{ try{
$binaryStream->get(512); //heightmap, discard it $binaryStream->get(512); //heightmap, discard it
@ -343,7 +341,7 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
if($legacyTerrain === false){ if($legacyTerrain === false){
throw new CorruptedChunkException("Missing expected LEGACY_TERRAIN tag for format version $chunkVersion"); throw new CorruptedChunkException("Missing expected LEGACY_TERRAIN tag for format version $chunkVersion");
} }
$binaryStream->setBuffer($legacyTerrain); $binaryStream = new BinaryStream($legacyTerrain);
try{ try{
$fullIds = $binaryStream->get(32768); $fullIds = $binaryStream->get(32768);
$fullData = $binaryStream->get(16384); $fullData = $binaryStream->get(16384);

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace pocketmine\network\mcpe\protocol; namespace pocketmine\network\mcpe\protocol;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use pocketmine\network\mcpe\protocol\serializer\PacketSerializer;
class DataPacketTest extends TestCase{ class DataPacketTest extends TestCase{
@ -34,7 +35,7 @@ class DataPacketTest extends TestCase{
$pk->encode(); $pk->encode();
$pk2 = new TestPacket(); $pk2 = new TestPacket();
$pk2->getSerializer()->setBuffer($pk->getSerializer()->getBuffer()); $pk2->setSerializer(new PacketSerializer($pk->getSerializer()->getBuffer()));
$pk2->decode(); $pk2->decode();
self::assertSame($pk2->senderSubId, 3); self::assertSame($pk2->senderSubId, 3);
self::assertSame($pk2->recipientSubId, 2); self::assertSame($pk2->recipientSubId, 2);