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 DataPacket[]|string $packets
* @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();
$pk = new BatchPacket();
@ -1786,25 +1787,34 @@ class Server{
}
if(!$forceSync and $this->networkCompressionAsync){
$task = new CompressBatchedTask($pk, $targets, $this->networkCompressionLevel);
$task = new CompressBatchedTask($pk, $targets, $this->networkCompressionLevel, $immediate);
$this->getScheduler()->scheduleAsyncTask($task);
}else{
$pk->compress($this->networkCompressionLevel);
$this->broadcastPacketsCallback($pk, $targets);
$this->broadcastPacketsCallback($pk, $targets, $immediate);
}
Timings::$playerNetworkTimer->stopTiming();
}
public function broadcastPacketsCallback(BatchPacket $pk, array $identifiers){
public function broadcastPacketsCallback(BatchPacket $pk, array $identifiers, bool $immediate){
$pk->encode();
$pk->isEncoded = true;
foreach($identifiers as $i){
if(isset($this->players[$i])){
$this->players[$i]->dataPacket($pk);
if($immediate){
foreach($identifiers as $i){
if(isset($this->players[$i])){
$this->players[$i]->directDataPacket($pk);
}
}
}else{
foreach($identifiers as $i){
if(isset($this->players[$i])){
$this->players[$i]->dataPacket($pk);
}
}
}
}

View File

@ -31,11 +31,13 @@ class CompressBatchedTask extends AsyncTask{
public $data;
public $final;
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->targets = $targets;
$this->level = $level;
$this->immediate = $sendImmediate;
}
public function onRun(){
@ -51,6 +53,6 @@ class CompressBatchedTask extends AsyncTask{
}
public function onCompletion(Server $server){
$server->broadcastPacketsCallback(unserialize($this->final), (array) $this->targets);
$server->broadcastPacketsCallback(unserialize($this->final), (array) $this->targets, $this->immediate);
}
}