This repository has been archived by the owner on Jan 30, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'feature-clients' of https://github.com/rafalwrzeszcz/zf2 …
…into feature/json-client
- Loading branch information
38 parents
a4ebc7b
+
ec1f853
+
b1a5d58
+
a1cf97e
+
c1b8314
+
1482b41
+
7d80b85
+
869bbf8
+
403ce8d
+
008804b
+
87522da
+
d31ec42
+
2f2a15a
+
585cc82
+
a9438e2
+
d59be1f
+
643e2df
+
a49e8f2
+
08fd26d
+
b52d5dc
+
de5abc1
+
48f2d19
+
34ca3a0
+
5169094
+
25abd15
+
baa09a1
+
355680a
+
b2b0d91
+
6986810
+
7b1513c
+
6f9a6cc
+
39a1c1e
+
92dbdb3
+
ac3a5aa
+
ee15c3a
+
67f414a
+
49138fb
+
44ff133
commit 1674a18
Showing
8 changed files
with
691 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
<?php | ||
/** | ||
* Zend Framework | ||
* | ||
* LICENSE | ||
* | ||
* This source file is subject to the new BSD license that is bundled | ||
* with this package in the file LICENSE.txt. | ||
* It is also available through the world-wide-web at this URL: | ||
* http://framework.zend.com/license/new-bsd | ||
* If you did not receive a copy of the license and are unable to | ||
* obtain it through the world-wide-web, please send an email | ||
* to license@zend.com so we can send you a copy immediately. | ||
* | ||
* @category Zend | ||
* @package Zend_Json | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
|
||
/** | ||
* @namespace | ||
*/ | ||
namespace Zend\Json\Server; | ||
|
||
use Zend\Http\Client as HttpClient, | ||
Zend\Server\Client as ClientInterface; | ||
|
||
/** | ||
* @category Zend | ||
* @package Zend_Json | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
class Client implements ClientInterface | ||
{ | ||
/** | ||
* Full address of the JSON-RPC service. | ||
* | ||
* @var string | ||
*/ | ||
protected $serverAddress; | ||
|
||
/** | ||
* HTTP Client to use for requests. | ||
* | ||
* @var \Zend\Http\Client | ||
*/ | ||
protected $httpClient; | ||
|
||
/** | ||
* Request of the last method call. | ||
* | ||
* @var \Zend\Json\Server\Request | ||
*/ | ||
protected $lastRequest; | ||
|
||
/** | ||
* Response received from the last method call. | ||
* | ||
* @var \Zend\Json\Server\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 \Zend\Http\Client $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 \Zend\Http\Client $httpClient New HTTP client to use. | ||
* @return \Zend\Json\Server\Client Self instance. | ||
*/ | ||
public function setHttpClient(HttpClient $httpClient) | ||
{ | ||
$this->httpClient = $httpClient; | ||
|
||
return $this; | ||
} | ||
|
||
/** | ||
* Gets the HTTP client object. | ||
* | ||
* @return \Zend\Http\Client HTTP client. | ||
*/ | ||
public function getHttpClient() | ||
{ | ||
return $this->httpClient; | ||
} | ||
|
||
/** | ||
* The request of the last method call. | ||
* | ||
* @return \Zend\Json\Server\Request Request instance. | ||
*/ | ||
public function getLastRequest() | ||
{ | ||
return $this->lastRequest; | ||
} | ||
|
||
/** | ||
* The response received from the last method call. | ||
* | ||
* @return \Zend\Json\Server\Response Response instance. | ||
*/ | ||
public function getLastResponse() | ||
{ | ||
return $this->lastResponse; | ||
} | ||
|
||
/** | ||
* Perform an JSOC-RPC request and return a response. | ||
* | ||
* @param \Zend\Json\Server\Request $request Request. | ||
* @return \Zend\Json\Server\Response Response. | ||
* @throws \Zend\Json\Server\Exception\HttpException When HTTP communication fails. | ||
*/ | ||
public function doRequest($request) | ||
{ | ||
$this->lastRequest = $request; | ||
|
||
$httpRequest = $this->httpClient->getRequest(); | ||
if ($httpRequest->getUri() === null) { | ||
$this->httpClient->setUri($this->serverAddress); | ||
} | ||
|
||
$headers = $httpRequest->headers(); | ||
$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()); | ||
$httpResponse = $this->httpClient->setMethod('POST')->send(); | ||
|
||
if (!$httpResponse->isSuccess()) { | ||
throw new Exception\HttpException( | ||
$httpResponse->getReasonPhrase(), | ||
$httpResponse->getStatusCode() | ||
); | ||
} | ||
|
||
$response = new Response(); | ||
|
||
$this->lastResponse = $response; | ||
|
||
// import all response data form JSON HTTP response | ||
$response->loadJson($httpResponse->getBody()); | ||
|
||
return $response; | ||
} | ||
|
||
/** | ||
* Send an 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 \Zend\Json\Server\Exception\ErrorExceptionn 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 \Zend\Json\Server\Request Created request. | ||
*/ | ||
protected function createRequest($method, array $params) | ||
{ | ||
$request = new Request(); | ||
$request->setMethod($method) | ||
->setParams($params) | ||
->setId(++$this->id); | ||
return $request; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<?php | ||
/** | ||
* Zend Framework | ||
* | ||
* LICENSE | ||
* | ||
* This source file is subject to the new BSD license that is bundled | ||
* with this package in the file LICENSE.txt. | ||
* It is also available through the world-wide-web at this URL: | ||
* http://framework.zend.com/license/new-bsd | ||
* If you did not receive a copy of the license and are unable to | ||
* obtain it through the world-wide-web, please send an email | ||
* to license@zend.com so we can send you a copy immediately. | ||
* | ||
* @category Zend | ||
* @package Zend_Json | ||
* @subpackage Server | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
|
||
/** | ||
* @namespace | ||
*/ | ||
namespace Zend\Json\Server\Exception; | ||
|
||
/** | ||
* Thrown by Zend\Json\Server\Client when an JSON-RPC fault response is returned. | ||
* | ||
* @uses Zend\Json\Server\Exception | ||
* @category Zend | ||
* @package Zend_Json | ||
* @subpackage Server | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
class ErrorException | ||
extends \BadMethodCallException | ||
implements \Zend\Json\Server\Exception | ||
{} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<?php | ||
/** | ||
* Zend Framework | ||
* | ||
* LICENSE | ||
* | ||
* This source file is subject to the new BSD license that is bundled | ||
* with this package in the file LICENSE.txt. | ||
* It is also available through the world-wide-web at this URL: | ||
* http://framework.zend.com/license/new-bsd | ||
* If you did not receive a copy of the license and are unable to | ||
* obtain it through the world-wide-web, please send an email | ||
* to license@zend.com so we can send you a copy immediately. | ||
* | ||
* @category Zend | ||
* @package Zend_Json | ||
* @subpackage Server | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
|
||
/** | ||
* @namespace | ||
*/ | ||
namespace Zend\Json\Server\Exception; | ||
|
||
/** | ||
* Thrown by Zend_Json_Server_Client when an HTTP error occurs during an | ||
* JSON-RPC method call. | ||
* | ||
* @uses Zend\Json\Server\Exception | ||
* @category Zend | ||
* @package Zend_Json | ||
* @subpackage Server | ||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) | ||
* @license http://framework.zend.com/license/new-bsd New BSD License | ||
*/ | ||
class HttpException | ||
extends RuntimeException | ||
{} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.