mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-22 08:44:01 +00:00
DataPacket events now use network sessions instead of players
This commit is contained in:
parent
afbd016611
commit
433dab078b
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user