コード例 #1
0
 /**
  * {@inheritdoc}
  */
 protected function executePipeline(ConnectionInterface $connection, \SplQueue $commands)
 {
     while (!$commands->isEmpty()) {
         $connection->writeRequest($commands->dequeue());
     }
     $connection->disconnect();
     return array();
 }
コード例 #2
0
ファイル: Atomic.php プロジェクト: peterxiemin/commonswoole
 /**
  * {@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;
 }
コード例 #3
0
ファイル: Pipeline.php プロジェクト: peterxiemin/commonswoole
 /**
  * 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;
 }