public function putPacket(Player $player, DataPacket $packet, $needACK = \false, $immediate = \false)
{
if (isset($this->identifiers[$player])) {
$identifier = $this->identifiers[$player];
$pk = \null;
if (!$packet->isEncoded) {
$packet->encode();
} elseif (!$needACK) {
if (!isset($packet->__encapsulatedPacket)) {
$packet->__encapsulatedPacket = new CachedEncapsulatedPacket();
$packet->__encapsulatedPacket->identifierACK = \null;
$packet->__encapsulatedPacket->buffer = $packet->buffer;
if ($packet->getChannel() !== 0) {
$packet->__encapsulatedPacket->reliability = 3;
$packet->__encapsulatedPacket->orderChannel = $packet->getChannel();
$packet->__encapsulatedPacket->orderIndex = 0;
} else {
$packet->__encapsulatedPacket->reliability = 2;
}
}
$pk = $packet->__encapsulatedPacket;
}
if (!$immediate and !$needACK and $packet->pid() !== ProtocolInfo::BATCH_PACKET and Network::$BATCH_THRESHOLD >= 0 and \strlen($packet->buffer) >= Network::$BATCH_THRESHOLD) {
$this->server->batchPackets([$player], [$packet], \true, $packet->getChannel());
return \null;
}
if ($pk === \null) {
$pk = new EncapsulatedPacket();
$pk->buffer = $packet->buffer;
if ($packet->getChannel() !== 0) {
$packet->reliability = 3;
$packet->orderChannel = $packet->getChannel();
$packet->orderIndex = 0;
} else {
$packet->reliability = 2;
}
if ($needACK === \true) {
$pk->identifierACK = $this->identifiersACK[$identifier]++;
}
}
$this->interface->sendEncapsulated($identifier, $pk, ($needACK === \true ? RakLib::FLAG_NEED_ACK : 0) | ($immediate === \true ? RakLib::PRIORITY_IMMEDIATE : RakLib::PRIORITY_NORMAL));
return $pk->identifierACK;
}
return \null;
}