private function processResponse()

in src/Apache/Ignite/Internal/Connection/ClientSocket.php [175:204]


    private function processResponse(Request $request): void
    {
        $buffer = new MessageBuffer(0);
        $this->receive($buffer, BinaryUtils::getSize(ObjectType::INTEGER));
        // Response length
        $length = $buffer->readInteger();
        $this->receive($buffer, $length + BinaryUtils::getSize(ObjectType::INTEGER));
        if ($request->isHandshake()) {
            $this->processHandshake($buffer);
        } else {
            // Request id
            $requestId = $buffer->readLong();
            if (!BinaryUtils::floatEquals($requestId, $request->getId())) {
                BinaryUtils::internalError('Invalid response id: ' . $requestId);
            }
            // Status code
            $isSuccess = ($buffer->readInteger() === ClientSocket::REQUEST_SUCCESS_STATUS_CODE);
            if (!$isSuccess) {
                // Error message
                $errMessage = BinaryCommunicator::readString($buffer);
                throw new OperationException($errMessage);
            } else {
                $payloadReader = $request->getPayloadReader();
                if ($payloadReader) {
                    call_user_func($payloadReader, $buffer);
                }
            }
        }
        $this->logMessage($request->getId(), false, $buffer);
    }