sonarrradarrplexorganizrnginxdashboardhtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelanding
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							181 lines
						
					
					
						
							4.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							181 lines
						
					
					
						
							4.2 KiB
						
					
					
				| <?php | |
| 
 | |
| namespace Http\Client\Common; | |
| 
 | |
| use Http\Client\Exception; | |
| use Psr\Http\Message\RequestInterface; | |
| use Psr\Http\Message\ResponseInterface; | |
| 
 | |
| /** | |
|  * Responses and exceptions returned from parallel request execution. | |
|  * | |
|  * @author Márk Sági-Kazár <mark.sagikazar@gmail.com> | |
|  */ | |
| final class BatchResult | |
| { | |
|     /** | |
|      * @var \SplObjectStorage | |
|      */ | |
|     private $responses; | |
| 
 | |
|     /** | |
|      * @var \SplObjectStorage | |
|      */ | |
|     private $exceptions; | |
| 
 | |
|     public function __construct() | |
|     { | |
|         $this->responses = new \SplObjectStorage(); | |
|         $this->exceptions = new \SplObjectStorage(); | |
|     } | |
| 
 | |
|     /** | |
|      * Checks if there are any successful responses at all. | |
|      * | |
|      * @return bool | |
|      */ | |
|     public function hasResponses() | |
|     { | |
|         return $this->responses->count() > 0; | |
|     } | |
| 
 | |
|     /** | |
|      * Returns all successful responses. | |
|      * | |
|      * @return ResponseInterface[] | |
|      */ | |
|     public function getResponses() | |
|     { | |
|         $responses = []; | |
| 
 | |
|         foreach ($this->responses as $request) { | |
|             $responses[] = $this->responses[$request]; | |
|         } | |
| 
 | |
|         return $responses; | |
|     } | |
| 
 | |
|     /** | |
|      * Checks if there is a successful response for a request. | |
|      * | |
|      * @param RequestInterface $request | |
|      * | |
|      * @return bool | |
|      */ | |
|     public function isSuccessful(RequestInterface $request) | |
|     { | |
|         return $this->responses->contains($request); | |
|     } | |
| 
 | |
|     /** | |
|      * Returns the response for a successful request. | |
|      * | |
|      * @param RequestInterface $request | |
|      * | |
|      * @return ResponseInterface | |
|      * | |
|      * @throws \UnexpectedValueException If request was not part of the batch or failed | |
|      */ | |
|     public function getResponseFor(RequestInterface $request) | |
|     { | |
|         try { | |
|             return $this->responses[$request]; | |
|         } catch (\UnexpectedValueException $e) { | |
|             throw new \UnexpectedValueException('Request not found', $e->getCode(), $e); | |
|         } | |
|     } | |
| 
 | |
|     /** | |
|      * Adds a response in an immutable way. | |
|      * | |
|      * @param RequestInterface  $request | |
|      * @param ResponseInterface $response | |
|      * | |
|      * @return BatchResult the new BatchResult with this request-response pair added to it | |
|      */ | |
|     public function addResponse(RequestInterface $request, ResponseInterface $response) | |
|     { | |
|         $new = clone $this; | |
|         $new->responses->attach($request, $response); | |
| 
 | |
|         return $new; | |
|     } | |
| 
 | |
|     /** | |
|      * Checks if there are any unsuccessful requests at all. | |
|      * | |
|      * @return bool | |
|      */ | |
|     public function hasExceptions() | |
|     { | |
|         return $this->exceptions->count() > 0; | |
|     } | |
| 
 | |
|     /** | |
|      * Returns all exceptions for the unsuccessful requests. | |
|      * | |
|      * @return Exception[] | |
|      */ | |
|     public function getExceptions() | |
|     { | |
|         $exceptions = []; | |
| 
 | |
|         foreach ($this->exceptions as $request) { | |
|             $exceptions[] = $this->exceptions[$request]; | |
|         } | |
| 
 | |
|         return $exceptions; | |
|     } | |
| 
 | |
|     /** | |
|      * Checks if there is an exception for a request, meaning the request failed. | |
|      * | |
|      * @param RequestInterface $request | |
|      * | |
|      * @return bool | |
|      */ | |
|     public function isFailed(RequestInterface $request) | |
|     { | |
|         return $this->exceptions->contains($request); | |
|     } | |
| 
 | |
|     /** | |
|      * Returns the exception for a failed request. | |
|      * | |
|      * @param RequestInterface $request | |
|      * | |
|      * @return Exception | |
|      * | |
|      * @throws \UnexpectedValueException If request was not part of the batch or was successful | |
|      */ | |
|     public function getExceptionFor(RequestInterface $request) | |
|     { | |
|         try { | |
|             return $this->exceptions[$request]; | |
|         } catch (\UnexpectedValueException $e) { | |
|             throw new \UnexpectedValueException('Request not found', $e->getCode(), $e); | |
|         } | |
|     } | |
| 
 | |
|     /** | |
|      * Adds an exception in an immutable way. | |
|      * | |
|      * @param RequestInterface $request | |
|      * @param Exception        $exception | |
|      * | |
|      * @return BatchResult the new BatchResult with this request-exception pair added to it | |
|      */ | |
|     public function addException(RequestInterface $request, Exception $exception) | |
|     { | |
|         $new = clone $this; | |
|         $new->exceptions->attach($request, $exception); | |
| 
 | |
|         return $new; | |
|     } | |
| 
 | |
|     public function __clone() | |
|     { | |
|         $this->responses = clone $this->responses; | |
|         $this->exceptions = clone $this->exceptions; | |
|     } | |
| }
 | |
| 
 |