Пример #1
0
        protected async Task <string> Login(string token, bool isAuto = false)
        {
            lock (UserInfo)
            {
                if (UserInfo.Status != UserStatus.NoLogin)
                {
                    return(UserInfo.Status == UserStatus.Pending ? "操作进行中, 请稍候" : "用户已登录");
                }
                if (token.Length != 16)
                {
                    return("Token 无效");
                }
                UserInfo.Status = UserStatus.Pending;
                PushUserInfo();
            }
            LogManager.Log(1, "Service", "开始登录, Token: " + token.Substring(0, 4) + "********" + token.Substring(12));
            try
            {
                Natfrp.Token = token;

                var user = await Natfrp.Request <Natfrp.GetUser>("get_user");

                if (!user.Data.Login)
                {
                    LogManager.Log(3, "Service", "服务器拒绝登录: " + user.Message);
                    Logout(true);
                    return(user.Message);
                }

                lock (UserInfo)
                {
                    UserInfo.Id   = user.Data.Id;
                    UserInfo.Name = user.Data.Name;
                    UserInfo.Meta = user.Data.Meta;

                    UserInfo.Status = UserStatus.LoggedIn;

                    AutoLogin = false;
                }

                Save();

                NodeManager.Clear();
                NodeManager.Start();

                TunnelManager.Clear();
                TunnelManager.Start();

                PushUserInfo();
                LogManager.Log(1, "Service", "用户登录成功");

                RemoteManager.Start();
            }
            catch (Exception e)
            {
                if (isAuto)
                {
                    LogManager.Log(3, "Service", "自动登录失败, 将在稍后重试: " + e.ToString());
                    lock (UserInfo)
                    {
                        UserInfo.Status = UserStatus.NoLogin;
                    }
                    // Don't push here
                }
                else
                {
                    LogManager.Log(3, "Service", "用户登录失败: " + e.ToString());
                    Logout(true);
                }
                return(e.ToString());
            }
            return(null);
        }