diff --git a/src/HttpAsyncClient.php b/src/HttpAsyncClient.php new file mode 100644 index 0000000..737ee63 --- /dev/null +++ b/src/HttpAsyncClient.php @@ -0,0 +1,24 @@ + + */ +interface HttpAsyncClient +{ + /** + * Sends a PSR-7 request in an asynchronous way. + * + * @param RequestInterface $request + * + * @return Promise + * + * @throws Exception + */ + public function sendAsyncRequest(RequestInterface $request); +} diff --git a/src/HttpClient.php b/src/HttpClient.php index 525f9e0..fa66c2c 100644 --- a/src/HttpClient.php +++ b/src/HttpClient.php @@ -2,7 +2,6 @@ namespace Http\Client; -use Http\Client\Exception\BatchException; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; diff --git a/src/Promise.php b/src/Promise.php new file mode 100644 index 0000000..575bc6e --- /dev/null +++ b/src/Promise.php @@ -0,0 +1,83 @@ + + */ +interface Promise +{ + /** + * Pending state, promise has not been fulfilled or rejected. + */ + const PENDING = "pending"; + + /** + * Fulfilled state, promise has been fulfilled with a ResponseInterface object. + */ + const FULFILLED = "fulfilled"; + + /** + * Rejected state, promise has been rejected with an Exception object. + */ + const REJECTED = "rejected"; + + /** + * Add behavior for when the promise is resolved or rejected (response will be available, or error happens). + * + * If you do not care about one of the cases, you can set the corresponding callable to null + * The callback will be called when the response or exception arrived and never more than once. + * + * @param callable $onFulfilled Called when a response will be available. + * @param callable $onRejected Called when an error happens. + * + * You must always return the Response in the interface or throw an Exception. + * + * @return Promise Always returns a new promise which is resolved with value of the executed callback (onFulfilled / onRejected). + */ + public function then(callable $onFulfilled = null, callable $onRejected = null); + + /** + * Get the state of the promise, one of PENDING, FULFILLED or REJECTED + * + * @return int + */ + public function getState(); + + /** + * Return the value of the promise (fulfilled). + * + * @return ResponseInterface Response Object only when the Promise is fulfilled. + * + * @throws \LogicException When the promise is not fulfilled. + */ + public function getResponse(); + + /** + * Return the reason of the promise (rejected). + * + * @return Exception Exception Object only when the Promise is rejected. + * + * If the exception is an instance of Http\Client\Exception\HttpException it will contain + * the response object with the status code and the http reason. + * + * @throws \LogicException When the promise is not rejected. + */ + public function getException(); + + /** + * Wait for the promise to be fulfilled or rejected. + * + * When this method returns, the request has been resolved and the appropriate callable has terminated. + */ + public function wait(); +}