DataPacket events now use network sessions instead of players

This commit is contained in:
Dylan K. Taylor 2019-03-23 09:52:03 +00:00
parent afbd016611
commit 433dab078b
5 changed files with 47 additions and 46 deletions

View File

@ -1479,22 +1479,23 @@ class Server{
throw new \InvalidArgumentException("Cannot broadcast empty list of packets");
}
$ev = new DataPacketBroadcastEvent($players, $packets);
/** @var NetworkSession[] $recipients */
$recipients = [];
foreach($players as $player){
if($player->isConnected()){
$recipients[] = $player->getNetworkSession();
}
}
if(empty($recipients)){
return false;
}
$ev = new DataPacketBroadcastEvent($recipients, $packets);
$ev->call();
if($ev->isCancelled()){
return false;
}
/** @var NetworkSession[] $targets */
$targets = [];
foreach($ev->getPlayers() as $player){
if($player->isConnected()){
$targets[] = $player->getNetworkSession();
}
}
if(empty($targets)){
return false;
}
$recipients = $ev->getTargets();
$stream = new PacketStream();
foreach($ev->getPackets() as $packet){
@ -1502,14 +1503,14 @@ class Server{
}
if(NetworkCompression::$THRESHOLD < 0 or strlen($stream->getBuffer()) < NetworkCompression::$THRESHOLD){
foreach($targets as $target){
foreach($recipients as $target){
foreach($ev->getPackets() as $pk){
$target->addToSendBuffer($pk);
}
}
}else{
$promise = $this->prepareBatch($stream);
foreach($targets as $target){
foreach($recipients as $target){
$target->queueCompressed($promise);
}
}

View File

@ -25,8 +25,8 @@ namespace pocketmine\event\server;
use pocketmine\event\Cancellable;
use pocketmine\event\CancellableTrait;
use pocketmine\network\mcpe\NetworkSession;
use pocketmine\network\mcpe\protocol\ClientboundPacket;
use pocketmine\Player;
/**
* Called when a list of packets is broadcasted to 1 or more players.
@ -34,32 +34,32 @@ use pocketmine\Player;
class DataPacketBroadcastEvent extends ServerEvent implements Cancellable{
use CancellableTrait;
/** @var Player[] */
private $players;
/** @var NetworkSession[] */
private $targets;
/** @var ClientboundPacket[] */
private $packets;
/**
* @param Player[] $players
* @param NetworkSession[] $targets
* @param ClientboundPacket[] $packets
*/
public function __construct(array $players, array $packets){
$this->players = $players;
public function __construct(array $targets, array $packets){
$this->targets = $targets;
$this->packets = $packets;
}
/**
* @return Player[]
* @return NetworkSession[]
*/
public function getPlayers() : array{
return $this->players;
public function getTargets() : array{
return $this->targets;
}
/**
* @param Player[] $players
* @param NetworkSession[] $targets
*/
public function setPlayers(array $players) : void{
$this->players = $players;
public function setTargets(array $targets) : void{
$this->targets = $targets;
}
/**

View File

@ -25,24 +25,24 @@ namespace pocketmine\event\server;
use pocketmine\event\Cancellable;
use pocketmine\event\CancellableTrait;
use pocketmine\network\mcpe\NetworkSession;
use pocketmine\network\mcpe\protocol\ServerboundPacket;
use pocketmine\Player;
class DataPacketReceiveEvent extends ServerEvent implements Cancellable{
use CancellableTrait;
/** @var ServerboundPacket */
private $packet;
/** @var Player */
private $player;
/** @var NetworkSession */
private $origin;
/**
* @param Player $player
* @param NetworkSession $origin
* @param ServerboundPacket $packet
*/
public function __construct(Player $player, ServerboundPacket $packet){
public function __construct(NetworkSession $origin, ServerboundPacket $packet){
$this->packet = $packet;
$this->player = $player;
$this->origin = $origin;
}
/**
@ -53,9 +53,9 @@ class DataPacketReceiveEvent extends ServerEvent implements Cancellable{
}
/**
* @return Player
* @return NetworkSession
*/
public function getPlayer() : Player{
return $this->player;
public function getOrigin() : NetworkSession{
return $this->origin;
}
}

View File

@ -25,24 +25,24 @@ namespace pocketmine\event\server;
use pocketmine\event\Cancellable;
use pocketmine\event\CancellableTrait;
use pocketmine\network\mcpe\NetworkSession;
use pocketmine\network\mcpe\protocol\ClientboundPacket;
use pocketmine\Player;
class DataPacketSendEvent extends ServerEvent implements Cancellable{
use CancellableTrait;
/** @var ClientboundPacket */
private $packet;
/** @var Player */
private $player;
/** @var NetworkSession */
private $target;
/**
* @param Player $player
* @param NetworkSession $target
* @param ClientboundPacket $packet
*/
public function __construct(Player $player, ClientboundPacket $packet){
public function __construct(NetworkSession $target, ClientboundPacket $packet){
$this->packet = $packet;
$this->player = $player;
$this->target = $target;
}
/**
@ -53,9 +53,9 @@ class DataPacketSendEvent extends ServerEvent implements Cancellable{
}
/**
* @return Player
* @return NetworkSession
*/
public function getPlayer() : Player{
return $this->player;
public function getTarget() : NetworkSession{
return $this->target;
}
}

View File

@ -268,7 +268,7 @@ class NetworkSession{
$this->server->getLogger()->debug("Still " . strlen($remains) . " bytes unread in " . $packet->getName() . ": " . bin2hex($remains));
}
$ev = new DataPacketReceiveEvent($this->player, $packet);
$ev = new DataPacketReceiveEvent($this, $packet);
$ev->call();
if(!$ev->isCancelled() and !$packet->handle($this->handler)){
$this->server->getLogger()->debug("Unhandled " . $packet->getName() . " received from " . $this->getDisplayName() . ": " . bin2hex($packet->getBuffer()));
@ -287,7 +287,7 @@ class NetworkSession{
$timings = Timings::getSendDataPacketTimings($packet);
$timings->startTiming();
try{
$ev = new DataPacketSendEvent($this->player, $packet);
$ev = new DataPacketSendEvent($this, $packet);
$ev->call();
if($ev->isCancelled()){
return false;