Version 1
[yaffs-website] / vendor / alchemy / zippy / src / Resource / Reader / Guzzle / LegacyGuzzleReaderFactory.php
1 <?php
2
3 namespace Alchemy\Zippy\Resource\Reader\Guzzle;
4
5 use Alchemy\Zippy\Resource\Resource as ZippyResource;
6 use Alchemy\Zippy\Resource\ResourceReader;
7 use Alchemy\Zippy\Resource\ResourceReaderFactory;
8 use Guzzle\Http\Client;
9 use Guzzle\Http\ClientInterface;
10 use Guzzle\Plugin\Backoff\BackoffPlugin;
11 use Symfony\Component\EventDispatcher\Event;
12
13 class LegacyGuzzleReaderFactory implements ResourceReaderFactory
14 {
15     /**
16      * @var ClientInterface|null
17      */
18     private $client = null;
19
20     public function __construct(ClientInterface $client = null)
21     {
22         $this->client = $client;
23
24         if (!$this->client) {
25             $this->client = new Client();
26
27             $this->client->getEventDispatcher()->addListener('request.error', function(Event $event) {
28                 // override guzzle default behavior of throwing exceptions
29                 // when 4xx & 5xx responses are encountered
30                 $event->stopPropagation();
31             }, -254);
32
33             $this->client->addSubscriber(BackoffPlugin::getExponentialBackoff(5, array(500, 502, 503, 408)));
34         }
35     }
36
37     /**
38      * @param ZippyResource $resource
39      * @param string        $context
40      *
41      * @return ResourceReader
42      */
43     public function getReader(ZippyResource $resource, $context)
44     {
45         return new LegacyGuzzleReader($resource, $this->client);
46     }
47 }