/** * 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; }
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(); }
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); } }
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; }
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()); } }
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; }
/** * 包格式: 包总长+命令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; }
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; }
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; }