Modernize private property declarations in src/network

This commit is contained in:
Dylan K. Taylor 2022-05-17 21:22:33 +01:00
parent cd016bedce
commit 6eac2ea7a5
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
31 changed files with 154 additions and 340 deletions

View File

@ -29,15 +29,10 @@ use function count;
final class BandwidthStatsTracker{ final class BandwidthStatsTracker{
/** @var int[] */ /** @var int[] */
private $history; private array $history;
/** @var int */ private int $nextHistoryIndex = 0;
private $nextHistoryIndex = 0; private int $bytesSinceLastRotation = 0;
private int $totalBytes = 0;
/** @var int */
private $bytesSinceLastRotation = 0;
/** @var int */
private $totalBytes = 0;
/** @phpstan-param positive-int $historySize */ /** @phpstan-param positive-int $historySize */
public function __construct(int $historySize){ public function __construct(int $historySize){

View File

@ -24,12 +24,8 @@ declare(strict_types=1);
namespace pocketmine\network; namespace pocketmine\network;
final class BidirectionalBandwidthStatsTracker{ final class BidirectionalBandwidthStatsTracker{
private BandwidthStatsTracker $send;
/** @var BandwidthStatsTracker */ private BandwidthStatsTracker $receive;
private $send;
/** @var BandwidthStatsTracker */
private $receive;
/** @phpstan-param positive-int $historySize */ /** @phpstan-param positive-int $historySize */
public function __construct(int $historySize){ public function __construct(int $historySize){

View File

@ -38,35 +38,28 @@ use const PHP_INT_MAX;
class Network{ class Network{
/** @var NetworkInterface[] */ /** @var NetworkInterface[] */
private $interfaces = []; private array $interfaces = [];
/** @var AdvancedNetworkInterface[] */ /** @var AdvancedNetworkInterface[] */
private $advancedInterfaces = []; private array $advancedInterfaces = [];
/** @var RawPacketHandler[] */ /** @var RawPacketHandler[] */
private $rawPacketHandlers = []; private array $rawPacketHandlers = [];
/** /**
* @var int[] * @var int[]
* @phpstan-var array<string, int> * @phpstan-var array<string, int>
*/ */
private $bannedIps = []; private array $bannedIps = [];
/** @var BidirectionalBandwidthStatsTracker */ private BidirectionalBandwidthStatsTracker $bandwidthTracker;
private $bandwidthTracker; private string $name;
private NetworkSessionManager$sessionManager;
/** @var string */ public function __construct(
private $name; private \Logger $logger
){
/** @var NetworkSessionManager */
private $sessionManager;
/** @var \Logger */
private $logger;
public function __construct(\Logger $logger){
$this->sessionManager = new NetworkSessionManager(); $this->sessionManager = new NetworkSessionManager();
$this->logger = $logger;
$this->bandwidthTracker = new BidirectionalBandwidthStatsTracker(5); $this->bandwidthTracker = new BidirectionalBandwidthStatsTracker(5);
} }

View File

@ -30,7 +30,7 @@ use function spl_object_id;
class NetworkSessionManager{ class NetworkSessionManager{
/** @var NetworkSession[] */ /** @var NetworkSession[] */
private $sessions = []; private array $sessions = [];
/** /**
* Adds a network session to the manager. This should only be called on session creation. * Adds a network session to the manager. This should only be called on session creation.

View File

@ -75,15 +75,9 @@ class InventoryManager{
private const RESERVED_WINDOW_ID_RANGE_START = ContainerIds::LAST - 10; private const RESERVED_WINDOW_ID_RANGE_START = ContainerIds::LAST - 10;
private const HARDCODED_INVENTORY_WINDOW_ID = self::RESERVED_WINDOW_ID_RANGE_START + 2; private const HARDCODED_INVENTORY_WINDOW_ID = self::RESERVED_WINDOW_ID_RANGE_START + 2;
/** @var Player */
private $player;
/** @var NetworkSession */
private $session;
/** @var Inventory[] */ /** @var Inventory[] */
private $windowMap = []; private array $windowMap = [];
/** @var int */ private int $lastInventoryNetworkId = ContainerIds::FIRST;
private $lastInventoryNetworkId = ContainerIds::FIRST;
/** /**
* TODO: HACK! This tracks GUIs for inventories that the server considers "always open" so that the client can't * TODO: HACK! This tracks GUIs for inventories that the server considers "always open" so that the client can't
@ -98,17 +92,16 @@ class InventoryManager{
* @var Item[][] * @var Item[][]
* @phpstan-var array<int, array<int, Item>> * @phpstan-var array<int, array<int, Item>>
*/ */
private $initiatedSlotChanges = []; private array $initiatedSlotChanges = [];
/** @var int */ private int $clientSelectedHotbarSlot = -1;
private $clientSelectedHotbarSlot = -1;
/** @phpstan-var ObjectSet<ContainerOpenClosure> */ /** @phpstan-var ObjectSet<ContainerOpenClosure> */
private ObjectSet $containerOpenCallbacks; private ObjectSet $containerOpenCallbacks;
public function __construct(Player $player, NetworkSession $session){ public function __construct(
$this->player = $player; private Player $player,
$this->session = $session; private NetworkSession $session
){
$this->containerOpenCallbacks = new ObjectSet(); $this->containerOpenCallbacks = new ObjectSet();
$this->containerOpenCallbacks->add(\Closure::fromCallable([self::class, 'createContainerOpen'])); $this->containerOpenCallbacks->add(\Closure::fromCallable([self::class, 'createContainerOpen']));

View File

@ -28,13 +28,7 @@ use pocketmine\Server;
use function spl_object_id; use function spl_object_id;
final class StandardPacketBroadcaster implements PacketBroadcaster{ final class StandardPacketBroadcaster implements PacketBroadcaster{
public function __construct(private Server $server){}
/** @var Server */
private $server;
public function __construct(Server $server){
$this->server = $server;
}
public function broadcastPackets(array $recipients, array $packets) : void{ public function broadcastPackets(array $recipients, array $packets) : void{
$buffers = []; $buffers = [];

View File

@ -79,23 +79,16 @@ class ChunkCache implements ChunkListener{
} }
} }
/** @var World */
private $world;
/** @var Compressor */
private $compressor;
/** @var CompressBatchPromise[] */ /** @var CompressBatchPromise[] */
private $caches = []; private array $caches = [];
/** @var int */ private int $hits = 0;
private $hits = 0; private int $misses = 0;
/** @var int */
private $misses = 0;
private function __construct(World $world, Compressor $compressor){ private function __construct(
$this->world = $world; private World $world,
$this->compressor = $compressor; private Compressor $compressor
} ){}
/** /**
* Requests asynchronous preparation of the chunk at the given coordinates. * Requests asynchronous preparation of the chunk at the given coordinates.

View File

@ -54,7 +54,7 @@ final class CraftingDataCache{
* @var CraftingDataPacket[] * @var CraftingDataPacket[]
* @phpstan-var array<int, CraftingDataPacket> * @phpstan-var array<int, CraftingDataPacket>
*/ */
private $caches = []; private array $caches = [];
public function getCache(CraftingManager $manager) : CraftingDataPacket{ public function getCache(CraftingManager $manager) : CraftingDataPacket{
$id = spl_object_id($manager); $id = spl_object_id($manager);

View File

@ -34,11 +34,6 @@ use function file_get_contents;
class StaticPacketCache{ class StaticPacketCache{
use SingletonTrait; use SingletonTrait;
/** @var BiomeDefinitionListPacket */
private $biomeDefs;
/** @var AvailableActorIdentifiersPacket */
private $availableActorIdentifiers;
/** /**
* @phpstan-return CacheableNbt<\pocketmine\nbt\tag\CompoundTag> * @phpstan-return CacheableNbt<\pocketmine\nbt\tag\CompoundTag>
*/ */
@ -55,10 +50,10 @@ class StaticPacketCache{
); );
} }
public function __construct(BiomeDefinitionListPacket $biomeDefs, AvailableActorIdentifiersPacket $availableActorIdentifiers){ public function __construct(
$this->biomeDefs = $biomeDefs; private BiomeDefinitionListPacket $biomeDefs,
$this->availableActorIdentifiers = $availableActorIdentifiers; private AvailableActorIdentifiersPacket $availableActorIdentifiers
} ){}
public function getBiomeDefs() : BiomeDefinitionListPacket{ public function getBiomeDefs() : BiomeDefinitionListPacket{
return $this->biomeDefs; return $this->biomeDefs;

View File

@ -31,13 +31,11 @@ class CompressBatchPromise{
* @var \Closure[] * @var \Closure[]
* @phpstan-var (\Closure(self) : void)[] * @phpstan-var (\Closure(self) : void)[]
*/ */
private $callbacks = []; private array $callbacks = [];
/** @var string|null */ private ?string $result = null;
private $result = null;
/** @var bool */ private bool $cancelled = false;
private $cancelled = false;
/** /**
* @phpstan-param \Closure(self) : void ...$callbacks * @phpstan-param \Closure(self) : void ...$callbacks

View File

@ -46,21 +46,14 @@ final class ZlibCompressor implements Compressor{
return new self(self::DEFAULT_LEVEL, self::DEFAULT_THRESHOLD, self::DEFAULT_MAX_DECOMPRESSION_SIZE); return new self(self::DEFAULT_LEVEL, self::DEFAULT_THRESHOLD, self::DEFAULT_MAX_DECOMPRESSION_SIZE);
} }
/** @var int */ public function __construct(
private $level; private int $level,
/** @var int */ private int $minCompressionSize,
private $threshold; private int $maxDecompressionSize
/** @var int */ ){}
private $maxDecompressionSize;
public function __construct(int $level, int $minCompressionSize, int $maxDecompressionSize){
$this->level = $level;
$this->threshold = $minCompressionSize;
$this->maxDecompressionSize = $maxDecompressionSize;
}
public function willCompress(string $data) : bool{ public function willCompress(string $data) : bool{
return $this->threshold > -1 && strlen($data) >= $this->threshold; return $this->minCompressionSize > -1 && strlen($data) >= $this->minCompressionSize;
} }
/** /**

View File

@ -46,25 +46,25 @@ final class ItemTranslator{
* @var int[] * @var int[]
* @phpstan-var array<int, int> * @phpstan-var array<int, int>
*/ */
private $simpleCoreToNetMapping = []; private array $simpleCoreToNetMapping = [];
/** /**
* @var int[] * @var int[]
* @phpstan-var array<int, int> * @phpstan-var array<int, int>
*/ */
private $simpleNetToCoreMapping = []; private array $simpleNetToCoreMapping = [];
/** /**
* runtimeId = array[internalId][metadata] * runtimeId = array[internalId][metadata]
* @var int[][] * @var int[][]
* @phpstan-var array<int, array<int, int>> * @phpstan-var array<int, array<int, int>>
*/ */
private $complexCoreToNetMapping = []; private array $complexCoreToNetMapping = [];
/** /**
* [internalId, metadata] = array[runtimeId] * [internalId, metadata] = array[runtimeId]
* @var int[][] * @var int[][]
* @phpstan-var array<int, array{int, int}> * @phpstan-var array<int, array{int, int}>
*/ */
private $complexNetToCoreMapping = []; private array $complexNetToCoreMapping = [];
private static function make() : self{ private static function make() : self{
$data = Utils::assumeNotFalse(file_get_contents(Path::join(\pocketmine\BEDROCK_DATA_PATH, 'r16_to_current_item_map.json')), "Missing required resource file"); $data = Utils::assumeNotFalse(file_get_contents(Path::join(\pocketmine\BEDROCK_DATA_PATH, 'r16_to_current_item_map.json')), "Missing required resource file");

View File

@ -26,19 +26,11 @@ namespace pocketmine\network\mcpe\convert;
use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\CompoundTag;
final class R12ToCurrentBlockMapEntry{ final class R12ToCurrentBlockMapEntry{
public function __construct(
/** @var string */ private string $id,
private $id; private int $meta,
/** @var int */ private CompoundTag $blockState
private $meta; ){}
/** @var CompoundTag */
private $blockState;
public function __construct(string $id, int $meta, CompoundTag $blockState){
$this->id = $id;
$this->meta = $meta;
$this->blockState = $blockState;
}
public function getId() : string{ public function getId() : string{
return $this->id; return $this->id;

View File

@ -42,11 +42,11 @@ final class RuntimeBlockMapping{
use SingletonTrait; use SingletonTrait;
/** @var int[] */ /** @var int[] */
private $legacyToRuntimeMap = []; private array $legacyToRuntimeMap = [];
/** @var int[] */ /** @var int[] */
private $runtimeToLegacyMap = []; private array $runtimeToLegacyMap = [];
/** @var CompoundTag[] */ /** @var CompoundTag[] */
private $bedrockKnownStates; private array $bedrockKnownStates;
private static function make() : self{ private static function make() : self{
return new self( return new self(

View File

@ -60,8 +60,7 @@ class TypeConverter{
private const PM_ID_TAG = "___Id___"; private const PM_ID_TAG = "___Id___";
private const PM_META_TAG = "___Meta___"; private const PM_META_TAG = "___Meta___";
/** @var int */ private int $shieldRuntimeId;
private $shieldRuntimeId;
public function __construct(){ public function __construct(){
//TODO: inject stuff via constructor //TODO: inject stuff via constructor

View File

@ -37,18 +37,13 @@ class EncryptionContext{
/** @var bool */ /** @var bool */
public static $ENABLED = true; public static $ENABLED = true;
/** @var string */ private string $key;
private $key;
/** @var Cipher */ private Cipher $decryptCipher;
private $decryptCipher; private int $decryptCounter = 0;
/** @var int */ private Cipher $encryptCipher;
private $decryptCounter = 0; private int $encryptCounter = 0;
/** @var Cipher */
private $encryptCipher;
/** @var int */
private $encryptCounter = 0;
public function __construct(string $encryptionKey, string $algorithm, string $iv){ public function __construct(string $encryptionKey, string $algorithm, string $iv){
$this->key = $encryptionKey; $this->key = $encryptionKey;

View File

@ -32,18 +32,11 @@ use pocketmine\network\mcpe\protocol\types\PlayerAction;
use pocketmine\player\Player; use pocketmine\player\Player;
class DeathPacketHandler extends PacketHandler{ class DeathPacketHandler extends PacketHandler{
public function __construct(
/** @var Player */ private Player $player,
private $player; private NetworkSession $session,
/** @var NetworkSession */ private InventoryManager $inventoryManager
private $session; ){}
private InventoryManager $inventoryManager;
public function __construct(Player $player, NetworkSession $session, InventoryManager $inventoryManager){
$this->player = $player;
$this->session = $session;
$this->inventoryManager = $inventoryManager;
}
public function setUp() : void{ public function setUp() : void{
$this->session->sendDataPacket(RespawnPacket::create( $this->session->sendDataPacket(RespawnPacket::create(

View File

@ -29,19 +29,10 @@ use pocketmine\network\mcpe\protocol\ClientToServerHandshakePacket;
* Handler responsible for awaiting client response from crypto handshake. * Handler responsible for awaiting client response from crypto handshake.
*/ */
class HandshakePacketHandler extends PacketHandler{ class HandshakePacketHandler extends PacketHandler{
/**
* @var \Closure
* @phpstan-var \Closure() : void
*/
private $onHandshakeCompleted;
/** /**
* @phpstan-param \Closure() : void $onHandshakeCompleted * @phpstan-param \Closure() : void $onHandshakeCompleted
*/ */
public function __construct(\Closure $onHandshakeCompleted){ public function __construct(private \Closure $onHandshakeCompleted){}
$this->onHandshakeCompleted = $onHandshakeCompleted;
}
public function handleClientToServerHandshake(ClientToServerHandshakePacket $packet) : bool{ public function handleClientToServerHandshake(ClientToServerHandshakePacket $packet) : bool{
($this->onHandshakeCompleted)(); ($this->onHandshakeCompleted)();

View File

@ -135,11 +135,6 @@ use const JSON_THROW_ON_ERROR;
class InGamePacketHandler extends PacketHandler{ class InGamePacketHandler extends PacketHandler{
private const MAX_FORM_RESPONSE_DEPTH = 2; //modal/simple will be 1, custom forms 2 - they will never contain anything other than string|int|float|bool|null private const MAX_FORM_RESPONSE_DEPTH = 2; //modal/simple will be 1, custom forms 2 - they will never contain anything other than string|int|float|bool|null
/** @var Player */
private $player;
/** @var NetworkSession */
private $session;
/** @var CraftingTransaction|null */ /** @var CraftingTransaction|null */
protected $craftingTransaction = null; protected $craftingTransaction = null;
@ -151,13 +146,11 @@ class InGamePacketHandler extends PacketHandler{
/** @var bool */ /** @var bool */
public $forceMoveSync = false; public $forceMoveSync = false;
private InventoryManager $inventoryManager; public function __construct(
private Player $player,
public function __construct(Player $player, NetworkSession $session, InventoryManager $inventoryManager){ private NetworkSession $session,
$this->player = $player; private InventoryManager $inventoryManager
$this->session = $session; ){}
$this->inventoryManager = $inventoryManager;
}
public function handleText(TextPacket $packet) : bool{ public function handleText(TextPacket $packet) : bool{
if($packet->type === TextPacket::TYPE_CHAT){ if($packet->type === TextPacket::TYPE_CHAT){

View File

@ -51,32 +51,16 @@ use function is_array;
* Handles the initial login phase of the session. This handler is used as the initial state. * Handles the initial login phase of the session. This handler is used as the initial state.
*/ */
class LoginPacketHandler extends PacketHandler{ class LoginPacketHandler extends PacketHandler{
/** @var Server */
private $server;
/** @var NetworkSession */
private $session;
/**
* @var \Closure
* @phpstan-var \Closure(PlayerInfo) : void
*/
private $playerInfoConsumer;
/**
* @var \Closure
* @phpstan-var \Closure(bool, bool, ?string, ?string) : void
*/
private $authCallback;
/** /**
* @phpstan-param \Closure(PlayerInfo) : void $playerInfoConsumer * @phpstan-param \Closure(PlayerInfo) : void $playerInfoConsumer
* @phpstan-param \Closure(bool $isAuthenticated, bool $authRequired, ?string $error, ?string $clientPubKey) : void $authCallback * @phpstan-param \Closure(bool $isAuthenticated, bool $authRequired, ?string $error, ?string $clientPubKey) : void $authCallback
*/ */
public function __construct(Server $server, NetworkSession $session, \Closure $playerInfoConsumer, \Closure $authCallback){ public function __construct(
$this->session = $session; private Server $server,
$this->server = $server; private NetworkSession $session,
$this->playerInfoConsumer = $playerInfoConsumer; private \Closure $playerInfoConsumer,
$this->authCallback = $authCallback; private \Closure $authCallback
} ){}
public function handleLogin(LoginPacket $packet) : bool{ public function handleLogin(LoginPacket $packet) : bool{
if(!$this->isCompatibleProtocol($packet->protocol)){ if(!$this->isCompatibleProtocol($packet->protocol)){

View File

@ -48,22 +48,12 @@ use function sprintf;
* Handler used for the pre-spawn phase of the session. * Handler used for the pre-spawn phase of the session.
*/ */
class PreSpawnPacketHandler extends PacketHandler{ class PreSpawnPacketHandler extends PacketHandler{
public function __construct(
/** @var Server */ private Server $server,
private $server; private Player $player,
/** @var Player */ private NetworkSession $session,
private $player; private InventoryManager $inventoryManager
/** @var NetworkSession */ ){}
private $session;
private InventoryManager $inventoryManager;
public function __construct(Server $server, Player $player, NetworkSession $session, InventoryManager $inventoryManager){
$this->player = $player;
$this->server = $server;
$this->session = $session;
$this->inventoryManager = $inventoryManager;
}
public function setUp() : void{ public function setUp() : void{
$location = $this->player->getLocation(); $location = $this->player->getLocation();

View File

@ -52,27 +52,17 @@ use function substr;
class ResourcePacksPacketHandler extends PacketHandler{ class ResourcePacksPacketHandler extends PacketHandler{
private const PACK_CHUNK_SIZE = 128 * 1024; //128KB private const PACK_CHUNK_SIZE = 128 * 1024; //128KB
/** @var NetworkSession */
private $session;
/** @var ResourcePackManager */
private $resourcePackManager;
/**
* @var \Closure
* @phpstan-var \Closure() : void
*/
private $completionCallback;
/** @var bool[][] uuid => [chunk index => hasSent] */ /** @var bool[][] uuid => [chunk index => hasSent] */
private $downloadedChunks = []; private array $downloadedChunks = [];
/** /**
* @phpstan-param \Closure() : void $completionCallback * @phpstan-param \Closure() : void $completionCallback
*/ */
public function __construct(NetworkSession $session, ResourcePackManager $resourcePackManager, \Closure $completionCallback){ public function __construct(
$this->session = $session; private NetworkSession $session,
$this->resourcePackManager = $resourcePackManager; private ResourcePackManager $resourcePackManager,
$this->completionCallback = $completionCallback; private \Closure $completionCallback
} ){}
public function setUp() : void{ public function setUp() : void{
$resourcePackEntries = array_map(static function(ResourcePack $pack) : ResourcePackInfoEntry{ $resourcePackEntries = array_map(static function(ResourcePack $pack) : ResourcePackInfoEntry{

View File

@ -26,19 +26,10 @@ namespace pocketmine\network\mcpe\handler;
use pocketmine\network\mcpe\protocol\SetLocalPlayerAsInitializedPacket; use pocketmine\network\mcpe\protocol\SetLocalPlayerAsInitializedPacket;
final class SpawnResponsePacketHandler extends PacketHandler{ final class SpawnResponsePacketHandler extends PacketHandler{
/**
* @var \Closure
* @phpstan-var \Closure() : void
*/
private $responseCallback;
/** /**
* @phpstan-param \Closure() : void $responseCallback * @phpstan-param \Closure() : void $responseCallback
*/ */
public function __construct(\Closure $responseCallback){ public function __construct(private \Closure $responseCallback){}
$this->responseCallback = $responseCallback;
}
public function handleSetLocalPlayerAsInitialized(SetLocalPlayerAsInitializedPacket $packet) : bool{ public function handleSetLocalPlayerAsInitialized(SetLocalPlayerAsInitializedPacket $packet) : bool{
($this->responseCallback)(); ($this->responseCallback)();

View File

@ -26,12 +26,7 @@ namespace pocketmine\network\mcpe\raklib;
use raklib\server\ipc\InterThreadChannelReader; use raklib\server\ipc\InterThreadChannelReader;
final class PthreadsChannelReader implements InterThreadChannelReader{ final class PthreadsChannelReader implements InterThreadChannelReader{
/** @var \Threaded */ public function __construct(private \Threaded $buffer){}
private $buffer;
public function __construct(\Threaded $buffer){
$this->buffer = $buffer;
}
public function read() : ?string{ public function read() : ?string{
return $this->buffer->shift(); return $this->buffer->shift();

View File

@ -20,12 +20,7 @@ namespace pocketmine\network\mcpe\raklib;
use raklib\server\ipc\InterThreadChannelWriter; use raklib\server\ipc\InterThreadChannelWriter;
final class PthreadsChannelWriter implements InterThreadChannelWriter{ final class PthreadsChannelWriter implements InterThreadChannelWriter{
/** @var \Threaded */ public function __construct(private \Threaded $buffer){}
private $buffer;
public function __construct(\Threaded $buffer){
$this->buffer = $buffer;
}
public function write(string $str) : void{ public function write(string $str) : void{
$this->buffer[] = $str; $this->buffer[] = $str;

View File

@ -62,31 +62,21 @@ class RakLibInterface implements ServerEventListener, AdvancedNetworkInterface{
private const MCPE_RAKNET_PACKET_ID = "\xfe"; private const MCPE_RAKNET_PACKET_ID = "\xfe";
/** @var Server */ private Server $server;
private $server; private Network $network;
/** @var Network */ private int $rakServerId;
private $network; private RakLibServer $rakLib;
/** @var int */
private $rakServerId;
/** @var RakLibServer */
private $rakLib;
/** @var NetworkSession[] */ /** @var NetworkSession[] */
private $sessions = []; private array $sessions = [];
/** @var RakLibToUserThreadMessageReceiver */ private RakLibToUserThreadMessageReceiver $eventReceiver;
private $eventReceiver; private UserToRakLibThreadMessageSender $interface;
/** @var UserToRakLibThreadMessageSender */
private $interface;
/** @var SleeperNotifier */ private SleeperNotifier $sleeper;
private $sleeper;
/** @var PacketBroadcaster */ private PacketBroadcaster $broadcaster;
private $broadcaster;
public function __construct(Server $server, string $ip, int $port, bool $ipV6){ public function __construct(Server $server, string $ip, int $port, bool $ipV6){
$this->server = $server; $this->server = $server;

View File

@ -26,19 +26,12 @@ namespace pocketmine\network\mcpe\raklib;
use pocketmine\network\mcpe\PacketSender; use pocketmine\network\mcpe\PacketSender;
class RakLibPacketSender implements PacketSender{ class RakLibPacketSender implements PacketSender{
private bool $closed = false;
/** @var int */ public function __construct(
private $sessionId; private int $sessionId,
/** @var RakLibInterface */ private RakLibInterface $handler
private $handler; ){}
/** @var bool */
private $closed = false;
public function __construct(int $sessionId, RakLibInterface $handler){
$this->sessionId = $sessionId;
$this->handler = $handler;
}
public function send(string $payload, bool $immediate) : void{ public function send(string $payload, bool $immediate) : void{
if(!$this->closed){ if(!$this->closed){

View File

@ -59,29 +59,22 @@ use const SOL_UDP;
* or running on a different port than Query. * or running on a different port than Query.
*/ */
final class DedicatedQueryNetworkInterface implements AdvancedNetworkInterface{ final class DedicatedQueryNetworkInterface implements AdvancedNetworkInterface{
/** @var string */
private $ip;
/** @var int */
private $port;
/** @var \Logger */
private $logger;
private \Socket $socket; private \Socket $socket;
/** @var Network */ private Network $network;
private $network;
/** /**
* @var int[] address => timeout time * @var int[] address => timeout time
* @phpstan-var array<string, int> * @phpstan-var array<string, int>
*/ */
private $blockedIps = []; private array $blockedIps = [];
/** @var string[] */ /** @var string[] */
private $rawPacketPatterns = []; private array $rawPacketPatterns = [];
public function __construct(string $ip, int $port, bool $ipV6, \Logger $logger){
$this->ip = $ip;
$this->port = $port;
$this->logger = $logger;
public function __construct(
private string $ip,
private int $port,
bool $ipV6,
private \Logger $logger
){
$socket = @socket_create($ipV6 ? AF_INET6 : AF_INET, SOCK_DGRAM, SOL_UDP); $socket = @socket_create($ipV6 ? AF_INET6 : AF_INET, SOCK_DGRAM, SOL_UDP);
if($socket === false){ if($socket === false){
throw new \RuntimeException("Failed to create socket"); throw new \RuntimeException("Failed to create socket");

View File

@ -40,21 +40,17 @@ use function strlen;
use function substr; use function substr;
class QueryHandler implements RawPacketHandler{ class QueryHandler implements RawPacketHandler{
/** @var Server */ private string $lastToken;
private $server; private string $token;
/** @var string */
private $lastToken;
/** @var string */
private $token;
/** @var \Logger */ private \Logger $logger;
private $logger;
public const HANDSHAKE = 9; public const HANDSHAKE = 9;
public const STATISTICS = 0; public const STATISTICS = 0;
public function __construct(Server $server){ public function __construct(
$this->server = $server; private Server $server
){
$this->logger = new \PrefixedLogger($this->server->getLogger(), "Query Handler"); $this->logger = new \PrefixedLogger($this->server->getLogger(), "Query Handler");
/* /*
@ -66,7 +62,7 @@ class QueryHandler implements RawPacketHandler{
packets can conflict with the MCPE ones. packets can conflict with the MCPE ones.
*/ */
$this->regenerateToken(); $this->token = $this->generateToken();
$this->lastToken = $this->token; $this->lastToken = $this->token;
} }
@ -74,9 +70,13 @@ class QueryHandler implements RawPacketHandler{
return '/^\xfe\xfd.+$/s'; return '/^\xfe\xfd.+$/s';
} }
private function generateToken() : string{
return random_bytes(16);
}
public function regenerateToken() : void{ public function regenerateToken() : void{
$this->lastToken = $this->token; $this->lastToken = $this->token;
$this->token = random_bytes(16); $this->token = $this->generateToken();
} }
public static function getTokenString(string $token, string $salt) : int{ public static function getTokenString(string $token, string $salt) : int{

View File

@ -37,44 +37,31 @@ use function substr;
final class QueryInfo{ final class QueryInfo{
public const GAME_ID = "MINECRAFTPE"; public const GAME_ID = "MINECRAFTPE";
/** @var string */ private string $serverName;
private $serverName; private bool $listPlugins;
/** @var bool */
private $listPlugins;
/** @var Plugin[] */ /** @var Plugin[] */
private $plugins; private array $plugins;
/** @var Player[] */ /** @var Player[] */
private $players; private array $players;
/** @var string */ private string $gametype;
private $gametype; private string $version;
/** @var string */ private string $server_engine;
private $version; private string $map;
/** @var string */ private int $numPlayers;
private $server_engine; private int $maxPlayers;
/** @var string */ private string $whitelist;
private $map; private int $port;
/** @var int */ private string $ip;
private $numPlayers;
/** @var int */
private $maxPlayers;
/** @var string */
private $whitelist;
/** @var int */
private $port;
/** @var string */
private $ip;
/** /**
* @var string[] * @var string[]
* @phpstan-var array<string, string> * @phpstan-var array<string, string>
*/ */
private $extraData = []; private array $extraData = [];
/** @var string|null */ private ?string $longQueryCache = null;
private $longQueryCache = null; private ?string $shortQueryCache = null;
/** @var string|null */
private $shortQueryCache = null;
public function __construct(Server $server){ public function __construct(Server $server){
$this->serverName = $server->getMotd(); $this->serverName = $server->getMotd();

View File

@ -28,24 +28,17 @@ use pocketmine\utils\Internet;
use pocketmine\utils\InternetException; use pocketmine\utils\InternetException;
final class UPnPNetworkInterface implements NetworkInterface{ final class UPnPNetworkInterface implements NetworkInterface{
private ?string $serviceURL = null;
/** @var string */ public function __construct(
private $ip; private \Logger $logger,
/** @var int */ private string $ip,
private $port; private int $port
){
/** @var string|null */
private $serviceURL = null;
/** @var \Logger */
private $logger;
public function __construct(\Logger $logger, string $ip, int $port){
if(!Internet::$online){ if(!Internet::$online){
throw new \RuntimeException("Server is offline"); throw new \RuntimeException("Server is offline");
} }
$this->ip = $ip;
$this->port = $port;
$this->logger = new \PrefixedLogger($logger, "UPnP Port Forwarder"); $this->logger = new \PrefixedLogger($logger, "UPnP Port Forwarder");
} }