Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * The object of this class are generic jsonRPC 1.0 clients
- * http://json-rpc.org/wiki/specification
- *
- * @author sergio <jsonrpcphp@inservibile.org>
- */
- class jsonRPCClient {
- /**
- * Debug state
- *
- * @var boolean
- */
- private $debug;
- /**
- * The server URL
- *
- * @var string
- */
- private $url;
- /**
- * The request id
- *
- * @var integer
- */
- private $id;
- /**
- * If true, notifications are performed instead of requests
- *
- * @var boolean
- */
- private $notification = false;
- /**
- * Takes the connection parameters
- *
- * @param string $url
- * @param boolean $debug
- */
- public function __construct($url,$debug = false) {
- // server URL
- $this->url = $url;
- // proxy
- empty($proxy) ? $this->proxy = '' : $this->proxy = $proxy;
- // debug state
- empty($debug) ? $this->debug = false : $this->debug = true;
- // message id
- $this->id = 1;
- }
- /**
- * Sets the notification state of the object. In this state, notifications are performed, instead of requests.
- *
- * @param boolean $notification
- */
- public function setRPCNotification($notification) {
- empty($notification) ?
- $this->notification = false
- :
- $this->notification = true;
- }
- /**
- * Performs a jsonRCP request and gets the results as an array
- *
- * @param string $method
- * @param array $params
- * @return array
- */
- public function __call($method,$params) {
- // check
- if (!is_scalar($method)) {
- throw new Exception('Method name has no scalar value');
- }
- // check
- if (is_array($params)) {
- // no keys
- $params = array_values($params);
- } else {
- throw new Exception('Params must be given as array');
- }
- // sets notification or request task
- if ($this->notification) {
- $currentId = NULL;
- } else {
- $currentId = $this->id;
- }
- // prepares the request
- $request = array(
- 'method' => $method,
- 'params' => $params,
- 'id' => $currentId
- );
- $request = json_encode($request);
- $this->debug && $this->debug.='***** Request *****'."\n".$request."\n".'***** End Of request *****'."\n\n";
- // performs the HTTP POST
- $ch = curl_init($this->url);
- curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
- $response = json_decode(curl_exec($ch),true);
- curl_close($ch);
- // debug output
- if ($this->debug) {
- echo nl2br($debug);
- }
- // final checks and return
- if (!$this->notification) {
- // check
- if ($response['id'] != $currentId) {
- throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')');
- }
- if (!is_null($response['error'])) {
- throw new Exception('Request error: '.$response['error']);
- }
- return $response['result'];
- } else {
- return true;
- }
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement