readResponse() public method

Reads the response to the given command from the connection.
public readResponse ( Predis\Command\CommandInterface $command ) : mixed
$command Predis\Command\CommandInterface Command instance.
return mixed
Example #1
0
 /**
  * {@inheritdoc}
  */
 protected function executePipeline(ConnectionInterface $connection, \SplQueue $commands)
 {
     $profile = $this->getClient()->getProfile();
     $connection->executeCommand($profile->createCommand('multi'));
     foreach ($commands as $command) {
         $connection->writeRequest($command);
     }
     foreach ($commands as $command) {
         $response = $connection->readResponse($command);
         if ($response instanceof ErrorResponseInterface) {
             $connection->executeCommand($profile->createCommand('discard'));
             throw new ServerException($response->getMessage());
         }
     }
     $executed = $connection->executeCommand($profile->createCommand('exec'));
     if (!isset($executed)) {
         // TODO: should be throwing a more appropriate exception.
         throw new ClientException('The underlying transaction has been aborted by the server.');
     }
     if (count($executed) !== count($commands)) {
         $expected = count($commands);
         $received = count($executed);
         throw new ClientException("Invalid number of responses [expected {$expected}, received {$received}].");
     }
     $responses = array();
     $sizeOfPipe = count($commands);
     $exceptions = $this->throwServerExceptions();
     for ($i = 0; $i < $sizeOfPipe; ++$i) {
         $command = $commands->dequeue();
         $response = $executed[$i];
         if (!$response instanceof ResponseInterface) {
             $responses[] = $command->parseResponse($response);
         } elseif ($response instanceof ErrorResponseInterface && $exceptions) {
             $this->exception($connection, $response);
         } else {
             $responses[] = $response;
         }
         unset($executed[$i]);
     }
     return $responses;
 }
 /**
  * {@inheritdoc}
  */
 public function execute(ConnectionInterface $connection, SplQueue $commands)
 {
     $size = count($commands);
     $values = array();
     foreach ($commands as $command) {
         try {
             $connection->writeCommand($command);
         } catch (CommunicationException $exception) {
             return array_fill(0, $size, $exception);
         }
     }
     for ($i = 0; $i < $size; $i++) {
         $command = $commands->dequeue();
         try {
             $response = $connection->readResponse($command);
             $values[$i] = $response instanceof \Iterator ? iterator_to_array($response) : $response;
         } catch (CommunicationException $exception) {
             $toAdd = count($commands) - count($values);
             $values = array_merge($values, array_fill(0, $toAdd, $exception));
             break;
         }
     }
     return $values;
 }
Example #3
0
 /**
  * Implements the logic to flush the queued commands and read the responses
  * from the current connection.
  *
  * @param ConnectionInterface $connection Current connection instance.
  * @param \SplQueue           $commands   Queued commands.
  *
  * @return array
  */
 protected function executePipeline(ConnectionInterface $connection, \SplQueue $commands)
 {
     foreach ($commands as $command) {
         $connection->writeRequest($command);
     }
     $responses = array();
     $exceptions = $this->throwServerExceptions();
     while (!$commands->isEmpty()) {
         $command = $commands->dequeue();
         $response = $connection->readResponse($command);
         if (!$response instanceof ResponseInterface) {
             $responses[] = $command->parseResponse($response);
         } elseif ($response instanceof ErrorResponseInterface && $exceptions) {
             $this->exception($connection, $response);
         } else {
             $responses[] = $response;
         }
     }
     return $responses;
 }