public function sendEncapsulated($identifier, EncapsulatedPacket $packet, $flags = RakLib::PRIORITY_NORMAL) { $buffer = chr(RakLib::PACKET_ENCAPSULATED) . chr(strlen($identifier)) . $identifier . chr($flags) . $packet->toBinary(true); $this->server->pushMainToThreadPacket($buffer); }
public function toBinary($internal = \false) { return $this->internalData === \null ? $this->internalData = parent::toBinary($internal) : $this->internalData; }
public function streamEncapsulated(Session $session, EncapsulatedPacket $packet, $flags = RakLib::PRIORITY_NORMAL) { $id = $session->getAddress() . ":" . $session->getPort(); $buffer = \chr(RakLib::PACKET_ENCAPSULATED) . \chr(\strlen($id)) . $id . \chr($flags) . $packet->toBinary(\true); $this->server->pushThreadToMainPacket($buffer); }
/** * @param EncapsulatedPacket $pk * @param int $flags */ private function addToQueue(EncapsulatedPacket $pk, $flags = RakLib::PRIORITY_NORMAL) { $priority = $flags & 0b111; if ($pk->needACK and $pk->messageIndex !== \null) { $this->needACK[$pk->identifierACK][$pk->messageIndex] = $pk->messageIndex; } if ($priority === RakLib::PRIORITY_IMMEDIATE) { //Skip queues $packet = new DATA_PACKET_0(); $packet->seqNumber = $this->sendSeqNumber++; if ($pk->needACK) { $packet->packets[] = clone $pk; $pk->needACK = \false; } else { $packet->packets[] = $pk->toBinary(); } $this->sendPacket($packet); $packet->sendTime = \microtime(\true); $this->recoveryQueue[$packet->seqNumber] = $packet; return; } $length = $this->sendQueue->length(); if ($length + $pk->getTotalLength() > $this->mtuSize) { $this->sendQueue(); } if ($pk->needACK) { $this->sendQueue->packets[] = clone $pk; $pk->needACK = \false; } else { $this->sendQueue->packets[] = $pk->toBinary(); } }