protected string Logout(bool force = false) { lock (UserInfo) { if (!force && UserInfo.Status != UserStatus.LoggedIn) { return(UserInfo.Status == UserStatus.Pending ? "操作进行中, 请稍候" : null); } UserInfo.Status = UserStatus.Pending; PushUserInfo(); } try { lock (UserInfo) { Natfrp.Token = ""; UserInfo.Status = UserStatus.NoLogin; } Save(); TunnelManager.Stop(); NodeManager.Stop(); RemoteManager.Stop(true); } catch (Exception e) { return("未知错误:\n" + e.ToString()); } finally { PushUserInfo(); TunnelManager.Push(); } if (!force) { LogManager.Log(1, "Service", "已退出登录"); } return(null); }