Fixed kicking players not working properly

This commit is contained in:
Dylan K. Taylor 2017-04-18 16:15:38 +01:00
parent 6828ce66b6
commit 17e4f45e97
2 changed files with 21 additions and 9 deletions

View File

@ -1768,8 +1768,9 @@ class Server{
* @param Player[] $players * @param Player[] $players
* @param DataPacket[]|string $packets * @param DataPacket[]|string $packets
* @param bool $forceSync * @param bool $forceSync
* @param bool $immediate
*/ */
public function batchPackets(array $players, array $packets, $forceSync = false){ public function batchPackets(array $players, array $packets, $forceSync = false, bool $immediate = false){
Timings::$playerNetworkTimer->startTiming(); Timings::$playerNetworkTimer->startTiming();
$pk = new BatchPacket(); $pk = new BatchPacket();
@ -1786,20 +1787,27 @@ class Server{
} }
if(!$forceSync and $this->networkCompressionAsync){ if(!$forceSync and $this->networkCompressionAsync){
$task = new CompressBatchedTask($pk, $targets, $this->networkCompressionLevel); $task = new CompressBatchedTask($pk, $targets, $this->networkCompressionLevel, $immediate);
$this->getScheduler()->scheduleAsyncTask($task); $this->getScheduler()->scheduleAsyncTask($task);
}else{ }else{
$pk->compress($this->networkCompressionLevel); $pk->compress($this->networkCompressionLevel);
$this->broadcastPacketsCallback($pk, $targets); $this->broadcastPacketsCallback($pk, $targets, $immediate);
} }
Timings::$playerNetworkTimer->stopTiming(); Timings::$playerNetworkTimer->stopTiming();
} }
public function broadcastPacketsCallback(BatchPacket $pk, array $identifiers){ public function broadcastPacketsCallback(BatchPacket $pk, array $identifiers, bool $immediate){
$pk->encode(); $pk->encode();
$pk->isEncoded = true; $pk->isEncoded = true;
if($immediate){
foreach($identifiers as $i){
if(isset($this->players[$i])){
$this->players[$i]->directDataPacket($pk);
}
}
}else{
foreach($identifiers as $i){ foreach($identifiers as $i){
if(isset($this->players[$i])){ if(isset($this->players[$i])){
$this->players[$i]->dataPacket($pk); $this->players[$i]->dataPacket($pk);
@ -1807,6 +1815,8 @@ class Server{
} }
} }
}
/** /**
* @param int $type * @param int $type

View File

@ -31,11 +31,13 @@ class CompressBatchedTask extends AsyncTask{
public $data; public $data;
public $final; public $final;
public $targets; public $targets;
public $immediate = false;
public function __construct(BatchPacket $data, array $targets, $level = 7){ public function __construct(BatchPacket $data, array $targets, $level = 7, bool $sendImmediate = false){
$this->data = serialize($data); $this->data = serialize($data);
$this->targets = $targets; $this->targets = $targets;
$this->level = $level; $this->level = $level;
$this->immediate = $sendImmediate;
} }
public function onRun(){ public function onRun(){
@ -51,6 +53,6 @@ class CompressBatchedTask extends AsyncTask{
} }
public function onCompletion(Server $server){ public function onCompletion(Server $server){
$server->broadcastPacketsCallback(unserialize($this->final), (array) $this->targets); $server->broadcastPacketsCallback(unserialize($this->final), (array) $this->targets, $this->immediate);
} }
} }