Skip to content

Commit 114dfaa

Browse files
committed
Allow specifying Curl implementation
1 parent bc10e31 commit 114dfaa

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

src/Http.php

+17-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22
namespace Gt\Fetch;
33

4+
use Gt\Curl\Curl;
5+
use Gt\Curl\CurlMulti;
46
use Gt\Http\Uri;
57
use Http\Promise\Promise as HttpPromise;
68
use Http\Client\HttpClient;
@@ -33,13 +35,19 @@ class Http implements HttpClient, HttpAsyncClient {
3335

3436
public function __construct(
3537
array $options = [],
36-
float $interval = 0.01
38+
float $interval = 0.01,
39+
string $curlClass = Curl::class,
40+
string $curlMultiClass = CurlMulti::class
3741
) {
3842
$this->options = $options + $this->options;
3943
$this->interval = $interval;
4044

4145
$this->loop = LoopFactory::create();
42-
$this->requestResolver = new RequestResolver($this->loop);
46+
$this->requestResolver = new RequestResolver(
47+
$this->loop,
48+
$curlClass,
49+
$curlMultiClass
50+
);
4351
$this->timer = $this->loop->addPeriodicTimer(
4452
$this->interval,
4553
[$this->requestResolver, "tick"]
@@ -114,12 +122,15 @@ public function getOptions():array {
114122
}
115123

116124
/**
117-
* @param string|UriInterface $uri
125+
* @param string|UriInterface $input
118126
* @return string
119127
*/
120-
public function ensureUriInterface($uri):UriInterface {
121-
if(is_string($uri)) {
122-
$uri = new Uri($uri);
128+
public function ensureUriInterface($input):UriInterface {
129+
if($input instanceof RequestInterface) {
130+
$uri = $input->getUri();
131+
}
132+
else {
133+
$uri = new Uri($input);
123134
}
124135

125136
return $uri;

src/RequestResolver.php

+15-3
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,31 @@ class RequestResolver {
2626
/** @var string[] */
2727
protected $headerList;
2828

29-
public function __construct(LoopInterface $loop) {
29+
protected $curlClass;
30+
protected $curlMultiClass;
31+
32+
public function __construct(
33+
LoopInterface $loop,
34+
string $curlClass,
35+
string $curlMultiClass
36+
) {
3037
$this->loop = $loop;
3138
$this->curlList = [];
3239
$this->curlMultiList = [];
3340
$this->deferredList = [];
3441
$this->headerList = [];
42+
43+
$this->curlClass = $curlClass;
44+
$this->curlMultiClass = $curlMultiClass;
3545
}
3646

3747
public function add(
3848
UriInterface $uri,
3949
array $init,
4050
Deferred $deferred
4151
):void {
42-
$curl = new Curl($uri);
52+
/** @var CurlInterface $curl */
53+
$curl = new $this->curlClass($uri);
4354

4455
if(!empty($init["curlopt"])) {
4556
$curl->setOptArray($init["curlopt"]);
@@ -50,7 +61,8 @@ public function add(
5061
$curl->setOpt(CURLOPT_HEADERFUNCTION, [$this, "writeHeader"]);
5162
$curl->setOpt(CURLOPT_WRITEFUNCTION, [$this, "writeBody"]);
5263

53-
$curlMulti = new CurlMulti();
64+
/** @var CurlMultiInterface $curlMulti */
65+
$curlMulti = new $this->curlMultiClass();
5466
$curlMulti->add($curl);
5567

5668
$this->curlList []= $curl;

0 commit comments

Comments
 (0)