public function putPacket(Player $player, DataPacket $packet, $needACK = false, $immediate = false) { if (isset($this->identifiers[$h = spl_object_hash($player)])) { $identifier = $this->identifiers[$h]; $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::NETWORK_ID !== 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; }
public function addParticle(Particle $particle, array $players = null) { $pk = $particle->encode(); if ($players === null) { if ($pk !== null) { if (!is_array($pk)) { $this->addChunkPacket($particle->x >> 4, $particle->z >> 4, $pk); } else { foreach ($pk as $e) { $this->addChunkPacket($particle->x >> 4, $particle->z >> 4, $e); } } } } else { if ($pk !== null) { if (!is_array($pk)) { Server::broadcastPacket($players, $pk); } else { $this->server->batchPackets($players, $pk, false); } } } }