| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							- <?php
 
- /**********************************************************\
 
- |                                                          |
 
- |                          hprose                          |
 
- |                                                          |
 
- | Official WebSite: http://www.hprose.com/                 |
 
- |                   http://www.hprose.net/                 |
 
- |                   http://www.hprose.org/                 |
 
- |                                                          |
 
- \**********************************************************/
 
- /**********************************************************\
 
-  *                                                        *
 
-  * HproseClient.php                                       *
 
-  *                                                        *
 
-  * hprose client library for php5.                        *
 
-  *                                                        *
 
-  * LastModified: Nov 13, 2013                             *
 
-  * Author: Ma Bingyao <andot@hprfc.com>                   *
 
-  *                                                        *
 
- \**********************************************************/
 
- require_once('HproseCommon.php');
 
- require_once('HproseIO.php');
 
- abstract class HproseClient {
 
-     protected $url;
 
-     private $filter;
 
-     private $simple;
 
-     protected abstract function send($request);
 
-     public function __construct($url = '') {
 
-         $this->useService($url);
 
-         $this->filter = NULL;
 
-         $this->simple = false;
 
-     }
 
-     public function useService($url = '', $namespace = '') {
 
-         if ($url) {
 
-             $this->url = $url;
 
-         }
 
-         return new HproseProxy($this, $namespace);
 
-     }
 
-     public function invoke($functionName, &$arguments = array(), $byRef = false, $resultMode = HproseResultMode::Normal, $simple = NULL) {
 
-         if ($simple === NULL) $simple = $this->simple;
 
-         $stream = new HproseStringStream(HproseTags::TagCall);
 
-         $hproseWriter = ($simple ? new HproseSimpleWriter($stream) : new HproseWriter($stream));
 
-         $hproseWriter->writeString($functionName);
 
-         if (count($arguments) > 0 || $byRef) {
 
-             $hproseWriter->reset();
 
-             $hproseWriter->writeList($arguments);
 
-             if ($byRef) {
 
-                 $hproseWriter->writeBoolean(true);
 
-             }
 
-         }
 
-         $stream->write(HproseTags::TagEnd);
 
-         $request = $stream->toString();
 
-         if ($this->filter) $request = $this->filter->outputFilter($request);
 
-         $stream->close();
 
-         $response = $this->send($request);
 
-         if ($this->filter) $response = $this->filter->inputFilter($response);
 
-         if ($resultMode == HproseResultMode::RawWithEndTag) {
 
-             return $response;
 
-         }
 
-         if ($resultMode == HproseResultMode::Raw) {
 
-             return substr($response, 0, -1);
 
-         }
 
-         $stream = new HproseStringStream($response);
 
-         $hproseReader = new HproseReader($stream);
 
-         $result = NULL;
 
-         while (($tag = $hproseReader->checkTags(
 
-             array(HproseTags::TagResult,
 
-                   HproseTags::TagArgument,
 
-                   HproseTags::TagError,
 
-                   HproseTags::TagEnd))) !== HproseTags::TagEnd) {
 
-             switch ($tag) {
 
-                 case HproseTags::TagResult:
 
-                     if ($resultMode == HproseResultMode::Serialized) {
 
-                         $result = $hproseReader->readRaw()->toString();
 
-                     }
 
-                     else {
 
-                         $hproseReader->reset();
 
-                         $result = &$hproseReader->unserialize();
 
-                     }
 
-                     break;
 
-                 case HproseTags::TagArgument:
 
-                     $hproseReader->reset();
 
-                     $args = &$hproseReader->readList(true);
 
-                     for ($i = 0; $i < count($arguments); $i++) {
 
-                         $arguments[$i] = &$args[$i];
 
-                     }
 
-                     break;
 
-                 case HproseTags::TagError:
 
-                     $hproseReader->reset();
 
-                     throw new HproseException($hproseReader->readString(true));
 
-                     break;
 
-             }
 
-         }
 
-         return $result;
 
-     }
 
-     public function getFilter() {
 
-         return $this->filter;
 
-     }
 
-     public function setFilter($filter) {
 
-         $this->filter = $filter;
 
-     }
 
-     public function getSimpleMode() {
 
-         return $this->simple;
 
-     }
 
-     public function setSimpleMode($simple = true) {
 
-         $this->simple = $simple;
 
-     }
 
-     public function __call($function, $arguments) {
 
-         return $this->invoke($function, $arguments);
 
-     }
 
-     public function __get($name) {
 
-         return new HproseProxy($this, $name . '_');
 
-     }
 
- }
 
- class HproseProxy {
 
-     private $client;
 
-     private $namespace;
 
-     public function __construct($client, $namespace = '') {
 
-         $this->client = $client;
 
-         $this->namespace = $namespace;
 
-     }
 
-     public function __call($function, $arguments) {
 
-         $function = $this->namespace . $function;
 
-         return $this->client->invoke($function, $arguments);
 
-     }
 
-     public function __get($name) {
 
-         return new HproseProxy($this->client, $this->namespace . $name . '_');
 
-     }
 
- }
 
- ?>
 
 
  |