1111use Http \Client \HttpAsyncClient ;
1212use Http \Client \Exception \HttpException ;
1313use Http \Client \Exception \RequestException ;
14- use Http \Promise \Promise ;
1514use Http \Message \MessageFactory ;
1615use Psr \Http \Message \RequestInterface ;
1716use Psr \Http \Message \StreamInterface ;
1817
1918/**
20- * Client for the React promise implementation
19+ * Client for the React promise implementation.
20+ *
2121 * @author Stéphane Hulard <[email protected] > 2222 */
2323class Client implements HttpClient, HttpAsyncClient
2424{
2525 /**
26- * React HTTP client
26+ * React HTTP client.
27+ *
2728 * @var Client
2829 */
2930 private $ client ;
3031
3132 /**
32- * React event loop
33+ * React event loop.
34+ *
3335 * @var LoopInterface
3436 */
3537 private $ loop ;
3638
3739 /**
38- * HttpPlug message factory
40+ * HttpPlug message factory.
41+ *
3942 * @var MessageFactory
4043 */
4144 private $ messageFactory ;
4245
4346 /**
44- * Initialize the React client
47+ * Initialize the React client.
48+ *
4549 * @param LoopInterface|null $loop React Event loop
4650 * @param Resolver $resolver React async DNS resolver
4751 * @param ReactClient $client React client to use
@@ -51,14 +55,13 @@ public function __construct(
5155 LoopInterface $ loop = null ,
5256 ReactClient $ client = null
5357 ) {
54- $ this ->loop = null === $ loop ?ReactFactory::buildEventLoop ():$ loop ;
55- if (null === $ client ) {
56- $ this ->client = ReactFactory::buildHttpClient ($ this ->loop );
57- } elseif (null === $ loop ) {
58+ if (null !== $ client && null === $ loop ) {
5859 throw new \RuntimeException (
59- " You must give a LoopInterface instance with the Client "
60+ ' You must give a LoopInterface instance with the Client '
6061 );
6162 }
63+ $ this ->loop = (null !== $ loop ) ?: ReactFactory::buildEventLoop ();
64+ $ this ->client = (null !== $ client ) ?: ReactFactory::buildHttpClient ($ this ->loop );
6265
6366 $ this ->messageFactory = $ messageFactory ;
6467 }
@@ -78,70 +81,70 @@ public function sendRequest(RequestInterface $request)
7881 */
7982 public function sendAsyncRequest (RequestInterface $ request )
8083 {
81- $ requestStream = $ this ->buildReactRequest ($ request );
84+ $ reactRequest = $ this ->buildReactRequest ($ request );
8285 $ deferred = new Deferred ();
8386
84- $ requestStream ->on ('error ' , function (\Exception $ error ) use ($ deferred , $ request ) {
87+ $ reactRequest ->on ('error ' , function (\Exception $ error ) use ($ deferred , $ request ) {
8588 $ deferred ->reject (new RequestException (
8689 $ error ->getMessage (),
8790 $ request ,
8891 $ error
8992 ));
9093 });
91- $ requestStream ->on ('response ' , function (ReactResponse $ response = null ) use ($ deferred , $ requestStream , $ request ) {
94+ $ reactRequest ->on ('response ' , function (ReactResponse $ reactResponse = null ) use ($ deferred , $ reactRequest , $ request ) {
9295 $ bodyStream = null ;
93- $ response ->on ('data ' , function ($ data ) use (&$ bodyStream ) {
96+ $ reactResponse ->on ('data ' , function ($ data ) use (&$ bodyStream ) {
9497 if ($ data instanceof StreamInterface) {
9598 $ bodyStream = $ data ;
9699 } else {
97100 $ bodyStream ->write ($ data );
98101 }
99102 });
100103
101- $ response ->on ('end ' , function (\Exception $ error = null ) use ($ deferred , $ request , $ response , &$ bodyStream ) {
104+ $ reactResponse ->on ('end ' , function (\Exception $ error = null ) use ($ deferred , $ request , $ reactResponse , &$ bodyStream ) {
102105 $ bodyStream ->rewind ();
103- $ psr7Response = $ this ->buildResponse (
104- $ response ,
106+ $ response = $ this ->buildResponse (
107+ $ reactResponse ,
105108 $ bodyStream
106109 );
107110 if (null !== $ error ) {
108111 $ deferred ->reject (new HttpException (
109112 $ error ->getMessage (),
110113 $ request ,
111- $ psr7Response ,
114+ $ response ,
112115 $ error
113116 ));
114117 } else {
115- $ deferred ->resolve ($ psr7Response );
118+ $ deferred ->resolve ($ response );
116119 }
117120 });
118121 });
119122
120- $ requestStream ->end ((string )$ request ->getBody ());
123+ $ reactRequest ->end ((string ) $ request ->getBody ());
121124
122- $ promise = new ReactPromiseAdapter ($ deferred ->promise ());
125+ $ promise = new Promise ($ deferred ->promise ());
123126 $ promise ->setLoop ($ this ->loop );
127+
124128 return $ promise ;
125129 }
126130
127131 /**
128- * Build a React request from the PSR7 RequestInterface
129- * @param RequestInterface $request
132+ * Build a React request from the PSR7 RequestInterface.
133+ *
134+ * @param RequestInterface $request
135+ *
130136 * @return ReactRequest
131137 */
132138 private function buildReactRequest (RequestInterface $ request )
133139 {
134140 $ headers = [];
135141 foreach ($ request ->getHeaders () as $ name => $ value ) {
136- $ headers [$ name ] = (is_array ($ value )?$ value [0 ]:$ value );
137- }
138- if ($ request ->getBody ()->getSize () > 0 ) {
139- $ headers ['Content-Length ' ] = $ request ->getBody ()->getSize ();
142+ $ headers [$ name ] = (is_array ($ value ) ? $ value [0 ] : $ value );
140143 }
141144
142145 $ reactRequest = $ this ->client ->request (
143146 $ request ->getMethod (),
144- (string )$ request ->getUri (),
147+ (string ) $ request ->getUri (),
145148 $ headers ,
146149 $ request ->getProtocolVersion ()
147150 );
@@ -150,15 +153,18 @@ private function buildReactRequest(RequestInterface $request)
150153 }
151154
152155 /**
153- * Transform a React Response to a valid PSR7 ResponseInterface instance
154- * @param ReactResponse $response
156+ * Transform a React Response to a valid PSR7 ResponseInterface instance.
157+ *
158+ * @param ReactResponse $response
159+ *
155160 * @return ResponseInterface
156161 */
157162 private function buildResponse (
158163 ReactResponse $ response ,
159164 StreamInterface $ body
160165 ) {
161166 $ body ->rewind ();
167+
162168 return $ this ->messageFactory ->createResponse (
163169 $ response ->getCode (),
164170 $ response ->getReasonPhrase (),
0 commit comments