Exemple #1
0
 /**
  * client包格式: writeString(json_encode(array("a"='main/main',"m"=>'main', 'k1'=>'v1')));
  * server包格式:包总长+数据(json_encode)
  * @param $_data
  * @return bool
  */
 public function parse($_data)
 {
     $ctrlName = Config::getField('project', 'default_ctrl_name', 'main\\main');
     $methodName = Config::getField('project', 'default_method_name', 'main');
     $fd = Request::getFd();
     if (!empty($this->_buffer[$fd])) {
         $_data = $this->_buffer . $_data;
     }
     $packData = new MessagePacker($_data);
     $packLen = $packData->readInt();
     $dataLen = \strlen($_data);
     if ($packLen > $dataLen) {
         $this->_buffer[$fd] = $_data;
         return false;
     } elseif ($packLen < $dataLen) {
         $this->_buffer[$fd] = \substr($_data, $packLen, $dataLen - $packLen);
     } else {
         if (!empty($this->_buffer[$fd])) {
             unset($this->_buffer[$fd]);
         }
     }
     $packData->resetOffset();
     $params = $packData->readString();
     $data = \json_decode($params, true);
     $apn = Config::getField('project', 'ctrl_name', 'a');
     $mpn = Config::getField('project', 'method_name', 'm');
     if (isset($params[$apn])) {
         $ctrlName = \str_replace('/', '\\', $params[$apn]);
     }
     if (isset($params[$mpn])) {
         $methodName = $params[$mpn];
     }
     Request::init($ctrlName, $methodName, $data, Config::getField('project', 'view_mode', 'Zpack'));
     return true;
 }
Exemple #2
0
 public function display()
 {
     if (Config::get('server_mode') == 'Http') {
         \header("Content-Type: application/zpack; charset=utf-8");
     }
     $pack = new MessagePacker();
     $pack->writeString(json_encode($this->model));
     echo $pack->getData();
 }
Exemple #3
0
 public function display()
 {
     $pack = new MessagePacker();
     $pack->writeString(json_encode($this->model));
     if (Config::get('server_mode') == 'Http') {
         Utils::header("Content-Type", "application/zpack; charset=utf-8");
         echo $pack->getData();
     } else {
         return array($this->model, $pack->getData);
     }
 }
Exemple #4
0
 public function display()
 {
     $pack = new MessagePacker();
     $pack->writeString(json_encode($this->model));
     if (Request::isHttp()) {
         Response::header("Content-Type", "application/zpack; charset=utf-8");
     }
     if (Request::isLongServer()) {
         return array($this->model, $pack->getData());
     }
     echo $pack->getData();
     return null;
 }
Exemple #5
0
 public function display()
 {
     $jsonData = \json_encode($this->model);
     $data = gzencode($jsonData);
     $pack = new MessagePacker();
     $len = strlen($data);
     $pack->writeInt($len + 16);
     $pack->writeInt($this->model['cmd']);
     $pack->writeInt($this->model['rid']);
     $pack->writeString($data, $len);
     if (Config::get('server_mode') == 'Http') {
         Utils::header("Content-Type", "application/zrpack; charset=utf-8");
         echo $pack->getData();
     } else {
         return array($jsonData, $pack->getData());
     }
 }
Exemple #6
0
 public function display()
 {
     $jsonData = \json_encode($this->model);
     $data = gzencode($jsonData);
     $pack = new MessagePacker();
     $len = strlen($data);
     $pack->writeInt($len + 16);
     $pack->writeInt($this->model['cmd']);
     $pack->writeInt($this->model['rid']);
     $pack->writeString($data, $len);
     if (Request::isHttp()) {
         Response::header("Content-Type", "application/zrpack; charset=utf-8");
     }
     if (Request::isLongServer()) {
         return array($jsonData, $pack->getData());
     }
     echo $pack->getData();
     return null;
 }
Exemple #7
0
 /**
  * 包格式: 包总长+命令id+请求id+数据
  * 
  * @param $_data
  * @return bool
  */
 public function parse($_data)
 {
     $ctrlName = Config::getField('project', 'default_ctrl_name', 'main\\main');
     $methodName = Config::getField('project', 'default_method_name', 'main');
     if (empty($this->_cache)) {
         $this->_cache = ZCache::getInstance('Php');
     }
     $fd = Request::getFd();
     $cacheData = $this->_cache->get($fd);
     if (!empty($cacheData)) {
         $_data = $cacheData . $_data;
         $this->_cache->delete($fd);
     }
     if (empty($_data)) {
         return false;
     }
     $packData = new MessagePacker($_data);
     $packLen = $packData->readInt();
     $dataLen = \strlen($_data);
     if ($packLen > $dataLen) {
         $this->_cache->set($fd, $_data);
         return false;
     } elseif ($packLen < $dataLen) {
         $this->_cache->set($fd, \substr($_data, $packLen, $dataLen - $packLen));
     }
     $packData->resetOffset(4);
     $data = [];
     $data['_cmd'] = $packData->readInt();
     $pathinfo = Config::getField('cmdlist', $data['_cmd']);
     $data['_rid'] = $packData->readInt();
     $params = $packData->readString();
     $unpackData = \json_decode(gzdecode($params), true);
     if (!empty($unpackData) && \is_array($unpackData)) {
         $data += $unpackData;
     }
     $routeMap = ZRoute::match(Config::get('route', false), $pathinfo);
     if (is_array($routeMap)) {
         $ctrlName = $routeMap[0];
         $methodName = $routeMap[1];
         if (!empty($routeMap[2]) && is_array($routeMap[2])) {
             //参数优先
             $data = $data + $routeMap[2];
         }
     }
     Request::init($ctrlName, $methodName, $data);
     return true;
 }
Exemple #8
0
 public function display()
 {
     if (Config::get('server_mode') == 'Http') {
         \header("Content-Type: application/zrpack; charset=utf-8");
     }
     $cmd = $this->model['cmd'];
     unset($this->model['cmd']);
     $rid = $this->model['rid'];
     unset($this->model['rid']);
     $data = gzencode(\json_encode($this->model));
     $pack = new MessagePacker();
     $len = strlen($data);
     $pack->writeInt($len + 16);
     $pack->writeInt($cmd);
     $pack->writeInt($rid);
     $pack->writeString($data, $len);
     echo $pack->getData();
 }
 public function getData()
 {
     $data = \json_encode($this->_data);
     $pack = new MessagePacker();
     $pack->writeString($data);
     $data = $pack->getData();
     $this->_data = null;
     return $data;
 }
Exemple #10
0
 public function getData()
 {
     if (Config::get('server_mode') == 'Http') {
         ZPHP\Common\Utils::header("Content-Type", "application/zrpack; charset=utf-8");
     }
     $data = $this->_data;
     unset($data['cmd'], $data['fd']);
     $data = gzencode(\json_encode($data));
     $pack = new MessagePacker();
     $len = strlen($data);
     $pack->writeInt($len + 16);
     $pack->writeInt($this->_cmd);
     $pack->writeInt($this->_rid);
     $pack->writeString($data, $len);
     $data = $pack->getData();
     $this->_data = null;
     $this->_cmd = null;
     return $data;
 }