mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-17 03:08:58 +00:00
New extended packet timings
This commit is contained in:
parent
5682026eae
commit
9e4d88a852
@ -851,10 +851,11 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Timings::$playerNetworkTimer->startTiming();
|
$timings = Timings::getSendDataPacketTimings($packet);
|
||||||
|
$timings->startTiming();
|
||||||
$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
|
$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
Timings::$playerNetworkTimer->stopTiming();
|
$timings->stopTiming();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -863,7 +864,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->batchedPackets[$packet->getChannel()][] = clone $packet;
|
$this->batchedPackets[$packet->getChannel()][] = clone $packet;
|
||||||
Timings::$playerNetworkTimer->stopTiming();
|
$timings->stopTiming();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -879,11 +880,13 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if($this->connected === false){
|
if($this->connected === false){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Timings::$playerNetworkTimer->startTiming();
|
|
||||||
|
$timings = Timings::getSendDataPacketTimings($packet);
|
||||||
|
$timings->startTiming();
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
|
$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
Timings::$playerNetworkTimer->stopTiming();
|
$timings->stopTiming();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -892,11 +895,11 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if($needACK and $identifier !== null){
|
if($needACK and $identifier !== null){
|
||||||
$this->needACK[$identifier] = false;
|
$this->needACK[$identifier] = false;
|
||||||
|
|
||||||
Timings::$playerNetworkTimer->stopTiming();
|
$timings->stopTiming();
|
||||||
return $identifier;
|
return $identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
Timings::$playerNetworkTimer->stopTiming();
|
$timings->stopTiming();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -911,10 +914,11 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Timings::$playerNetworkTimer->startTiming();
|
$timings = Timings::getSendDataPacketTimings($packet);
|
||||||
|
$timings->startTiming();
|
||||||
$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
|
$this->server->getPluginManager()->callEvent($ev = new DataPacketSendEvent($this, $packet));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
Timings::$playerNetworkTimer->stopTiming();
|
$timings->stopTiming();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -923,11 +927,11 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if($needACK and $identifier !== null){
|
if($needACK and $identifier !== null){
|
||||||
$this->needACK[$identifier] = false;
|
$this->needACK[$identifier] = false;
|
||||||
|
|
||||||
Timings::$playerNetworkTimer->stopTiming();
|
$timings->stopTiming();
|
||||||
return $identifier;
|
return $identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
Timings::$playerNetworkTimer->stopTiming();
|
$timings->stopTiming();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1567,8 +1571,14 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$timings = Timings::getReceiveDataPacketTimings($packet);
|
||||||
|
|
||||||
|
$timings->startTiming();
|
||||||
|
|
||||||
$this->server->getPluginManager()->callEvent($ev = new DataPacketReceiveEvent($this, $packet));
|
$this->server->getPluginManager()->callEvent($ev = new DataPacketReceiveEvent($this, $packet));
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
|
$timings->stopTiming();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1588,7 +1598,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
$this->uuid = Utils::dataToUUID($this->randomClientId, $this->iusername, $this->getAddress());
|
$this->uuid = Utils::dataToUUID($this->randomClientId, $this->iusername, $this->getAddress());
|
||||||
|
|
||||||
if(count($this->server->getOnlinePlayers()) > $this->server->getMaxPlayers() and $this->kick("disconnectionScreen.serverFull", false)){
|
if(count($this->server->getOnlinePlayers()) > $this->server->getMaxPlayers() and $this->kick("disconnectionScreen.serverFull", false)){
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($packet->protocol1 !== ProtocolInfo::CURRENT_PROTOCOL){
|
if($packet->protocol1 !== ProtocolInfo::CURRENT_PROTOCOL){
|
||||||
@ -1607,18 +1617,18 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
}
|
}
|
||||||
$this->close("", $message, false);
|
$this->close("", $message, false);
|
||||||
|
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strpos($packet->username, "\x00") !== false or preg_match('#^[a-zA-Z0-9_]{3,16}$#', $packet->username) == 0 or $this->username === "" or $this->iusername === "rcon" or $this->iusername === "console" or strlen($packet->username) > 16 or strlen($packet->username) < 3){
|
if(strpos($packet->username, "\x00") !== false or preg_match('#^[a-zA-Z0-9_]{3,16}$#', $packet->username) == 0 or $this->username === "" or $this->iusername === "rcon" or $this->iusername === "console" or strlen($packet->username) > 16 or strlen($packet->username) < 3){
|
||||||
$this->close("", "disconnectionScreen.invalidName");
|
$this->close("", "disconnectionScreen.invalidName");
|
||||||
|
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen($packet->skin) < 64 * 32 * 4){
|
if(strlen($packet->skin) < 64 * 32 * 4){
|
||||||
$this->close("", "disconnectionScreen.invalidSkin");
|
$this->close("", "disconnectionScreen.invalidSkin");
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->setSkin($packet->skin, $packet->slim);
|
$this->setSkin($packet->skin, $packet->slim);
|
||||||
@ -1627,17 +1637,17 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
$this->close("", $ev->getKickMessage());
|
$this->close("", $ev->getKickMessage());
|
||||||
|
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$this->server->isWhitelisted(strtolower($this->getName()))){
|
if(!$this->server->isWhitelisted(strtolower($this->getName()))){
|
||||||
$this->close($this->getLeaveMessage(), "Server is white-listed");
|
$this->close($this->getLeaveMessage(), "Server is white-listed");
|
||||||
|
|
||||||
return;
|
break;
|
||||||
}elseif($this->server->getNameBans()->isBanned(strtolower($this->getName())) or $this->server->getIPBans()->isBanned($this->getAddress())){
|
}elseif($this->server->getNameBans()->isBanned(strtolower($this->getName())) or $this->server->getIPBans()->isBanned($this->getAddress())){
|
||||||
$this->close($this->getLeaveMessage(), "You are banned");
|
$this->close($this->getLeaveMessage(), "You are banned");
|
||||||
|
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->hasPermission(Server::BROADCAST_CHANNEL_USERS)){
|
if($this->hasPermission(Server::BROADCAST_CHANNEL_USERS)){
|
||||||
@ -1652,6 +1662,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if($p->kick("logged in from another location") === false){
|
if($p->kick("logged in from another location") === false){
|
||||||
$this->close($this->getLeaveMessage(), "Logged in from another location");
|
$this->close($this->getLeaveMessage(), "Logged in from another location");
|
||||||
|
|
||||||
|
$timings->stopTiming();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1685,7 +1696,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if(!($nbt instanceof Compound)){
|
if(!($nbt instanceof Compound)){
|
||||||
$this->close($this->getLeaveMessage(), "Invalid data");
|
$this->close($this->getLeaveMessage(), "Invalid data");
|
||||||
|
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->achievements = [];
|
$this->achievements = [];
|
||||||
@ -1704,7 +1715,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
$this->close($this->getLeaveMessage(), $ev->getKickMessage());
|
$this->close($this->getLeaveMessage(), $ev->getKickMessage());
|
||||||
|
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->isCreative()){
|
if($this->isCreative()){
|
||||||
@ -2215,7 +2226,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
if($target instanceof DroppedItem or $target instanceof Arrow){
|
if($target instanceof DroppedItem or $target instanceof Arrow){
|
||||||
$this->kick("Attempting to attack an invalid entity");
|
$this->kick("Attempting to attack an invalid entity");
|
||||||
$this->server->getLogger()->warning($this->getServer()->getLanguage()->translateString("pocketmine.player.invalidEntity", [$this->getName()]));
|
$this->server->getLogger()->warning($this->getServer()->getLanguage()->translateString("pocketmine.player.invalidEntity", [$this->getName()]));
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = $this->inventory->getItemInHand();
|
$item = $this->inventory->getItemInHand();
|
||||||
@ -2730,6 +2741,8 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$timings->stopTiming();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,6 +23,7 @@ namespace pocketmine\event;
|
|||||||
|
|
||||||
|
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
|
use pocketmine\network\protocol\DataPacket;
|
||||||
use pocketmine\plugin\PluginManager;
|
use pocketmine\plugin\PluginManager;
|
||||||
use pocketmine\scheduler\PluginTask;
|
use pocketmine\scheduler\PluginTask;
|
||||||
use pocketmine\scheduler\TaskHandler;
|
use pocketmine\scheduler\TaskHandler;
|
||||||
@ -41,6 +42,8 @@ abstract class Timings{
|
|||||||
/** @var TimingsHandler */
|
/** @var TimingsHandler */
|
||||||
public static $playerNetworkTimer;
|
public static $playerNetworkTimer;
|
||||||
/** @var TimingsHandler */
|
/** @var TimingsHandler */
|
||||||
|
public static $playerNetworkReceiveTimer;
|
||||||
|
/** @var TimingsHandler */
|
||||||
public static $playerChunkOrderTimer;
|
public static $playerChunkOrderTimer;
|
||||||
/** @var TimingsHandler */
|
/** @var TimingsHandler */
|
||||||
public static $playerChunkSendTimer;
|
public static $playerChunkSendTimer;
|
||||||
@ -104,6 +107,10 @@ abstract class Timings{
|
|||||||
/** @var TimingsHandler[] */
|
/** @var TimingsHandler[] */
|
||||||
public static $tileEntityTypeTimingMap = [];
|
public static $tileEntityTypeTimingMap = [];
|
||||||
/** @var TimingsHandler[] */
|
/** @var TimingsHandler[] */
|
||||||
|
public static $packetReceiveTimingMap = [];
|
||||||
|
/** @var TimingsHandler[] */
|
||||||
|
public static $packetSendTimingMap = [];
|
||||||
|
/** @var TimingsHandler[] */
|
||||||
public static $pluginTaskTimingMap = [];
|
public static $pluginTaskTimingMap = [];
|
||||||
|
|
||||||
public static function init(){
|
public static function init(){
|
||||||
@ -115,7 +122,8 @@ abstract class Timings{
|
|||||||
self::$memoryManagerTimer = new TimingsHandler("Memory Manager");
|
self::$memoryManagerTimer = new TimingsHandler("Memory Manager");
|
||||||
self::$garbageCollectorTimer = new TimingsHandler("Garbage Collector", self::$memoryManagerTimer);
|
self::$garbageCollectorTimer = new TimingsHandler("Garbage Collector", self::$memoryManagerTimer);
|
||||||
self::$playerListTimer = new TimingsHandler("Player List");
|
self::$playerListTimer = new TimingsHandler("Player List");
|
||||||
self::$playerNetworkTimer = new TimingsHandler("Player Network");
|
self::$playerNetworkTimer = new TimingsHandler("Player Network Send");
|
||||||
|
self::$playerNetworkReceiveTimer = new TimingsHandler("Player Network Receive");
|
||||||
self::$playerChunkOrderTimer = new TimingsHandler("Player Order Chunks");
|
self::$playerChunkOrderTimer = new TimingsHandler("Player Order Chunks");
|
||||||
self::$playerChunkSendTimer = new TimingsHandler("Player Send Chunks");
|
self::$playerChunkSendTimer = new TimingsHandler("Player Send Chunks");
|
||||||
self::$connectionTimer = new TimingsHandler("Connection Handler");
|
self::$connectionTimer = new TimingsHandler("Connection Handler");
|
||||||
@ -143,9 +151,6 @@ abstract class Timings{
|
|||||||
self::$timerEntityAIMove = new TimingsHandler("** livingEntityAIMove");
|
self::$timerEntityAIMove = new TimingsHandler("** livingEntityAIMove");
|
||||||
self::$timerEntityTickRest = new TimingsHandler("** livingEntityTickRest");
|
self::$timerEntityTickRest = new TimingsHandler("** livingEntityTickRest");
|
||||||
|
|
||||||
|
|
||||||
PluginManager::$pluginParentTimer = new TimingsHandler("** Plugins");
|
|
||||||
|
|
||||||
self::$schedulerSyncTimer = new TimingsHandler("** Scheduler - Sync Tasks", PluginManager::$pluginParentTimer);
|
self::$schedulerSyncTimer = new TimingsHandler("** Scheduler - Sync Tasks", PluginManager::$pluginParentTimer);
|
||||||
self::$schedulerAsyncTimer = new TimingsHandler("** Scheduler - Async Tasks");
|
self::$schedulerAsyncTimer = new TimingsHandler("** Scheduler - Async Tasks");
|
||||||
|
|
||||||
@ -214,4 +219,33 @@ abstract class Timings{
|
|||||||
return self::$tileEntityTypeTimingMap[$tileType];
|
return self::$tileEntityTypeTimingMap[$tileType];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param DataPacket $pk
|
||||||
|
*
|
||||||
|
* @return TimingsHandler
|
||||||
|
*/
|
||||||
|
public static function getReceiveDataPacketTimings(DataPacket $pk){
|
||||||
|
if(!isset(self::$packetReceiveTimingMap[$pk::NETWORK_ID])){
|
||||||
|
$pkName = (new \ReflectionClass($pk))->getShortName();
|
||||||
|
self::$packetReceiveTimingMap[$pk::NETWORK_ID] = new TimingsHandler("** receivePacket - " . $pkName . " [0x" . dechex($pk::NETWORK_ID) . "]", self::$playerNetworkReceiveTimer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$packetReceiveTimingMap[$pk::NETWORK_ID];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param DataPacket $pk
|
||||||
|
*
|
||||||
|
* @return TimingsHandler
|
||||||
|
*/
|
||||||
|
public static function getSendDataPacketTimings(DataPacket $pk){
|
||||||
|
if(!isset(self::$packetSendTimingMap[$pk::NETWORK_ID])){
|
||||||
|
$pkName = (new \ReflectionClass($pk))->getShortName();
|
||||||
|
self::$packetSendTimingMap[$pk::NETWORK_ID] = new TimingsHandler("** sendPacket - " . $pkName . " [0x" . dechex($pk::NETWORK_ID) . "]", self::$playerNetworkTimer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$packetSendTimingMap[$pk::NETWORK_ID];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user