* @copyright 2015 - 2017 Timothy J. Warren * @license http://www.opensource.org/licenses/mit-license.html MIT License * @version 4.0 * @link https://github.com/timw4mail/HummingBirdAnimeClient */ namespace Aviat\AnimeClient\API; use function Amp\{all, some, wait}; use Amp\Artax\Client; /** * Class to simplify making and validating simultaneous requests */ class ParallelAPIRequest { /** * Set of requests to make in parallel * * @var array */ protected $requests = []; /** * Add a request * * @param string|Request $request * @param string|number $key * @return self */ public function addRequest($request, $key = null): self { if ( ! is_null($key)) { $this->requests[$key] = $request; return $this; } $this->requests[] = $request; return $this; } /** * Add multiple requests * * @param string[]|Request[] $requests * @return self */ public function addRequests(array $requests): self { array_walk($requests, [$this, 'addRequest']); return $this; } /** * Actually make the requests * * @param bool $allowFailingRequests * @return array */ public function makeRequests(bool $allowFailingRequests = FALSE): array { $client = new Client(); $promises = $client->requestMulti($this->requests); $func = ($allowFailingRequests) ? 'some' : 'all'; $results = wait($func($promises)); return $results; } }