Source of file Client.php
Size: 4,953 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Json/Server/Client.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Json\Server; use Zend\Http\Client as HttpClient; use Zend\Server\Client as ServerClient; class Client implements ServerClient { /** * Full address of the JSON-RPC service. * * @var string */ protected $serverAddress; /** * HTTP Client to use for requests. * * @var HttpClient */ protected $httpClient; /** * Request of the last method call. * * @var Request */ protected $lastRequest; /** * Response received from the last method call. * * @var Response */ protected $lastResponse; /** * Request ID counter. * * @var int */ protected $id = 0; /** * Create a new JSON-RPC client to a remote server. * * @param string $server Full address of the JSON-RPC service. * @param HttpClient $httpClient HTTP Client to use for requests. */ public function __construct($server, HttpClient $httpClient = null) { $this->httpClient = $httpClient ?: new HttpClient(); $this->serverAddress = $server; } /** * Sets the HTTP client object to use for connecting the JSON-RPC server. * * @param HttpClient $httpClient New HTTP client to use. * @return Client Self instance. */ public function setHttpClient(HttpClient $httpClient) { $this->httpClient = $httpClient; return $this; } /** * Gets the HTTP client object. * * @return HttpClient HTTP client. */ public function getHttpClient() { return $this->httpClient; } /** * The request of the last method call. * * @return Request Request instance. */ public function getLastRequest() { return $this->lastRequest; } /** * The response received from the last method call. * * @return Response Response instance. */ public function getLastResponse() { return $this->lastResponse; } /** * Perform a JSON-RPC request and return a response. * * @param Request $request Request. * @return Response Response. * @throws Exception\HttpException When HTTP communication fails. */ public function doRequest($request) { $this->lastRequest = $request; $httpRequest = $this->httpClient->getRequest(); if ($httpRequest->getUriString() === null) { $this->httpClient->setUri($this->serverAddress); } $headers = $httpRequest->getHeaders(); $headers->addHeaders(array( 'Content-Type' => 'application/json', 'Accept' => 'application/json', )); if (!$headers->get('User-Agent')) { $headers->addHeaderLine('User-Agent', 'Zend_Json_Server_Client'); } $this->httpClient->setRawBody($request->__toString()); $this->httpClient->setMethod('POST'); $httpResponse = $this->httpClient->send(); if (!$httpResponse->isSuccess()) { throw new Exception\HttpException( $httpResponse->getReasonPhrase(), $httpResponse->getStatusCode() ); } $response = new Response(); $this->lastResponse = $response; // import all response data from JSON HTTP response $response->loadJson($httpResponse->getBody()); return $response; } /** * Send a JSON-RPC request to the service (for a specific method). * * @param string $method Name of the method we want to call. * @param array $params Array of parameters for the method. * @return mixed Method call results. * @throws Exception\ErrorException When remote call fails. */ public function call($method, $params = array()) { $request = $this->createRequest($method, $params); $response = $this->doRequest($request); if ($response->isError()) { $error = $response->getError(); throw new Exception\ErrorException( $error->getMessage(), $error->getCode() ); } return $response->getResult(); } /** * Create request object. * * @param string $method Method to call. * @param array $params List of arguments. * @return Request Created request. */ protected function createRequest($method, array $params) { $request = new Request(); $request->setMethod($method) ->setParams($params) ->setId(++$this->id); return $request; } } |