raklib\server\SessionManager::receiveStream PHP Метод

receiveStream() публичный Метод

public receiveStream ( )
    public function receiveStream()
    {
        if (strlen($packet = $this->server->readMainToThreadPacket()) > 0) {
            $id = ord($packet[0]);
            $offset = 1;
            if ($id === RakLib::PACKET_ENCAPSULATED) {
                $len = ord($packet[$offset++]);
                $identifier = substr($packet, $offset, $len);
                $offset += $len;
                if (isset($this->sessions[$identifier])) {
                    $flags = ord($packet[$offset++]);
                    $buffer = substr($packet, $offset);
                    $this->sessions[$identifier]->addEncapsulatedToQueue(EncapsulatedPacket::fromBinary($buffer, true), $flags);
                } else {
                    $this->streamInvalid($identifier);
                }
            } elseif ($id === RakLib::PACKET_RAW) {
                $len = ord($packet[$offset++]);
                $address = substr($packet, $offset, $len);
                $offset += $len;
                $port = Binary::readShort(substr($packet, $offset, 2));
                $offset += 2;
                $payload = substr($packet, $offset);
                $this->socket->writePacket($payload, $address, $port);
            } elseif ($id === RakLib::PACKET_CLOSE_SESSION) {
                $len = ord($packet[$offset++]);
                $identifier = substr($packet, $offset, $len);
                if (isset($this->sessions[$identifier])) {
                    $this->removeSession($this->sessions[$identifier]);
                } else {
                    $this->streamInvalid($identifier);
                }
            } elseif ($id === RakLib::PACKET_INVALID_SESSION) {
                $len = ord($packet[$offset++]);
                $identifier = substr($packet, $offset, $len);
                if (isset($this->sessions[$identifier])) {
                    $this->removeSession($this->sessions[$identifier]);
                }
            } elseif ($id === RakLib::PACKET_SET_OPTION) {
                $len = ord($packet[$offset++]);
                $name = substr($packet, $offset, $len);
                $offset += $len;
                $value = substr($packet, $offset);
                switch ($name) {
                    case "name":
                        $this->name = $value;
                        break;
                    case "portChecking":
                        $this->portChecking = (bool) $value;
                        break;
                    case "packetLimit":
                        $this->packetLimit = (int) $value;
                        break;
                }
            } elseif ($id === RakLib::PACKET_BLOCK_ADDRESS) {
                $len = ord($packet[$offset++]);
                $address = substr($packet, $offset, $len);
                $offset += $len;
                $timeout = Binary::readInt(substr($packet, $offset, 4));
                $this->blockAddress($address, $timeout);
            } elseif ($id === RakLib::PACKET_UNBLOCK_ADDRESS) {
                $len = ord($packet[$offset++]);
                $address = substr($packet, $offset, $len);
                $offset += $len;
                $this->unblockAddress($address);
            } elseif ($id === RakLib::PACKET_SHUTDOWN) {
                foreach ($this->sessions as $session) {
                    $this->removeSession($session);
                }
                $this->socket->close();
                $this->shutdown = true;
            } elseif ($id === RakLib::PACKET_EMERGENCY_SHUTDOWN) {
                $this->shutdown = true;
            } else {
                return false;
            }
            return true;
        }
        return false;
    }