/** * 静态方法, 单例统一访问入口 * @return object 返回对象的唯一实例 */ public static function getInstance() { if (is_null(self::$_instance) || !isset(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; }
public function getOnlineUsers($refresh = false) { $data = array(); if (empty($this->items) || $refresh) { $devices = MiniOnlineDevice::getInstance()->getOnlineDevices(); foreach ($devices as $item) { $appId = $item["application_id"]; $device = MiniUserDevice::getInstance()->getUserDevice($item["device_id"]); $user = MiniUser::getInstance()->getUser($device["user_id"]); $online = array("name" => $user["user_name"], "nick" => $user['nick'], "appname" => $appId, "deviceName" => $device["user_device_name"], "deviceType" => $device["user_device_type"], "lastLoginTime" => $item["updated_at"], "avatar" => $user["avatar"]); array_push($this->items, $online); } } $data['list'] = $this->items; $data['total'] = MiniOnlineDevice::getInstance()->getOnlineCount(); return $data; }
/** * 控制器执行主逻辑函数 * @param null $uri * @throws MException * @return mixed $value 返回最终需要执行完的结果 */ public function invoke($uri = null) { // 解析控制器中对应操作名称 $urlManager = new MUrlManager(); $urlArray = $urlManager->parseActionFromUrl(); if ($urlArray === false) { throw new MException(Yii::t('api', '{class} do not call an action', array('{class}' => get_class($this)))); } $action = $urlArray["action"]; $this->commonUri = $urlArray["uri"]; self::$namespace = "api.{$action}"; // 进行程序执行之前首先进行oauth用户身份信息验证 // 排除指定動作可以匿名訪問 $canAnonymous = false; if ($action == "info" || $action == "report") { $canAnonymous = true; } if ($action == "link") { $parts = explode("/", $this->commonUri); $subAction = $parts[2]; if ($subAction == "selected") { $canAnonymous = true; } } if ($canAnonymous) { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST'); } if (!$canAnonymous) { $filter = new MUserFilter(); $filter->invoke($this->commonUri); // 过滤器,检查空间剩余 $spaceFilter = new MActionFilter(); $spaceFilter->action = $action; $spaceFilter->invoke($this->commonUri); // 修改在线用户状态 $this->user = MUserManager::getInstance()->getCurrentUser(); $this->device = MUserManager::getInstance()->getCurrentDevice(); //更新设备在线状态 MiniOnlineDevice::getInstance()->setOnlineDeviceValue($this->user["id"], $this->user["appId"], $this->device["id"]); } $this->{$action}(); }
/** *根据ID删除设备 * @param $deviceId * @return boolean */ public function deleteDevice($deviceId) { //删除设备的Meta MiniUserDeviceMeta::getInstance()->deleteMeta($deviceId); //删除设备的Token MiniToken::getInstance()->deleteToken($deviceId); if ($this->hasCache === true) { //删除设备的cache $this->deleteCache($this->getCacheKey($deviceId)); } //把在线设备清单进行删除 MiniOnlineDevice::getInstance()->deleteOnlineDevice($deviceId); //把设备ID资源暂存到Options表中 $this->temporary2Option($deviceId); //删除设备自己,这里不能修改为sql模式,因为设备ID在删除的时候,自动将ID记录到了Options表中 $device = UserDevice::model()->findByPk($deviceId); if (isset($device)) { $device->delete(); } return true; }
/** * 获取当前用户的信息 */ public function getCurrentUser() { $needSetOnline = false; if (MiniHttp::clientIsBrowser()) { //javascript判断用户是否登录,在服务器端本地进行用户初始化 $this->_current_user = NULL; $userIdentity = new UserIdentity(NULL, NULL); $userIdentity->cookieLogin(); $sessionUser = Yii::app()->session["user"]; $this->_current_user = $sessionUser; $needSetOnline = true; } else { if (empty($this->_current_user)) { $sessionUser = Yii::app()->session["user"]; $this->_current_user = $sessionUser; $needSetOnline = true; } } if ($needSetOnline) { $appId = Yii::app()->session["appId"]; $deviceId = Yii::app()->session["deviceId"]; $userId = $this->_current_user['id']; MiniOnlineDevice::getInstance()->setOnlineDeviceValue($userId, $appId, $deviceId); } return $this->_current_user; }
/** * 获取用户数统计 */ public function getUserCount() { $data = array(); $userModel = new User(); $data['online_user_count'] = MiniOnlineDevice::getInstance()->getOnlineCount(); $data['user_count'] = $userModel->count(); $data['disabled_count'] = $userModel->disabledCount(); $data['admin_count'] = $userModel->adminCount(); return $data; }