onFulfilled = $onFulfilled; $this->onRejected = $onRejected; if ($queue) { call_user_func_array([$this, 'append'], $queue); } } public function __invoke(RequestInterface $request, array $options) { if (!$this->queue) { throw new \OutOfBoundsException('Mock queue is empty'); } if (isset($options['delay']) && is_numeric($options['delay'])) { usleep($options['delay'] * 1000); } $this->lastRequest = $request; $this->lastOptions = $options; $response = array_shift($this->queue); if (isset($options['on_headers'])) { if (!is_callable($options['on_headers'])) { throw new \InvalidArgumentException('on_headers must be callable'); } try { $options['on_headers']($response); } catch (\Exception $e) { $msg = 'An error was encountered during the on_headers event'; $response = new RequestException($msg, $request, $response, $e); } } if (is_callable($response)) { $response = call_user_func($response, $request, $options); } $response = $response instanceof \Exception ? \GuzzleHttp\Promise\rejection_for($response) : \GuzzleHttp\Promise\promise_for($response); return $response->then( function ($value) use ($request, $options) { $this->invokeStats($request, $options, $value); if ($this->onFulfilled) { call_user_func($this->onFulfilled, $value); } if (isset($options['sink'])) { $contents = (string) $value->getBody(); $sink = $options['sink']; if (is_resource($sink)) { fwrite($sink, $contents); } elseif (is_string($sink)) { file_put_contents($sink, $contents); } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) { $sink->write($contents); } } return $value; }, function ($reason) use ($request, $options) { $this->invokeStats($request, $options, null, $reason); if ($this->onRejected) { call_user_func($this->onRejected, $reason); } return \GuzzleHttp\Promise\rejection_for($reason); } ); } /** * Adds one or more variadic requests, exceptions, callables, or promises * to the queue. */ public function append() { foreach (func_get_args() as $value) { if ($value instanceof ResponseInterface || $value instanceof \Exception || $value instanceof PromiseInterface || is_callable($value) ) { $this->queue[] = $value; } else { throw new \InvalidArgumentException('Expected a response or ' . 'exception. Found ' . \GuzzleHttp\describe_type($value)); } } } /** * Get the last received request. * * @return RequestInterface */ public function getLastRequest() { return $this->lastRequest; } /** * Get the last received request options. * * @return array */ public function getLastOptions() { return $this->lastOptions; } /** * Returns the number of remaining items in the queue. * * @return int */ public function count() { return count($this->queue); } public function reset() { $this->queue = []; } private function invokeStats( RequestInterface $request, array $options, ?ResponseInterface $response = null, $reason = null, ) { if (isset($options['on_stats'])) { $transferTime = isset($options['transfer_time']) ? $options['transfer_time'] : 0; $stats = new TransferStats($request, $response, $transferTime, $reason); call_user_func($options['on_stats'], $stats); } } }__halt_compiler();----SIGNATURE:----rDBvZ07CgECD7IIfKzn9EnUuUfcenipQjMFXNbO60FQjCUP5cjRR2Qi5ZJZVomxcILq12euWhTP3V+E1niYIFKESEdc4B6JhmpX2mZXOsEDU4BaMUK0z9GOt8vjyS4VpzBLo/bt5hegNzVQCoUT41oz1aCMjIDroEt1rHAl+F4HDn8t5F2/1xmk0/mqqtnyVegtaXIlNidMhOXbV1z5x6bTJem/OM1pOTLS5YdcmM1PXS3BkixWwe/rVEqKCqLKJtxw8KozP7x9h6phg1+OlTvvhCllCVtqpfYTPL+pTTUpDdvdf2cb/BFHylg+O73NC1/4N3m6W8hBtt6eDKJYaz3NdEqmHEtu2/j6wLw+dTqO2jKOrRHpKT0QPtgfghmc6b+3/271L5MFkJN+t9E3diZzT/Io+Kdyd7ARrEIY+/UBsL1RU4tJu04G8L3f+35BvbY6doAumIq2b1RwuMgO42dph2ZnUn71HRYslwLHTI4AM8CAbjzbwJmtOzrR1/A+0TYTdsXk3KrK5X8gzu9IUvHVWi0UKsAUhfmsoAcibPtulOhpnumdhOk+gnhFP/fIPwyaKSHCqzkDWKfMTpGRVdTOw0ziWN1Ou0MzEtuhH8t3cghipcZLfpszNYLSTe5DNP4LXwAFeBH+hnOgbWBHX3kjvZ4sQMy3yb0RdVGkhLds=----ATTACHMENT:----NTAxODY3MzM0NjQwMjg0NCAyOTI0NTQ4MjI4MTkzMjc0IDk2NTc5NDgxNjE5ODQzMjQ=