Просмотр исходного кода

卡在登录认证问题修复

lvjincheng 3 лет назад
Родитель
Сommit
54c6fd9505

+ 8 - 1
Assets/BowArrow/Scripts/Network/HttpController/LoginController.cs

@@ -91,7 +91,14 @@ public class LoginController : JCUnityLib.Singleton<LoginController>
         form.AddField("serverIndex", CommonConfig.serverIndex);
         using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
             yield return request.SendWebRequest();
-            RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
+            RequestResult requestResult;
+            if (request.result == UnityWebRequest.Result.Success)
+                requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
+            else 
+            {
+                requestResult = new RequestResult();
+                Debug.LogError("LoginByToken Request Fail: " + request.result);
+            }
             if (callback != null) callback(requestResult);
         }
     }

+ 51 - 34
Assets/BowArrow/Scripts/Network/UserPlayer.cs

@@ -78,48 +78,65 @@ public class UserPlayer : JCEntity
         string p1 = SceneManager.GetActiveScene().name;
         call("authToken2", p0, p1);
     }
-
+    
     //被服务端调用的函数
     public void onAuthRes(bool res) {
         Debug.Log("onAuthRes," + res);
         if (res) {
-            UserComp.Instance.getUserInfo(delegate(UserInfo userInfo) {
-                LoginMgr.myUserInfo = userInfo;
-                if (HomeView.ins) {
-                    HomeView.ins.RenderMyAvatarSprite();
-                    HomeView.ins.RenderNameOrGender();
-                    HomeView.ins.RenderDeviceNames();
-                }
-                if (AuthLoginMask.ins) AuthLoginMask.ins.SetVisiable(false);
-                if (SceneManager.GetActiveScene().name.Equals("Home") && !LoginMgr.myUserInfo.IsGuideFinish(0)) {
-                    NewUserGuiderManager.ins?.ReviewNewUserGuide();
-                }
-                if (SceneManager.GetActiveScene().name.Equals("Home")) {
-                    if (userInfo.nickname == "test10086") InitLogReporter();
-                }
-                if (SceneManager.GetActiveScene().name.Equals("Home")) {
-                    System.Action eOnAgree = () => {
-                        GPSTool.GetAddress((address) => {
-                            if (address != null) {
-                                Debug.Log("登陆时获取地理位置成功:" + string.Join(" ", address));
-                                if (LoginMgr.myUserInfo.country == address[0]
-                                    && LoginMgr.myUserInfo.state == address[1]
-                                    && LoginMgr.myUserInfo.city == address[2]
-                                ) return;
-                                LoginMgr.myUserInfo.country = address[0];
-                                LoginMgr.myUserInfo.state = address[1];
-                                LoginMgr.myUserInfo.city = address[2];
-                                LoginMgr.myUserInfo.Save();
-                            }
-                        });
-                    };
-                    if (!HomeView.ShowProminentBeforeConnectBLE(eOnAgree)) eOnAgree.Invoke();
-                }
-            });            
+            JCUnityLib.CoroutineStarter.Start(RequestUserInfoAvoidFail());
         } else {
             handleAuthExpire();
         }
     }
+    //获取用户信息,超时了就重试
+    private bool _hasExecuteRequestUserInfoAvoidFail = false;
+    IEnumerator RequestUserInfoAvoidFail()
+    {
+        if (_hasExecuteRequestUserInfoAvoidFail) yield break;
+        _hasExecuteRequestUserInfoAvoidFail = true;
+        while (!_hasGetUserInfo && ins == this) {
+            UserComp.Instance.getUserInfo(DoAfterGetUserInfo);
+            yield return new WaitForSeconds(3.3f);
+        }
+    }
+    private bool _hasGetUserInfo = false;
+    private void DoAfterGetUserInfo(UserInfo userInfo)
+    {
+        if (_hasGetUserInfo) return;
+        _hasGetUserInfo = true;
+        LoginMgr.myUserInfo = userInfo;
+
+        if (HomeView.ins) {
+            HomeView.ins.RenderMyAvatarSprite();
+            HomeView.ins.RenderNameOrGender();
+            HomeView.ins.RenderDeviceNames();
+        }
+        if (AuthLoginMask.ins) AuthLoginMask.ins.SetVisiable(false);
+        if (SceneManager.GetActiveScene().name.Equals("Home") && !LoginMgr.myUserInfo.IsGuideFinish(0)) {
+            NewUserGuiderManager.ins?.ReviewNewUserGuide();
+        }
+        if (SceneManager.GetActiveScene().name.Equals("Home")) {
+            if (LoginMgr.myUserInfo.nickname == "test10086") InitLogReporter();
+        }
+        if (SceneManager.GetActiveScene().name.Equals("Home")) {
+            System.Action eOnAgree = () => {
+                GPSTool.GetAddress((address) => {
+                    if (address != null) {
+                        Debug.Log("登陆时获取地理位置成功:" + string.Join(" ", address));
+                        if (LoginMgr.myUserInfo.country == address[0]
+                            && LoginMgr.myUserInfo.state == address[1]
+                            && LoginMgr.myUserInfo.city == address[2]
+                        ) return;
+                        LoginMgr.myUserInfo.country = address[0];
+                        LoginMgr.myUserInfo.state = address[1];
+                        LoginMgr.myUserInfo.city = address[2];
+                        LoginMgr.myUserInfo.Save();
+                    }
+                });
+            };
+            if (!HomeView.ShowProminentBeforeConnectBLE(eOnAgree)) eOnAgree.Invoke();
+        }
+    }
 
     //控制台
     private static bool s_LogReporterInited = false;