<?php 
 | 
/** 
 | 
 * 远程接口连接器 Task_Runner_Remote_Connector 
 | 
 *  
 | 
 * @author dogstar <chanzonghuang@gmail.com> 20150516 
 | 
 */ 
 | 
  
 | 
abstract class Task_Runner_Remote_Connector { 
 | 
  
 | 
    protected $host; 
 | 
  
 | 
    protected $params = array(); 
 | 
  
 | 
    protected $moreParams = array(); 
 | 
  
 | 
    protected $url; 
 | 
    protected $ret; 
 | 
    protected $msg; 
 | 
    protected $data = array(); 
 | 
  
 | 
    public function __construct($config) { 
 | 
        $this->host = $config['host']; 
 | 
        $this->moreParams = isset($config['params']) ? $config['params'] : array(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 接口请求,超时时ret为404 
 | 
     * @param string $service MQ中的接口服务名称,如:Default.Index 
 | 
     * @param array $params 参数 
 | 
     * @param int $timeoutMS 接口超时(单位:毫秒) 
 | 
     * @return array 
 | 
     */ 
 | 
    public function request($service, $params = array(), $timeoutMs = 3000) { 
 | 
        $this->url = $this->host . '?service=' . $service; 
 | 
        $params = array_merge($this->moreParams, $params); 
 | 
  
 | 
        $apiRs = $this->doRequest($this->url, $params, $timeoutMs); 
 | 
  
 | 
        if ($apiRs === FALSE) { 
 | 
            $this->ret = 404; 
 | 
            $this->msg = T('time out'); 
 | 
  
 | 
            DI()->logger->debug('task request api time out', array('url' => $this->url)); 
 | 
  
 | 
            return $this->getData(); 
 | 
        } 
 | 
  
 | 
        $rs = json_decode($apiRs, true); 
 | 
  
 | 
        if (empty($rs) || !isset($rs['ret'])) { 
 | 
            $this->ret = 500; 
 | 
            $this->msg = T('nothing return or illegal json: {rs}', array('rs' => $apiRs)); 
 | 
            return $this->getData(); 
 | 
        } 
 | 
  
 | 
        $this->ret = $rs['ret']; 
 | 
        $this->data = $rs['data']; 
 | 
        $this->msg = $rs['msg']; 
 | 
  
 | 
        return $this->getData(); 
 | 
    } 
 | 
  
 | 
    public function getRet() { 
 | 
        return $this->ret; 
 | 
    } 
 | 
  
 | 
    public function getData() { 
 | 
        return $this->data; 
 | 
    } 
 | 
  
 | 
    public function getMsg() { 
 | 
        return $this->msg; 
 | 
    } 
 | 
  
 | 
    public function getUrl() { 
 | 
        return $this->url; 
 | 
    } 
 | 
  
 | 
    abstract protected function doRequest($url, $data, $timeoutMs); 
 | 
} 
 |