bkdotcom/PHPDebugConsole

View on GitHub
src/CurlHttpMessage/Handler/Curl.php

Summary

Maintainability
A
0 mins
Test Coverage
B
80%
<?php

namespace bdk\CurlHttpMessage\Handler;

use bdk\CurlHttpMessage\CurlReqRes;
use bdk\Promise\FulfilledPromise;
use bdk\Promise\PromiseInterface;
use CurlHandle;

/**
 * Fetch the request with curl, and return a Promise
 */
class Curl
{
    /** @var CurlHandle|resource */
    protected $curlHandle;

    /**
     * Invoke handler
     *
     * @param CurlReqRes $curlReqRes CurlReqRes instance
     *
     * @return PromiseInterface
     */
    public function __invoke(CurlReqRes $curlReqRes)
    {
        $curlHandle = $this->getCurlHandle();
        $curlReqRes->setCurlHandle($curlHandle);
        $response = $curlReqRes->exec();
        return new FulfilledPromise($response);
    }

    /**
     * Reuse existing curl handle or init a new one
     *
     * @return resource|CurlHandle
     */
    private function getCurlHandle()
    {
        if (\is_resource($this->curlHandle) === false && ($this->curlHandle instanceof CurlHandle) === false) {
            $this->curlHandle = \curl_init();
            return $this->curlHandle;
        }
        if (\function_exists('curl_reset') === false) {
            \curl_close($this->curlHandle);
            $this->curlHandle = \curl_init();
            return $this->curlHandle;
        }
        \curl_reset($this->curlHandle);
        return $this->curlHandle;
    }
}