diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index 41036ee70..7c47b6763 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -46,7 +46,6 @@ use pocketmine\network\mcpe\handler\DeathPacketHandler; use pocketmine\network\mcpe\handler\HandshakePacketHandler; use pocketmine\network\mcpe\handler\InGamePacketHandler; use pocketmine\network\mcpe\handler\LoginPacketHandler; -use pocketmine\network\mcpe\handler\NullPacketHandler; use pocketmine\network\mcpe\handler\PacketHandler; use pocketmine\network\mcpe\handler\PreSpawnPacketHandler; use pocketmine\network\mcpe\handler\ResourcePacksPacketHandler; @@ -126,8 +125,8 @@ class NetworkSession{ /** @var int|null */ private $ping = null; - /** @var PacketHandler */ - private $handler; + /** @var PacketHandler|null */ + private $handler = null; /** @var bool */ private $connected = true; @@ -258,14 +257,16 @@ class NetworkSession{ $this->ping = $ping; } - public function getHandler() : PacketHandler{ + public function getHandler() : ?PacketHandler{ return $this->handler; } - public function setHandler(PacketHandler $handler) : void{ + public function setHandler(?PacketHandler $handler) : void{ if($this->connected){ //TODO: this is fine since we can't handle anything from a disconnected session, but it might produce surprises in some cases $this->handler = $handler; - $this->handler->setUp(); + if($this->handler !== null){ + $this->handler->setUp(); + } } } @@ -350,7 +351,7 @@ class NetworkSession{ $ev = new DataPacketReceiveEvent($this, $packet); $ev->call(); - if(!$ev->isCancelled() and !$packet->handle($this->handler)){ + if(!$ev->isCancelled() and ($this->handler === null or !$packet->handle($this->handler))){ $this->logger->debug("Unhandled " . $packet->getName() . ": " . base64_encode($stream->getBuffer())); } }finally{ @@ -459,7 +460,7 @@ class NetworkSession{ $this->disconnectGuard = true; $func(); $this->disconnectGuard = false; - $this->setHandler(NullPacketHandler::getInstance()); + $this->setHandler(null); $this->connected = false; $this->manager->remove($this); $this->logger->info("Session closed due to $reason"); diff --git a/src/network/mcpe/handler/LoginPacketHandler.php b/src/network/mcpe/handler/LoginPacketHandler.php index 6553293b5..6b2f7faa7 100644 --- a/src/network/mcpe/handler/LoginPacketHandler.php +++ b/src/network/mcpe/handler/LoginPacketHandler.php @@ -195,7 +195,7 @@ class LoginPacketHandler extends PacketHandler{ */ protected function processLogin(LoginPacket $packet, bool $authRequired) : void{ $this->server->getAsyncPool()->submitTask(new ProcessLoginTask($packet, $authRequired, $this->authCallback)); - $this->session->setHandler(NullPacketHandler::getInstance()); //drop packets received during login verification + $this->session->setHandler(null); //drop packets received during login verification } protected function isCompatibleProtocol(int $protocolVersion) : bool{ diff --git a/src/network/mcpe/handler/NullPacketHandler.php b/src/network/mcpe/handler/NullPacketHandler.php deleted file mode 100644 index 17cbf200b..000000000 --- a/src/network/mcpe/handler/NullPacketHandler.php +++ /dev/null @@ -1,40 +0,0 @@ -