|
|
<?php |
|
|
|
|
|
namespace JsonRPC; |
|
|
|
|
|
use Exception; |
|
|
use JsonRPC\Request\RequestBuilder; |
|
|
use JsonRPC\Response\ResponseParser; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Client |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private $isNamedArguments = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private $returnException = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private $isBatch = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private $batch = array(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private $httpClient; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct($url = '', $returnException = false, HttpClient $httpClient = null) |
|
|
{ |
|
|
$this->httpClient = $httpClient ?: new HttpClient($url); |
|
|
$this->returnException = $returnException; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function withPositionalArguments() |
|
|
{ |
|
|
$this->isNamedArguments = false; |
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getHttpClient() |
|
|
{ |
|
|
return $this->httpClient; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function authentication($username, $password) |
|
|
{ |
|
|
$this->httpClient |
|
|
->withUsername($username) |
|
|
->withPassword($password); |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function __call($method, array $params) |
|
|
{ |
|
|
if ($this->isNamedArguments && count($params) === 1 && is_array($params[0])) { |
|
|
$params = $params[0]; |
|
|
} |
|
|
|
|
|
return $this->execute($method, $params); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function batch() |
|
|
{ |
|
|
$this->isBatch = true; |
|
|
$this->batch = array(); |
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function send() |
|
|
{ |
|
|
$this->isBatch = false; |
|
|
return $this->sendPayload('['.implode(', ', $this->batch).']'); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function execute($procedure, array $params = array(), array $reqattrs = array(), $requestId = null, array $headers = array()) |
|
|
{ |
|
|
$payload = RequestBuilder::create() |
|
|
->withProcedure($procedure) |
|
|
->withParams($params) |
|
|
->withRequestAttributes($reqattrs) |
|
|
->withId($requestId) |
|
|
->build(); |
|
|
|
|
|
if ($this->isBatch) { |
|
|
$this->batch[] = $payload; |
|
|
return $this; |
|
|
} |
|
|
|
|
|
return $this->sendPayload($payload, $headers); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private function sendPayload($payload, array $headers = array()) |
|
|
{ |
|
|
return ResponseParser::create() |
|
|
->withReturnException($this->returnException) |
|
|
->withPayload($this->httpClient->execute($payload, $headers)) |
|
|
->parse(); |
|
|
} |
|
|
} |
|
|
|