/** * 取得所有游戏类型 */ public function gameAction() { $gameTypes = array(); $user = new ZtChart_Model_User($this->_getParam('uname')); if ($user->isActive() && $user->getTokenring() == $this->_getParam('token')) { $allowedGameTypes = $user->getRole()->getGameTypes(true); // 取趣乐的游戏类型 $qule = new ZtChart_Model_Qule(); foreach ($qule->getGametype() as $gameType) { if (in_array($gameType['game_code'], $allowedGameTypes)) { if (!is_integer($gameType['game_code'])) { $gameType['game_code'] = (int) $gameType['game_code']; } $gameTypes[] = $gameType; } } // 取InfoServer的游戏类型 $infoServerGameTypes = ZtChart_Model_DbTable_Infoserver::getInfoserverGameTypes(); foreach (ZtChart_Model_GameType::getLongNames() as $gameType => $gameName) { if (in_array($gameType, $allowedGameTypes) && in_array($gameType, $infoServerGameTypes) && !ZtChart_Model_GameType::isQule($gameType)) { $gameTypes[] = array('game_code' => $gameType, 'game_name' => $gameName); } } } $this->_helper->json($gameTypes); }
/** * 设置所有游戏的Infoserver数据库适配器 * * @static * @param array $adapters */ public static function setInfoserverAdapters($adapters) { self::$_infoServerAdapters = $adapters; }
/** * 在线人数曲线 */ public function chartAction() { $data = array(); // 当前时间戳 $nowOffsetTimestamp = Zend_Date::now()->subMinute(abs($this->_getParam('offset')))->getTimestamp(); foreach ($this->_getParam('allowedGameTypes') as $gameType) { if (ZtChart_Model_GameType::isQule($gameType)) { // 取Qule游戏的数据 $qule = new ZtChart_Model_Qule(); // 取当前偏移量的数据 $nowData = $qule->getGamedata(array('gametype' => $gameType, 'zoneid' => $this->_getParam('zoneid'), 'loadnumber' => $this->_getParam('range'), 'querydate' => $nowOffsetTimestamp)); if (array_key_exists('data', $nowData) && !empty($nowData['data'])) { foreach ($nowData['data'] as $item) { $data['datetime'][] = $item[0]; $data['data'][0][] = $item[1]; } } // 取同比偏移量的数据 if ($this->_hasParam('pdate')) { foreach (explode(',', $this->_getParam('pdate')) as $pdate) { $sameOffsetTimestamp = ZtChart_Model_Assemble_Datetime::getPredefinedStartTimestamp($pdate, $nowOffsetTimestamp); $sameData = $qule->getGamedata(array('gametype' => $gameType, 'zoneid' => $this->_getParam('zoneid'), 'loadnumber' => $this->_getParam('range'), 'querydate' => $sameOffsetTimestamp)); if (array_key_exists('data', $sameData) && !empty($sameData['data'])) { foreach ($sameData['data'] as $item) { $data['data'][$pdate][] = $item[1]; } } } } } else { // 取InfoServer中的数据 try { if (ZtChart_Model_DbTable_Infoserver::isSingleAdapter($gameType)) { // 游戏只有一个数据库的情况 $infoserver = ZtChart_Model_DbTable_Infoserver::factory($gameType); // 取当前偏移量的数据 $nowOffsetDate = new Zend_Date($nowOffsetTimestamp); $startNowOffsetTimestamp = $nowOffsetDate->subMinute($this->_getParam('range'))->getTimestamp(); for ($i = 0; $i < $this->_getParam('range'); $i++) { $data['datetime'][$i] = $startNowOffsetTimestamp + $i * 60; $data['tmp'][$i] = date('H:i', $data['datetime'][$i]); } foreach ($infoserver->fetchSumGroup($startNowOffsetTimestamp) as $item) { if (in_array(date('H:i', $item[0]), $data['tmp'])) { $data['data'][0][] = $item[1]; } else { $data['data'][0][] = -1; } } $data['data'][0] = array_pad($data['data'][0], $this->_getParam('range'), -1); // 取同比偏移量的数据 if ($this->_hasParam('pdate')) { foreach (explode(',', $this->_getParam('pdate')) as $pdate) { $startSameOffsetTimestamp = ZtChart_Model_Assemble_Datetime::getPredefinedStartTimestamp($pdate, $startNowOffsetTimestamp); $infoserver->setTablename($startSameOffsetTimestamp); foreach ($infoserver->fetchSumGroup($startSameOffsetTimestamp, $this->_getParam('range')) as $item) { if (in_array(date('H:i', $item[0]), $data['tmp'])) { $data['data'][$pdate][] = $item[1]; } else { $data['data'][$pdate][] = -1; } } $data['data'][$pdate] = array_pad($data['data'][$pdate], $this->_getParam('range'), -1); } } unset($data['tmp']); } else { // @todo 游戏含有多个数据库的情况 } } catch (Zend_Db_Exception $e) { ZtChart_Model_Logger::err($e->getMessage()); continue; } } } $this->_helper->json($data); }
/** * 初始化使用Infoserver系列数据库的数据表类 */ protected function _initInfoserver() { $options = $this->bootstrap('multidb')->getResource('multidb')->getOptions(); $ic = new ZtChart_Model_Identification_Config($options['infoserver']['identification']); foreach ($ic->getAllInfoServerDb(true) as $gameType => $entries) { foreach ($entries as $entry) { ZtChart_Model_DbTable_Infoserver::addInfoserverConfig(array_merge($options['infoserver'], $entry), $gameType); } } }