PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / trunk
Tutor LMS – eLearning and online course solution vtrunk
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / ecommerce / PaymentGateways / Paypal / vendor / guzzlehttp / guzzle / src / Pool.php
tutor / ecommerce / PaymentGateways / Paypal / vendor / guzzlehttp / guzzle / src Last commit date
Cookie 2 months ago Exception 2 months ago Handler 2 months ago BodySummarizer.php 1 year ago BodySummarizerInterface.php 1 year ago Client.php 2 months ago ClientInterface.php 1 year ago ClientTrait.php 1 year ago HandlerStack.php 2 months ago MessageFormatter.php 1 year ago MessageFormatterInterface.php 1 year ago Middleware.php 2 months ago Pool.php 2 months ago PrepareBodyMiddleware.php 2 months ago RedirectMiddleware.php 2 months ago RequestOptions.php 2 months ago RetryMiddleware.php 2 months ago TransferStats.php 1 year ago TransportSharing.php 2 months ago Utils.php 2 months ago functions.php 2 months ago functions_include.php 1 year ago
Pool.php
138 lines
1 <?php
2
3 namespace GuzzleHttp;
4
5 use GuzzleHttp\Promise as P;
6 use GuzzleHttp\Promise\EachPromise;
7 use GuzzleHttp\Promise\PromiseInterface;
8 use GuzzleHttp\Promise\PromisorInterface;
9 use Psr\Http\Message\RequestInterface;
10
11 /**
12 * Sends an iterator of requests concurrently using a capped pool size.
13 *
14 * The pool will read from an iterator until it is cancelled or until the
15 * iterator is consumed. When a request is yielded, the request is sent after
16 * applying the "request_options" request options (if provided in the ctor).
17 *
18 * When a function is yielded by the iterator, the function is provided the
19 * "request_options" array that should be merged on top of any existing
20 * options, and the function MUST then return a wait-able promise.
21 *
22 * @final
23 */
24 class Pool implements PromisorInterface
25 {
26 /**
27 * @var EachPromise
28 */
29 private $each;
30
31 /**
32 * @param ClientInterface $client Client used to send the requests.
33 * @param array|\Iterator $requests Requests or functions that return
34 * requests to send concurrently.
35 * @param array $config Associative array of options
36 * - concurrency: (int) Maximum number of requests to send concurrently
37 * - options: Array of request options to apply to each request.
38 * - fulfilled: (callable) Function to invoke when a request completes.
39 * - rejected: (callable) Function to invoke when a request is rejected.
40 */
41 public function __construct(ClientInterface $client, $requests, array $config = [])
42 {
43 if (!isset($config['concurrency'])) {
44 $config['concurrency'] = 25;
45 }
46
47 if (isset($config['options'])) {
48 $opts = $config['options'];
49 unset($config['options']);
50 } else {
51 $opts = [];
52 }
53
54 if (!\is_iterable($requests)) {
55 \trigger_deprecation(
56 'guzzlehttp/guzzle',
57 '7.11',
58 'Passing a non-iterable request collection to %s::__construct() or %s::batch() is deprecated; guzzlehttp/guzzle 8.0 will require an iterable.',
59 __CLASS__,
60 __CLASS__
61 );
62
63 $requests = [$requests];
64 }
65
66 $iterable = P\Create::iterFor($requests);
67 $requests = static function () use ($iterable, $client, $opts) {
68 foreach ($iterable as $key => $rfn) {
69 if ($rfn instanceof RequestInterface) {
70 yield $key => $client->sendAsync($rfn, $opts);
71 } elseif (\is_callable($rfn)) {
72 yield $key => $rfn($opts);
73 } else {
74 throw new \InvalidArgumentException('Each value yielded by the iterator must be a Psr7\Http\Message\RequestInterface or a callable that returns a promise that fulfills with a Psr7\Message\Http\ResponseInterface object.');
75 }
76 }
77 };
78
79 $this->each = new EachPromise($requests(), $config);
80 }
81
82 /**
83 * Get promise
84 */
85 public function promise(): PromiseInterface
86 {
87 return $this->each->promise();
88 }
89
90 /**
91 * Sends multiple requests concurrently and returns an array of responses
92 * and exceptions that uses the same ordering as the provided requests.
93 *
94 * IMPORTANT: This method keeps every request and response in memory, and
95 * as such, is NOT recommended when sending a large number or an
96 * indeterminate number of requests concurrently.
97 *
98 * @param ClientInterface $client Client used to send the requests
99 * @param array|\Iterator $requests Requests to send concurrently.
100 * @param array $options Passes through the options available in
101 * {@see Pool::__construct}
102 *
103 * @return array Returns an array containing the response or an exception
104 * in the same order that the requests were sent.
105 *
106 * @throws \InvalidArgumentException if the event format is incorrect.
107 */
108 public static function batch(ClientInterface $client, $requests, array $options = []): array
109 {
110 $res = [];
111 self::cmpCallback($options, 'fulfilled', $res);
112 self::cmpCallback($options, 'rejected', $res);
113 $pool = new static($client, $requests, $options);
114 $pool->promise()->wait();
115 \ksort($res);
116
117 return $res;
118 }
119
120 /**
121 * Execute callback(s)
122 */
123 private static function cmpCallback(array &$options, string $name, array &$results): void
124 {
125 if (!isset($options[$name])) {
126 $options[$name] = static function ($v, $k) use (&$results) {
127 $results[$k] = $v;
128 };
129 } else {
130 $currentFn = $options[$name];
131 $options[$name] = static function ($v, $k) use (&$results, $currentFn) {
132 $currentFn($v, $k);
133 $results[$k] = $v;
134 };
135 }
136 }
137 }
138