Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
MockHandler.php
001 <?php
002 namespace GuzzleHttp\Handler;
003
004 use GuzzleHttp\Exception\RequestException;
005 use GuzzleHttp\HandlerStack;
006 use GuzzleHttp\Promise\PromiseInterface;
007 use GuzzleHttp\Promise\RejectedPromise;
008 use GuzzleHttp\TransferStats;
009 use Psr\Http\Message\RequestInterface;
010 use Psr\Http\Message\ResponseInterface;
011
012 /**
013 * Handler that returns responses or throw exceptions from a queue.
014 */
015 class MockHandler implements \Countable
016 {
017 private $queue = [];
018 private $lastRequest;
019 private $lastOptions;
020 private $onFulfilled;
021 private $onRejected;
022
023 /**
024 * Creates a new MockHandler that uses the default handler stack list of
025 * middlewares.
026 *
027 * @param array $queue Array of responses, callables, or exceptions.
028 * @param callable $onFulfilled Callback to invoke when the return value is fulfilled.
029 * @param callable $onRejected Callback to invoke when the return value is rejected.
030 *
031 * @return HandlerStack
032 */
033 public static function createWithMiddleware(
034 array $queue = null,
035 callable $onFulfilled = null,
036 callable $onRejected = null
037 ) {
038 return HandlerStack::create(new self($queue, $onFulfilled, $onRejected));
039 }
040
041 /**
042 * The passed in value must be an array of
043 * {@see Psr7\Http\Message\ResponseInterface} objects, Exceptions,
044 * callables, or Promises.
045 *
046 * @param array $queue
047 * @param callable $onFulfilled Callback to invoke when the return value is fulfilled.
048 * @param callable $onRejected Callback to invoke when the return value is rejected.
049 */
050 public function __construct(
051 array $queue = null,
052 callable $onFulfilled = null,
053 callable $onRejected = null
054 ) {
055 $this->onFulfilled = $onFulfilled;
056 $this->onRejected = $onRejected;
057
058 if ($queue) {
059 call_user_func_array([$this, 'append'], $queue);
060 }
061 }
062
063 public function __invoke(RequestInterface $request, array $options)
064 {
065 if (!$this->queue) {
066 throw new \OutOfBoundsException('Mock queue is empty');
067 }
068
069 if (isset($options['delay']) && is_numeric($options['delay'])) {
070 usleep($options['delay'] * 1000);
071 }
072
073 $this->lastRequest = $request;
074 $this->lastOptions = $options;
075 $response = array_shift($this->queue);
076
077 if (isset($options['on_headers'])) {
078 if (!is_callable($options['on_headers'])) {
079 throw new \InvalidArgumentException('on_headers must be callable');
080 }
081 try {
082 $options['on_headers']($response);
083 } catch (\Exception $e) {
084 $msg = 'An error was encountered during the on_headers event';
085 $response = new RequestException($msg, $request, $response, $e);
086 }
087 }
088
089 if (is_callable($response)) {
090 $response = call_user_func($response, $request, $options);
091 }
092
093 $response = $response instanceof \Exception
094 ? \GuzzleHttp\Promise\rejection_for($response)
095 : \GuzzleHttp\Promise\promise_for($response);
096
097 return $response->then(
098 function ($value) use ($request, $options) {
099 $this->invokeStats($request, $options, $value);
100 if ($this->onFulfilled) {
101 call_user_func($this->onFulfilled, $value);
102 }
103 if (isset($options['sink'])) {
104 $contents = (string) $value->getBody();
105 $sink = $options['sink'];
106
107 if (is_resource($sink)) {
108 fwrite($sink, $contents);
109 } elseif (is_string($sink)) {
110 file_put_contents($sink, $contents);
111 } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) {
112 $sink->write($contents);
113 }
114 }
115
116 return $value;
117 },
118 function ($reason) use ($request, $options) {
119 $this->invokeStats($request, $options, null, $reason);
120 if ($this->onRejected) {
121 call_user_func($this->onRejected, $reason);
122 }
123 return \GuzzleHttp\Promise\rejection_for($reason);
124 }
125 );
126 }
127
128 /**
129 * Adds one or more variadic requests, exceptions, callables, or promises
130 * to the queue.
131 */
132 public function append()
133 {
134 foreach (func_get_args() as $value) {
135 if ($value instanceof ResponseInterface
136 || $value instanceof \Exception
137 || $value instanceof PromiseInterface
138 || is_callable($value)
139 ) {
140 $this->queue[] = $value;
141 } else {
142 throw new \InvalidArgumentException('Expected a response or '
143 . 'exception. Found ' . \GuzzleHttp\describe_type($value));
144 }
145 }
146 }
147
148 /**
149 * Get the last received request.
150 *
151 * @return RequestInterface
152 */
153 public function getLastRequest()
154 {
155 return $this->lastRequest;
156 }
157
158 /**
159 * Get the last received request options.
160 *
161 * @return array
162 */
163 public function getLastOptions()
164 {
165 return $this->lastOptions;
166 }
167
168 /**
169 * Returns the number of remaining items in the queue.
170 *
171 * @return int
172 */
173 public function count()
174 {
175 return count($this->queue);
176 }
177
178 public function reset()
179 {
180 $this->queue = [];
181 }
182
183 private function invokeStats(
184 RequestInterface $request,
185 array $options,
186 ResponseInterface $response = null,
187 $reason = null
188 ) {
189 if (isset($options['on_stats'])) {
190 $transferTime = isset($options['transfer_time']) ? $options['transfer_time'] : 0;
191 $stats = new TransferStats($request, $response, $transferTime, $reason);
192 call_user_func($options['on_stats'], $stats);
193 }
194 }
195 }
196