src/Protocol/Base/ReadPacketBuffer.php
public function addPacket(int $id, bool $isPartedPacket, bool $isEndPart, $data, $meta = null): bool
    {
//        echo 'received  ', $id, PHP_EOL;
        if ($isPartedPacket || $id > $this->lastCompletedId + 1) {
            // частичные пакеты в любом случае добавляем в буфер чтения
            // или чтение нескольких пакетов пропущено
            // заполняем пропущенные пакеты флажками
            for ($i = $this->lastCompletedId + 1; $i < $id; $i++) {
                if (!isset($this->buffer[$i])) {
                    $this->buffer[$i] = false;
                    $this->meta[$i] = [
                        'time' => time(),
                        'part' => $isPartedPacket,
                        'end' => $isPartedPacket && $isEndPart,
                        'meta' => null
                    ];
                }
            }
            // записываем в буфер текущий пакет
            $this->buffer[$id] = $data;
            $this->meta[$id] = [
                'time' => time(),
                'part' => $isPartedPacket,
                'end' => $isPartedPacket && $isEndPart,
                'meta' => $meta
            ];
            $result = true;
        } elseif ($id === $this->lastCompletedId + 1) {
            // если чтение пакетов идёт по порядку, то все ок
            $this->lastCompletedId++;
            $result = false;
        } else {
            // duplicate of packet
            ; // nothing
            $result = true;
        }
        return $result;
    }
public function addPacket(int $id, bool $isPartedPacket, bool $isEndPart, $data, $meta = null): bool
    {
//        echo 'received  ', $id, PHP_EOL;
        if ($isPartedPacket || $id > $this->lastCompletedId + 1) {
            // частичные пакеты в любом случае добавляем в буфер чтения
            // или чтение нескольких пакетов пропущено
            // заполняем пропущенные пакеты флажками
            for ($i = $this->lastCompletedId + 1; $i < $id; $i++) {
                if (!isset($this->buffer[$i])) {
                    $this->buffer[$i] = false;
                    $this->meta[$i] = [
                        'time' => time(),
                        'part' => $isPartedPacket,
                        'end' => $isPartedPacket && $isEndPart,
                        'meta' => null
                    ];
                }
            }
            // записываем в буфер текущий пакет
            $this->buffer[$id] = $data;
            $this->meta[$id] = [
                'time' => time(),
                'part' => $isPartedPacket,
                'end' => $isPartedPacket && $isEndPart,
                'meta' => $meta
            ];
            $result = true;
        } elseif ($id === $this->lastCompletedId + 1) {
            // если чтение пакетов идёт по порядку, то все ок
            $this->lastCompletedId++;
            $result = false;
        } else {
            // duplicate of packet
            ; // nothing
            $result = true;
        }
        return $result;
    }
Добавляет прочитанный пакет в буфер.
Вернёт true, если пакет был добавлен в буфер,
и false, если пакет готов к чтению и не был добавле в буфер.

@param int $id
@param bool $isPartedPacket
@param mixed $data
@param mixed $meta дополнительная meta информация к пакету

@return bool