Quellcode durchsuchen

主界面登录重试

lvjincheng vor 3 Jahren
Ursprung
Commit
ddfb19af42

+ 1 - 1
Assets/BowArrow/Prefabs/Parts/Home/AuthLoginMask/AuthLoginMask.cs

@@ -53,7 +53,7 @@ public class AuthLoginMask : MonoBehaviour
         AudioMgr.ins.PlayBtn();
         SetVisiable(true);
         if (UserPlayer.ins == null) UserPlayer.LoginByToken();
-        else UserPlayer.ins.RetryRequestUserInfoAvoidFail();
+        else UserPlayer.ins.GetUserInfo();
     }
 
     public void SetText(string text) {

+ 19 - 0
Assets/BowArrow/Scripts/Network/HttpController/LoginController.cs

@@ -103,6 +103,25 @@ public class LoginController : JCUnityLib.Singleton<LoginController>
         }
     }
 
+    public IEnumerator GetUserInfo(Action<RequestResult> callback)
+    {
+        string url = CommonConfig.gateServerURL + "/gameLogin/getUserInfo";
+        WWWForm form = new WWWForm();
+        form.AddField("token", PlayerPrefs.GetString(LoginMgr.LoginTokenKey));
+        using (UnityWebRequest request = UnityWebRequest.Post(url, form))
+        {
+            yield return request.SendWebRequest();
+            RequestResult requestResult;
+            if (request.result == UnityWebRequest.Result.Success)
+                requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
+            else
+            {
+                requestResult = new RequestResult();
+            }
+            if (callback != null) callback(requestResult);
+        }
+    }
+
     public IEnumerator ListUsernamesByEmail(string email, long timestamp, string sign, Action<RequestResult> callback) {
         string url = CommonConfig.gateServerURL + "/gameLogin/listUsernamesByEmail";
         WWWForm form = new WWWForm();

+ 17 - 31
Assets/BowArrow/Scripts/Network/UserPlayer.cs

@@ -13,6 +13,7 @@ public class UserPlayer : JCEntity
         ins = this;
         components.Add("PKComp", PKComp.Instance);
         components.Add("UserComp", UserComp.Instance);
+        GetUserInfo();
     }
     public static void ConnectServer() {
         if (ins != null) return;
@@ -67,6 +68,7 @@ public class UserPlayer : JCEntity
     }
 
     public override void onDestroy() {
+        loginAuthed = false;
         Debug.Log("UserPlayer onDestroy()");
         if (canReconnnect) {
             JCUnityLib.CoroutineStarter.Start(ReconnenctServer());
@@ -96,46 +98,30 @@ public class UserPlayer : JCEntity
     }
     
     //被服务端调用的函数
+    public bool loginAuthed;
     public void onAuthRes(bool res) {
         Debug.Log("onAuthRes," + res);
-        if (res) {
-            JCUnityLib.CoroutineStarter.Start(RequestUserInfoAvoidFail());
-        } else {
-            handleAuthExpire();
-        }
+        loginAuthed = res;
+        if (!loginAuthed) handleAuthExpire();
     }
-    public void RetryRequestUserInfoAvoidFail()
-    {
-        _hasExecuteRequestUserInfoAvoidFail = false;
-        _getUserInfoRetryCount = -1;
-        _getUserInfoFailed = false;
-        JCUnityLib.CoroutineStarter.Start(RequestUserInfoAvoidFail());
-    }
-    //获取用户信息,超时了就重试
-    private bool _hasExecuteRequestUserInfoAvoidFail = false;
-    private int _getUserInfoRetryCount = -1;
-    private bool _getUserInfoFailed = false;
-    IEnumerator RequestUserInfoAvoidFail()
+    //获取用户信息,失败了就重试
+    public void GetUserInfo()
     {
-        if (_hasExecuteRequestUserInfoAvoidFail) yield break;
-        _hasExecuteRequestUserInfoAvoidFail = true;
-        while (!_hasGetUserInfo && ins == this) {
-            if (++_getUserInfoRetryCount <= 3) {
-                UserComp.Instance.getUserInfo(DoAfterGetUserInfo);
-                if (_getUserInfoRetryCount > 0) 
-                    AuthLoginMask.ins?.SetRetryCount(_getUserInfoRetryCount); 
-                yield return new WaitForSeconds(3.3f);
-            } else {
-                _getUserInfoFailed = true;
-                AuthLoginMask.ins?.SetAutoRetryFail();
-                yield break;
+        UserPlayer userPlayer = this;
+        CoroutineStarter.Start(LoginController.Instance.GetUserInfo((res) =>
+        {
+            if (ins != userPlayer) return;
+            if (res.code == 0)
+            {
+                UserInfo userInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo>(res.data as string);
+                DoAfterGetUserInfo(userInfo);
             }
-        }
+            else AuthLoginMask.ins?.SetAutoRetryFail();
+        }));
     }
     private bool _hasGetUserInfo = false;
     private void DoAfterGetUserInfo(UserInfo userInfo)
     {
-        if (_getUserInfoFailed) return; //主要是为了避免提示了(网络异常后请稍后再试),又突然可以了
         if (_hasGetUserInfo) return;
         _hasGetUserInfo = true;
         LoginMgr.myUserInfo = userInfo;

+ 2 - 2
Assets/BowArrow/Scripts/View/Home/HomeView.cs

@@ -169,7 +169,7 @@ public class HomeView : JCUnityLib.ViewBase
         if (friendBarContent == null) {
             friendBarContent = transform.Find("FriendBar/Scroll View/Viewport/Content");
         }
-        while (LoginMgr.myUserInfo.id < 1) {
+        while (UserPlayer.ins == null || !UserPlayer.ins.loginAuthed) {
             yield return null;
         }
         Action<JArray> cb = RenderFriendList;
@@ -215,7 +215,7 @@ public class HomeView : JCUnityLib.ViewBase
         if (friendBarContent == null) {
             friendBarContent = transform.Find("FriendBar/Scroll View/Viewport/Content");
         }
-        while (LoginMgr.myUserInfo.id < 1) {
+        while (UserPlayer.ins == null || !UserPlayer.ins.loginAuthed) {
             yield return null;
         }
         Action<JArray> cb = RenderFriendRankList;