mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-12 14:35:35 +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");
|
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();
|
$ev->call();
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
$recipients = $ev->getTargets();
|
||||||
/** @var NetworkSession[] $targets */
|
|
||||||
$targets = [];
|
|
||||||
foreach($ev->getPlayers() as $player){
|
|
||||||
if($player->isConnected()){
|
|
||||||
$targets[] = $player->getNetworkSession();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(empty($targets)){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$stream = new PacketStream();
|
$stream = new PacketStream();
|
||||||
foreach($ev->getPackets() as $packet){
|
foreach($ev->getPackets() as $packet){
|
||||||
@ -1502,14 +1503,14 @@ class Server{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(NetworkCompression::$THRESHOLD < 0 or strlen($stream->getBuffer()) < NetworkCompression::$THRESHOLD){
|
if(NetworkCompression::$THRESHOLD < 0 or strlen($stream->getBuffer()) < NetworkCompression::$THRESHOLD){
|
||||||
foreach($targets as $target){
|
foreach($recipients as $target){
|
||||||
foreach($ev->getPackets() as $pk){
|
foreach($ev->getPackets() as $pk){
|
||||||
$target->addToSendBuffer($pk);
|
$target->addToSendBuffer($pk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
$promise = $this->prepareBatch($stream);
|
$promise = $this->prepareBatch($stream);
|
||||||
foreach($targets as $target){
|
foreach($recipients as $target){
|
||||||
$target->queueCompressed($promise);
|
$target->queueCompressed($promise);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,8 +25,8 @@ namespace pocketmine\event\server;
|
|||||||
|
|
||||||
use pocketmine\event\Cancellable;
|
use pocketmine\event\Cancellable;
|
||||||
use pocketmine\event\CancellableTrait;
|
use pocketmine\event\CancellableTrait;
|
||||||
|
use pocketmine\network\mcpe\NetworkSession;
|
||||||
use pocketmine\network\mcpe\protocol\ClientboundPacket;
|
use pocketmine\network\mcpe\protocol\ClientboundPacket;
|
||||||
use pocketmine\Player;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a list of packets is broadcasted to 1 or more players.
|
* 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{
|
class DataPacketBroadcastEvent extends ServerEvent implements Cancellable{
|
||||||
use CancellableTrait;
|
use CancellableTrait;
|
||||||
|
|
||||||
/** @var Player[] */
|
/** @var NetworkSession[] */
|
||||||
private $players;
|
private $targets;
|
||||||
/** @var ClientboundPacket[] */
|
/** @var ClientboundPacket[] */
|
||||||
private $packets;
|
private $packets;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Player[] $players
|
* @param NetworkSession[] $targets
|
||||||
* @param ClientboundPacket[] $packets
|
* @param ClientboundPacket[] $packets
|
||||||
*/
|
*/
|
||||||
public function __construct(array $players, array $packets){
|
public function __construct(array $targets, array $packets){
|
||||||
$this->players = $players;
|
$this->targets = $targets;
|
||||||
$this->packets = $packets;
|
$this->packets = $packets;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Player[]
|
* @return NetworkSession[]
|
||||||
*/
|
*/
|
||||||
public function getPlayers() : array{
|
public function getTargets() : array{
|
||||||
return $this->players;
|
return $this->targets;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Player[] $players
|
* @param NetworkSession[] $targets
|
||||||
*/
|
*/
|
||||||
public function setPlayers(array $players) : void{
|
public function setTargets(array $targets) : void{
|
||||||
$this->players = $players;
|
$this->targets = $targets;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,24 +25,24 @@ namespace pocketmine\event\server;
|
|||||||
|
|
||||||
use pocketmine\event\Cancellable;
|
use pocketmine\event\Cancellable;
|
||||||
use pocketmine\event\CancellableTrait;
|
use pocketmine\event\CancellableTrait;
|
||||||
|
use pocketmine\network\mcpe\NetworkSession;
|
||||||
use pocketmine\network\mcpe\protocol\ServerboundPacket;
|
use pocketmine\network\mcpe\protocol\ServerboundPacket;
|
||||||
use pocketmine\Player;
|
|
||||||
|
|
||||||
class DataPacketReceiveEvent extends ServerEvent implements Cancellable{
|
class DataPacketReceiveEvent extends ServerEvent implements Cancellable{
|
||||||
use CancellableTrait;
|
use CancellableTrait;
|
||||||
|
|
||||||
/** @var ServerboundPacket */
|
/** @var ServerboundPacket */
|
||||||
private $packet;
|
private $packet;
|
||||||
/** @var Player */
|
/** @var NetworkSession */
|
||||||
private $player;
|
private $origin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Player $player
|
* @param NetworkSession $origin
|
||||||
* @param ServerboundPacket $packet
|
* @param ServerboundPacket $packet
|
||||||
*/
|
*/
|
||||||
public function __construct(Player $player, ServerboundPacket $packet){
|
public function __construct(NetworkSession $origin, ServerboundPacket $packet){
|
||||||
$this->packet = $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{
|
public function getOrigin() : NetworkSession{
|
||||||
return $this->player;
|
return $this->origin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,24 +25,24 @@ namespace pocketmine\event\server;
|
|||||||
|
|
||||||
use pocketmine\event\Cancellable;
|
use pocketmine\event\Cancellable;
|
||||||
use pocketmine\event\CancellableTrait;
|
use pocketmine\event\CancellableTrait;
|
||||||
|
use pocketmine\network\mcpe\NetworkSession;
|
||||||
use pocketmine\network\mcpe\protocol\ClientboundPacket;
|
use pocketmine\network\mcpe\protocol\ClientboundPacket;
|
||||||
use pocketmine\Player;
|
|
||||||
|
|
||||||
class DataPacketSendEvent extends ServerEvent implements Cancellable{
|
class DataPacketSendEvent extends ServerEvent implements Cancellable{
|
||||||
use CancellableTrait;
|
use CancellableTrait;
|
||||||
|
|
||||||
/** @var ClientboundPacket */
|
/** @var ClientboundPacket */
|
||||||
private $packet;
|
private $packet;
|
||||||
/** @var Player */
|
/** @var NetworkSession */
|
||||||
private $player;
|
private $target;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Player $player
|
* @param NetworkSession $target
|
||||||
* @param ClientboundPacket $packet
|
* @param ClientboundPacket $packet
|
||||||
*/
|
*/
|
||||||
public function __construct(Player $player, ClientboundPacket $packet){
|
public function __construct(NetworkSession $target, ClientboundPacket $packet){
|
||||||
$this->packet = $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{
|
public function getTarget() : NetworkSession{
|
||||||
return $this->player;
|
return $this->target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,7 +268,7 @@ class NetworkSession{
|
|||||||
$this->server->getLogger()->debug("Still " . strlen($remains) . " bytes unread in " . $packet->getName() . ": " . bin2hex($remains));
|
$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();
|
$ev->call();
|
||||||
if(!$ev->isCancelled() and !$packet->handle($this->handler)){
|
if(!$ev->isCancelled() and !$packet->handle($this->handler)){
|
||||||
$this->server->getLogger()->debug("Unhandled " . $packet->getName() . " received from " . $this->getDisplayName() . ": " . bin2hex($packet->getBuffer()));
|
$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 = Timings::getSendDataPacketTimings($packet);
|
||||||
$timings->startTiming();
|
$timings->startTiming();
|
||||||
try{
|
try{
|
||||||
$ev = new DataPacketSendEvent($this->player, $packet);
|
$ev = new DataPacketSendEvent($this, $packet);
|
||||||
$ev->call();
|
$ev->call();
|
||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user