public function display() { if (Config::get('server_mode') == 'Http') { \header("Content-Type: application/json; charset=utf-8"); } echo \json_encode($this->model); }
/** * 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 static function start($sessionType = '', $config = '') { if (false === self::$isStart) { if (empty($config)) { $config = ZConfig::get('session'); } if (!empty($config['adapter'])) { $sessionType = $config['adapter']; } $lifetime = 0; if (!empty($config['cache_expire'])) { \session_cache_expire($config['cache_expire']); $lifetime = $config['cache_expire'] * 60; } $path = empty($config['path']) ? '/' : $config['path']; $domain = empty($config['domain']) ? '' : $config['domain']; $secure = empty($config['secure']) ? false : $config['secure']; $httponly = empty($config['httponly']) ? true : $config['httponly']; \session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly); $sessionName = empty($config['session_name']) ? 'ZPHPSESSID' : $config['session_name']; \session_name($sessionName); if (!empty($_GET[$sessionName])) { \session_id($_GET[$sessionName]); } elseif (!empty($_SERVER[$sessionName])) { \session_id($_SERVER[$sessionName]); } if (!empty($sessionType)) { $handler = self::getInstance($sessionType, $config); \session_set_save_handler(array($handler, 'open'), array($handler, 'close'), array($handler, 'read'), array($handler, 'write'), array($handler, 'destroy'), array($handler, 'gc')); } \session_start(); self::$isStart = true; } }
public static function route($server) { $action = Config::get('ctrl_path', 'ctrl') . '\\' . $server->getCtrl(); $class = Factory::getInstance($action); if (!$class instanceof IController) { throw new \Exception("ctrl error"); } $class->setServer($server); $before = $class->_before(); $view = $exception = null; if ($before) { try { $method = $server->getMethod(); if (\method_exists($class, $method)) { $view = $class->{$method}(); } else { throw new \Exception("no method {$method}"); } } catch (\Exception $e) { $exception = $e; } } $class->_after(); if ($exception !== null) { throw $exception; } if (null === $view) { return; } return $server->display($view); }
public function display($model) { ($viewMode = $this->_view_mode) || ($viewMode = Config::getField('project', 'view_mode', '')); if (is_array($model) && !empty($model['_view_mode'])) { $viewMode = $model['_view_mode']; unset($model['_view_mode']); } $this->_view_mode = ''; if (empty($viewMode)) { if (ZUtils::isAjax()) { $viewMode = 'Json'; } else { $viewMode = 'Php'; } } $view = View\Factory::getInstance($viewMode); if ('Php' === $viewMode) { if (is_array($model) && !empty($model['_tpl_file'])) { $view->setTpl($model['_tpl_file']); unset($model['_tpl_file']); } else { if (!empty($this->_tpl_file)) { $view->setTpl($this->_tpl_file); $this->_tpl_file = null; } else { throw new \Exception("tpl file empty"); } } } $view->setModel($model); return $view->display(); }
/** * 直接 parse $_REQUEST * @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'); $apn = Config::getField('project', 'ctrl_name', 'a'); $mpn = Config::getField('project', 'method_name', 'm'); if (isset($data[$apn])) { $ctrlName = \str_replace('/', '\\', $data[$apn]); } if (isset($data[$mpn])) { $methodName = $data[$mpn]; } if (!empty($_SERVER['PATH_INFO'])) { //swoole_http模式 需要在onRequest里,设置一下 $_SERVER['PATH_INFO'] = $request->server['path_info'] $routeMap = ZRoute::match(Config::get('route', false), $_SERVER['PATH_INFO']); if (is_array($routeMap)) { $ctrlName = \str_replace('/', '\\', $routeMap[0]); $methodName = $routeMap[1]; if (!empty($routeMap[2]) && is_array($routeMap[2])) { //参数优先 $data = $data + $routeMap[2]; } } } Request::init($ctrlName, $methodName, $data, Config::getField('project', 'view_mode', 'Php')); return true; }
/** * Send print to terminal. */ private static function _log($msgType, $args) { if (!Config::getField('project', 'debug_mode', 0)) { return; } if (count($args) == 1) { $msg = is_scalar($args[0]) ? $args[0] : self::dump($args[0]); } else { $msg = self::dump($args); } if (self::$DEBUG_TRACE) { $trace = self::getTrace(); } else { $trace = array(); } if ($msgType == 'debug') { Terminal::drawStr($msg, 'magenta'); } else { if ($msgType == 'error') { Terminal::drawStr($msg, 'red'); } else { if ($msgType == 'info') { Terminal::drawStr($msg, 'brown'); } else { Terminal::drawStr($msg, 'default'); } } } //echo "\n"; !empty($trace) && Terminal::drawStr("\t" . implode(" <-- ", $trace) . "\n"); }
public function run($data, $fd = null) { if ($this->_rpc === null) { $this->_rpc = new \Yar_Client(ZConfig::getField('socket', 'rpc_host')); } return $this->_rpc->api($data); }
public function run($data, $fd = null) { if ($this->_client === null) { $this->_client = new Fcgi\Client(ZConfig::getField('socket', 'fcgi_host', '127.0.0.1'), ZConfig::getField('socket', 'fcgi_port', 9000)); } return $this->_client->request($data); }
public function run($data, $fd = null) { $server = Protocol\Factory::getInstance(Core\Config::getField('socket', 'protocol', 'Http')); $server->setFd($fd); $server->parse($data); return Core\Route::route($server); }
public static function route($server) { $ctrl = $server->getCtrl(); $action = Config::get('ctrl_path', 'ctrl') . '\\' . $ctrl; $class = Factory::getInstance($action); if (!$class instanceof IController) { throw new \Exception("ctrl error"); } $class->setServer($server); $before = $class->_before(); $exception = null; if ($before) { try { $method = $server->getMethod(); if (\method_exists($class, $method)) { $class->{$method}(); } else { throw new \Exception("no method {$method}"); } } catch (\Exception $e) { $exception = $e; } } $class->_after(); if ($exception !== null) { $exception->e_no = $exception->getCode() < 0 ? 0 : $exception->getCode(); $exception->e_msg = $exception->getMessage(); $exception->e_data = $class->data; throw $exception; } //正确返回 $result = array('e_no' => $class->e_no, 'e_msg' => '', 'api' => $ctrl, 'data' => $class->data); return $server->display($result); }
public function display() { if (Config::get('server_mode') == 'Http') { \header("Content-Type:text/xml; charset=utf-8"); } echo $this->xmlEncode(); }
public function main() { // $this->params = array( // 'a' => "user\\login", // 'p' => array( // 'uid' => 1, // 'params' => array(), // ), // ); if (!$this->uid) { throw new common\error('错误的用户登陆'); } $uInfo = $this->userModel->getUserById($this->uid); if (!$uInfo) { $initUserConfig = ZConfig::getField('init', 'user'); $d = array('id' => $this->uid, 'coin' => $initUserConfig['coin'], 'created' => time()); $this->userModel->addUser($d); } $uConnectInfo = $this->connection->get($this->uid); if (!$uConnectInfo) { $this->connection->add($this->uid, $this->fd); $this->connection->addFd($this->fd, $this->uid); } else { common\connection::close($uConnectInfo['fd']); $this->connection->add($this->uid, $this->fd); $this->connection->addFd($this->fd, $this->uid); } // common\connection::sendOne($this->fd,'login', 'test send one'); // common\connection::sendToChannel('login', 'test send all'); $this->data = array('global' => array('serverTime' => time(), 'nextRoundTime' => common\game::getNextRunTime(), 'currentRound' => common\game::getRuncount()), 'positionList' => common\game::getPositionList(), 'user' => $uInfo ? $uInfo : $d, 'map' => ZConfig::get('map'), 'item' => ZConfig::get('item')); }
public function offline() { // echo 'offline start'.PHP_EOL; ZCache::getInstance('Redis', ZConfig::getField('cache', 'net'))->delete($this->params['fd']); $this->boardcast(['cmd' => 'offline', 'fd' => $this->params['fd'], 'from' => 0, 'channal' => 0], false); // echo 'offline end'.PHP_EOL; }
public static function route() { $action = Config::get('ctrl_path', 'ctrl') . '\\' . Request::getCtrl(); $view = null; try { $class = Factory::getInstance($action); if (!$class instanceof IController) { throw new \Exception("ctrl error"); } else { $class->_before(); $method = Request::getMethod(); if (!method_exists($class, $method)) { throw new \Exception("method error"); } $view = $class->{$method}(); $class->_after(); if (null === $view) { return null; } return Response::display($view); } } catch (\Exception $e) { if (Request::isLongServer()) { return \call_user_func(Config::getField('project', 'exception_handler', 'ZPHP\\ZPHP::exceptionHandler'), $e); } throw $e; } }
public static function getRankCache() { if (empty(self::$rankCache)) { $config = ZConfig::getField('cache', 'net'); self::$rankCache = ZRank::getInstance($config['adapter'], $config); } return self::$rankCache; }
public static function getConnection() { if (empty(self::$connection)) { $config = ZConfig::get('connection'); self::$connection = CFactory::getInstance($config['adapter'], $config); } return self::$connection; }
public function _before() { $ehConfig = ZConfig::getField('project', 'exception_handler'); if (!empty($ehConfig)) { \set_exception_handler($ehConfig); } return true; }
public function main() { // $this->params = array( // 'a' => "user\\ante", // 'p' => array( // 'uid' => 1, // 'params' => array( // 'ante' => 'apple', // 'type' => 1 //1:1 2:100 // ), // ), // ); $this->checkLogin(); // $nextRunTime = common\game::getNextRunTime(); if (time() > $nextRunTime) { throw new common\error('非法押注.'); } $anteName = $this->params['ante']; if (isset($this->params['type'])) { $anteType = intval($this->params['type']); if ($anteType == 1) { $anteRate = 1; } elseif ($anteType == 2) { $anteRate = 100; } else { $anteRate = ZConfig::getField('init', 'anteRate'); } } else { $anteRate = ZConfig::getField('init', 'anteRate'); } $currentGamecount = common\game::getRuncount(); //check coin $userInfo = $this->userModel->getUserById($this->uid); $leftCoin = $userInfo['coin'] - $anteRate; if ($leftCoin < 0) { throw new common\error('押注不够.'); } // $this->userModel->updUserById($this->uid, array('coin' => $leftCoin)); $returnDate = 0; if (!($userAnte = $this->useranteModel->getAnteByUidGamecount($this->uid, $currentGamecount))) { $_d = array('uid' => $this->uid, $anteName => $anteRate, 'gameCount' => $currentGamecount, 'created' => time()); $this->useranteModel->addAnte($_d); $returnDate = $anteRate; } else { $val = $userAnte[$anteName] + $anteRate; if ($val > 999) { throw new common\error('最大押注为999.'); } //update $_d = array($anteName => $val); $this->useranteModel->updAnteById($userAnte['id'], $_d, $userAnte); $returnDate = $_d[$anteName]; } $this->userModel->updUserById($this->uid, array('coin' => $leftCoin)); $this->data = array($anteName => $returnDate, 'coin' => $leftCoin); common\game::sendCurrentAnte(); }
public function display() { if (Config::get('server_mode') == 'Http') { Utils::header("Content-Type", "text/xml; charset=utf-8"); echo $this->xmlEncode(); return null; } return $this->xmlEncode(); }
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() { if (Config::get('server_mode') == 'Http') { Utils::header('Content-Type', 'application/amf; charset=utf-8'); echo \amf3_encode($this->model); } else { return \amf3_encode($this->model); } }
public function sendMaster(array $_params = null) { if (!empty($_params)) { $this->_data = $this->_data + $_params; } $host = Config::getField('socket', 'host'); $port = Config::getField('socket', 'port'); $client = new ZSClient($host, $port); $client->send($this->getData()); }
public function display() { if (Config::get('server_mode') == 'Http') { \header("Content-Type: text/plain; charset=utf-8"); } if (\is_string($this->model)) { echo $this->model; } else { print_r($this->model, true); } }
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 static function getInstance($adapter = 'Redis', $config = null) { if (empty($config)) { $config = ZConfig::get('rank'); if (!empty($config['adapter'])) { $adapter = $config['adapter']; } } $className = __NAMESPACE__ . "\\Adapter\\{$adapter}"; return CFactory::getInstance($className, $config); }
public function useDb() { if (empty($this->_db)) { $config = ZConfig::get('pdo'); $this->_db = new ZPdo($config, $this->entity, $config['dbname']); $this->_db->setClassName($this->entity); } else { $this->_db->checkPing(); } return $this->_db; }
public function run() { $config = Config::get('socket'); if (empty($config)) { throw new \Exception("socket config empty"); } $socket = SFactory::getInstance($config['adapter'], $config); $client = CFactory::getInstance($config['client_class']); $socket->setClient($client); $socket->run(); }
public function onWorkerStart($server, $workerId) { if ($workerId >= ZConfig::getField('socket', 'worker_num')) { swoole_set_process_name(ZConfig::get('project_name') . " server task num: {$server->worker_id} pid " . $server->worker_pid); } else { swoole_set_process_name(ZConfig::get('project_name') . " server worker num: {$server->worker_id} pid " . $server->worker_pid); } if (function_exists('opcache_reset')) { opcache_reset(); } }
public function display() { $tplPath = ZPHP\Core\Config::getField('project', 'tpl_path', 'template' . DS . 'template'); $fileName = ZPHP\ZPHP::getRootPath() . DS . $tplPath . DS . $this->tplFile; if (!\is_file($fileName)) { throw new \Exception("no file {$fileName}"); } if (!empty($this->model)) { \extract($this->model); } include "{$fileName}"; }