/** * 用户登录接口 * @param int $client_id 客户端Id * @param array $message 客户端消息 * $message = array( * 'uid'=> ':integer', //用户uid * 'oauth_token' => 'string', // 用户oauth_token * 'oauth_token_secret' => ':string', // 用户oauth_token_secret * ); * @return void */ protected static function loginMessage($client_id, array $message = array()) { // 取得客户端数据包各参数 $uid = isset($message['uid']) ? (int) $message['uid'] : null; $oauth_token = isset($message['oauth_token']) ? (string) $message['oauth_token'] : null; $oauth_token_secret = isset($message['oauth_token_secret']) ? (string) $message['oauth_token_secret'] : null; // 如果都正确传递,那么尝试登陆用户 if ($uid && $oauth_token && $oauth_token_secret) { // 调用登陆接口尝试登陆,如果能正确登陆,则发送登陆成功的提示 if (Message::login($client_id, $uid, $oauth_token, $oauth_token_secret)) { self::sendDataToCurrentClient('login', (int) Message::getLoggedUserInfo('uid')); self::pushMessageDataToCurrent(); return; // 登录已经成功,后面不在执行,所以直接返回 } } // 无法登陆或数据包参数不完整,则发送登陆错误信息 self::sendDataToCurrentClient('login', $uid, 1004, 'Login failed'); }
/** * 向客户端推送消息 * @param array $data 需要推送的消息列表 * @param array|string $users 需要推送到的用户UID列表 * @param bool $remove_current_user 是否包含当前用户 * @throws Exception */ protected static function pushMessageData($data, $users, $remove_current_user = true) { $count = count($data); $client_ids = Message::getClientByUser($users, $remove_current_user); if ($client_ids) { $message = json_encode(array('type' => 'push_message', 'result' => array('from' => 'app', 'length' => $count, 'list' => $data), 'status' => 0, 'msg' => '')); Gateway::sendToAll($message, array_values($client_ids)); $users = array_diff($users, array_keys($client_ids)); } if ($remove_current_user) { $uid = (int) Message::getLoggedUserInfo('uid'); if (in_array($uid, $users)) { $key = @array_search($uid, $users); if (isset($users[$key])) { unset($users[$key]); } } } if ($users) { $data = array_pop($data); $alert = $data['content']; $data['push_type'] = 'message'; \Lib\Jpush::pushMessage($users, $alert, $data); } }