private function handleEncapsulatedPacket(EncapsulatedPacket $packet)
{
if ($packet->messageIndex === null) {
$this->handleEncapsulatedPacketRoute($packet);
} else {
if ($packet->messageIndex < $this->reliableWindowStart or $packet->messageIndex > $this->reliableWindowEnd) {
return;
}
if ($packet->messageIndex - $this->lastReliableIndex === 1) {
$this->lastReliableIndex++;
$this->reliableWindowStart++;
$this->reliableWindowEnd++;
$this->handleEncapsulatedPacketRoute($packet);
if (count($this->reliableWindow) > 0) {
ksort($this->reliableWindow);
foreach ($this->reliableWindow as $index => $pk) {
if ($index - $this->lastReliableIndex !== 1) {
break;
}
$this->lastReliableIndex++;
$this->reliableWindowStart++;
$this->reliableWindowEnd++;
$this->handleEncapsulatedPacketRoute($pk);
unset($this->reliableWindow[$index]);
}
}
} else {
$this->reliableWindow[$packet->messageIndex] = $packet;
}
}
}