From c1ba735c9e9b68416b7e50d56ab37e16691d7234 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 27 Dec 2022 18:05:34 +0000 Subject: [PATCH] Move common protocol disconnection logic to NetworkSession --- src/network/mcpe/NetworkSession.php | 9 ++++++++- src/network/mcpe/handler/LoginPacketHandler.php | 10 +--------- .../mcpe/handler/SessionStartPacketHandler.php | 12 +----------- 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index 29a3bff413..6ac31cd9f3 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -74,6 +74,7 @@ use pocketmine\network\mcpe\protocol\PacketDecodeException; use pocketmine\network\mcpe\protocol\PacketPool; use pocketmine\network\mcpe\protocol\PlayerListPacket; use pocketmine\network\mcpe\protocol\PlayStatusPacket; +use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\network\mcpe\protocol\RemoveActorPacket; use pocketmine\network\mcpe\protocol\serializer\PacketBatch; use pocketmine\network\mcpe\protocol\serializer\PacketSerializer; @@ -201,7 +202,6 @@ class NetworkSession{ $this->connectTime = time(); $this->setHandler(new SessionStartPacketHandler( - $this->server, $this, fn() => $this->onSessionStartSuccess() )); @@ -581,6 +581,13 @@ class NetworkSession{ }, $reason); } + public function disconnectIncompatibleProtocol(int $protocolVersion) : void{ + $this->tryDisconnect( + fn() => $this->sendDataPacket(PlayStatusPacket::create($protocolVersion < ProtocolInfo::CURRENT_PROTOCOL ? PlayStatusPacket::LOGIN_FAILED_CLIENT : PlayStatusPacket::LOGIN_FAILED_SERVER), true), + $this->server->getLanguage()->translate(KnownTranslationFactory::pocketmine_disconnect_incompatibleProtocol((string) $protocolVersion)) + ); + } + /** * Instructs the remote client to connect to a different server. */ diff --git a/src/network/mcpe/handler/LoginPacketHandler.php b/src/network/mcpe/handler/LoginPacketHandler.php index 11e5b4af44..07ca46b392 100644 --- a/src/network/mcpe/handler/LoginPacketHandler.php +++ b/src/network/mcpe/handler/LoginPacketHandler.php @@ -25,7 +25,6 @@ namespace pocketmine\network\mcpe\handler; use pocketmine\entity\InvalidSkinException; use pocketmine\event\player\PlayerPreLoginEvent; -use pocketmine\lang\KnownTranslationFactory; use pocketmine\lang\KnownTranslationKeys; use pocketmine\network\mcpe\auth\ProcessLoginTask; use pocketmine\network\mcpe\convert\SkinAdapterSingleton; @@ -33,7 +32,6 @@ use pocketmine\network\mcpe\JwtException; use pocketmine\network\mcpe\JwtUtils; use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\LoginPacket; -use pocketmine\network\mcpe\protocol\PlayStatusPacket; use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\network\mcpe\protocol\types\login\AuthenticationData; use pocketmine\network\mcpe\protocol\types\login\ClientData; @@ -64,13 +62,7 @@ class LoginPacketHandler extends PacketHandler{ public function handleLogin(LoginPacket $packet) : bool{ if(!$this->isCompatibleProtocol($packet->protocol)){ - $this->session->sendDataPacket(PlayStatusPacket::create($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL ? PlayStatusPacket::LOGIN_FAILED_CLIENT : PlayStatusPacket::LOGIN_FAILED_SERVER), true); - - //This pocketmine disconnect message will only be seen by the console (PlayStatusPacket causes the messages to be shown for the client) - $this->session->disconnect( - $this->server->getLanguage()->translate(KnownTranslationFactory::pocketmine_disconnect_incompatibleProtocol((string) $packet->protocol)), - false - ); + $this->session->disconnectIncompatibleProtocol($packet->protocol); return true; } diff --git a/src/network/mcpe/handler/SessionStartPacketHandler.php b/src/network/mcpe/handler/SessionStartPacketHandler.php index 687422de20..dd7ae47a85 100644 --- a/src/network/mcpe/handler/SessionStartPacketHandler.php +++ b/src/network/mcpe/handler/SessionStartPacketHandler.php @@ -23,14 +23,11 @@ declare(strict_types=1); namespace pocketmine\network\mcpe\handler; -use pocketmine\lang\KnownTranslationFactory; use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\NetworkSettingsPacket; -use pocketmine\network\mcpe\protocol\PlayStatusPacket; use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\network\mcpe\protocol\RequestNetworkSettingsPacket; use pocketmine\network\mcpe\protocol\types\CompressionAlgorithm; -use pocketmine\Server; final class SessionStartPacketHandler extends PacketHandler{ @@ -38,7 +35,6 @@ final class SessionStartPacketHandler extends PacketHandler{ * @phpstan-param \Closure() : void $onSuccess */ public function __construct( - private Server $server, private NetworkSession $session, private \Closure $onSuccess ){} @@ -46,13 +42,7 @@ final class SessionStartPacketHandler extends PacketHandler{ public function handleRequestNetworkSettings(RequestNetworkSettingsPacket $packet) : bool{ $protocolVersion = $packet->getProtocolVersion(); if(!$this->isCompatibleProtocol($protocolVersion)){ - $this->session->sendDataPacket(PlayStatusPacket::create($protocolVersion < ProtocolInfo::CURRENT_PROTOCOL ? PlayStatusPacket::LOGIN_FAILED_CLIENT : PlayStatusPacket::LOGIN_FAILED_SERVER), true); - - //This pocketmine disconnect message will only be seen by the console (PlayStatusPacket causes the messages to be shown for the client) - $this->session->disconnect( - $this->server->getLanguage()->translate(KnownTranslationFactory::pocketmine_disconnect_incompatibleProtocol((string) $protocolVersion)), - false - ); + $this->session->disconnectIncompatibleProtocol($protocolVersion); return true; }