47 if($ev->isCancelled()){
50 $packets = $ev->getPackets();
55 $targetsByCompressor = [];
56 foreach($recipients as $recipient){
58 $compressor = $recipient->getCompressor();
59 $compressors[spl_object_id($compressor)] = $compressor;
61 $targetsByCompressor[spl_object_id($compressor)][] = $recipient;
66 $writer =
new ByteBufferWriter();
67 foreach($packets as $packet){
69 $buffer = NetworkSession::encodePacketTimed($writer, $packet);
71 $totalLength += (((int) log(strlen($buffer), 128)) + 1) + strlen($buffer);
72 $packetBuffers[] = $buffer;
75 foreach($targetsByCompressor as $compressorId => $compressorTargets){
76 $compressor = $compressors[$compressorId];
78 $threshold = $compressor->getCompressionThreshold();
79 if(count($compressorTargets) > 1 && $threshold !==
null && $totalLength >= $threshold){
81 $stream =
new ByteBufferWriter();
82 PacketBatch::encodeRaw($stream, $packetBuffers);
83 $batchBuffer = $stream->getData();
85 $batch = $this->
server->prepareBatch($batchBuffer, $compressor, timings: Timings::$playerNetworkSendCompressBroadcast);
86 foreach($compressorTargets as $target){
87 $target->queueCompressed($batch);
90 foreach($compressorTargets as $target){
91 foreach($packetBuffers as $packetBuffer){
92 $target->addToSendBuffer($packetBuffer);