示例#1
0
文件: Json.php 项目: xifat/zphp
 public function display()
 {
     if (Config::get('server_mode') == 'Http') {
         \header("Content-Type: application/json; charset=utf-8");
     }
     echo \json_encode($this->model);
 }
示例#2
0
文件: Zpack.php 项目: heesey/zphp
 /**
  * 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;
 }
示例#3
0
文件: Factory.php 项目: jixm/zphp
 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;
     }
 }
示例#4
0
 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);
 }
示例#5
0
 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();
 }
示例#6
0
文件: Http.php 项目: heesey/zphp
 /**
  * 直接 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;
 }
示例#7
0
 /**
  * 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");
 }
示例#8
0
文件: RPC.php 项目: xifat/zphp
 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);
 }
示例#9
0
文件: FCGI.php 项目: xifat/zphp
 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);
 }
示例#10
0
文件: ZPHP.php 项目: heesey/zphp
 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);
 }
示例#11
0
 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);
 }
示例#12
0
文件: Xml.php 项目: xifat/zphp
 public function display()
 {
     if (Config::get('server_mode') == 'Http') {
         \header("Content-Type:text/xml; charset=utf-8");
     }
     echo $this->xmlEncode();
 }
示例#13
0
 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'));
 }
示例#14
0
文件: chat.php 项目: jxw7733/zphpdemo
 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;
 }
示例#15
0
 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;
     }
 }
示例#16
0
 public static function getRankCache()
 {
     if (empty(self::$rankCache)) {
         $config = ZConfig::getField('cache', 'net');
         self::$rankCache = ZRank::getInstance($config['adapter'], $config);
     }
     return self::$rankCache;
 }
示例#17
0
 public static function getConnection()
 {
     if (empty(self::$connection)) {
         $config = ZConfig::get('connection');
         self::$connection = CFactory::getInstance($config['adapter'], $config);
     }
     return self::$connection;
 }
示例#18
0
文件: Base.php 项目: ymnl007/zphpdemo
 public function _before()
 {
     $ehConfig = ZConfig::getField('project', 'exception_handler');
     if (!empty($ehConfig)) {
         \set_exception_handler($ehConfig);
     }
     return true;
 }
示例#19
0
 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();
 }
示例#20
0
文件: Xml.php 项目: 446244451/zphp
 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();
 }
示例#21
0
文件: Zpack.php 项目: xifat/zphp
 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();
 }
示例#22
0
文件: Amf.php 项目: 446244451/zphp
 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);
     }
 }
示例#23
0
文件: Json.php 项目: 446244451/zphp
 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());
 }
示例#24
0
文件: String.php 项目: xifat/zphp
 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);
     }
 }
示例#25
0
文件: Zpack.php 项目: 446244451/zphp
 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);
     }
 }
示例#26
0
文件: Factory.php 项目: xifat/zphp
 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);
 }
示例#27
0
文件: Base.php 项目: jxw7733/zphpdemo
 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;
 }
示例#28
0
文件: Socket.php 项目: xifat/zphp
 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();
 }
示例#29
0
文件: Swoole.php 项目: qai41/zphp
 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();
     }
 }
示例#30
0
 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}";
 }