zoukankan      html  css  js  c++  java
  • JosnRpcClient

    <?php

    /**
    * Simple JSON-RPC interface.
    */
    namespace org;

    class JosnRpcClient
    {
    protected $host;
    protected $port;
    protected $version;
    protected $debug;
    protected $id = 0;

    /**
    * 初始化数据
    * @param $host 主机IP
    * @param $port 端口
    * @param $debug debug模式(true or false)
    * @param $version jsonrpc 版本号
    * @param bool $debug
    */
    public function __construct($host, $port, $debug = false, $version = "2.0")
    {
    $this->host = $host;
    $this->port = $port;
    $this->version = $version;
    $this->debug = $debug;
    }

    /**
    * 请求核心方法
    * @param $method 回调方法名
    * @param $params 参数数组
    * @return array 返回结果数组
    */
    public function request($method, $params=array())
    {
    // 检验request信息
    if (!is_scalar($method)) {
    throw new hinkException('Method name has no scalar value');
    }
    if (is_array($params)) {
    $params = array_values($params);
    } else {
    throw new hinkException('Params must be given as array');
    }

    // 封装请求数据
    $request = json_encode(array(
    'jsonrpc' => $this->version,
    'method' => $method,
    'params' => $params,
    'id' => $this->id++
    ));

    // 是否是debug模式
    $this->debug && $this->debug.='***** Request *****'." ".$request." ".'***** End Of request *****'." ";

    // curl请求
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->host);
    curl_setopt($ch, CURLOPT_PORT, $this->port);
    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);

    $ret = curl_exec($ch);

    // 输出调试信息
    if ($this->debug) {
    echo nl2br(($this->debug));
    }

    if ($ret !== false) {
    $response = json_decode($ret);

    if (isset($response->error)) {
    //throw new RPCException($formatted->error->message, $formatted->error->code);
    throw new hinkException('Request error: '.$response->error);
    } else {
    return $response;
    }
    } else {
    throw new hinkException("Server did not respond: ".$this->host.':'.$this->port);
    }
    }
    }
  • 相关阅读:
    HGOI 20200724
    HGOI 20200722
    [USACO Open08]牛的邻居Cow Neighborhoods解题报告
    [USACO Jan07]考试Schul解题报告
    [CF 249D]Donkey and Start解题报告
    [CF 321D]Ciel and Flipboard解题报告
    [CF 294D]Shaass and Painter Robot解题报告
    [CF 297E]Mystic Carvings解题报告
    [CF 306E]Levko and Game题解翻译
    [CF 316F3]Suns and Rays解题报告
  • 原文地址:https://www.cnblogs.com/wzjwffg/p/11277451.html
Copyright © 2011-2022 走看看