Explorar o código

登录重试检验加强

lvjincheng %!s(int64=3) %!d(string=hai) anos
pai
achega
4385a9b8d4

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

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

+ 29 - 10
Assets/BowArrow/Scripts/Network/UserPlayer.cs

@@ -20,17 +20,33 @@ public class UserPlayer : JCEntity
         if (CommonConfig.businessServerWsURL != null) {
             JCEngine.boot(CommonConfig.businessServerWsURL, new UserPlayer());
         } else {
-            CoroutineStarter.Start(LoginController.Instance.LoginByToken((res) => {
-                if (res.code == 0) {
-                    string loginToken = (string)res.data;
-                    CommonConfig.businessServerWsURL = loginToken.Split('&')[2];
-                    PlayerPrefs.SetString(LoginMgr.LoginTokenKey, loginToken);
-                    JCEngine.boot(CommonConfig.businessServerWsURL, new UserPlayer());
+           LoginByToken();
+        }
+    }
+    private static int _RetryLoginByTokenCount = -1;
+    public static void LoginByToken()
+    {
+        if (++_RetryLoginByTokenCount > 0) 
+            AuthLoginMask.ins?.SetRetryCount(_RetryLoginByTokenCount);
+        CoroutineStarter.Start(LoginController.Instance.LoginByToken((res) => {
+            if (res.code == 0) {
+                _RetryLoginByTokenCount = -1;
+                string loginToken = (string)res.data;
+                CommonConfig.businessServerWsURL = loginToken.Split('&')[2];
+                PlayerPrefs.SetString(LoginMgr.LoginTokenKey, loginToken);
+                JCEngine.boot(CommonConfig.businessServerWsURL, new UserPlayer());
+            } else if (res.code == -9999) { 
+                if (_RetryLoginByTokenCount < 3) {
+                    LoginByToken();
                 } else {
-                    handleAuthExpire();
+                    _RetryLoginByTokenCount = -1;
+                    AuthLoginMask.ins?.SetAutoRetryFail();
                 }
-            }));
-        }
+            } else {
+                _RetryLoginByTokenCount = -1;
+                handleAuthExpire();
+            }
+        }));
     }
     //之所以做成协程延迟触发,是因为用编辑器调试时,停止运行后会触发断线重连,就会造成游戏停止调试了,但socket还连接的现象。
     IEnumerator ReconnenctServer() {
@@ -92,11 +108,13 @@ public class UserPlayer : JCEntity
     {
         _hasExecuteRequestUserInfoAvoidFail = false;
         _getUserInfoRetryCount = -1;
+        _getUserInfoFailed = false;
         JCUnityLib.CoroutineStarter.Start(RequestUserInfoAvoidFail());
     }
     //获取用户信息,超时了就重试
     private bool _hasExecuteRequestUserInfoAvoidFail = false;
     private int _getUserInfoRetryCount = -1;
+    private bool _getUserInfoFailed = false;
     IEnumerator RequestUserInfoAvoidFail()
     {
         if (_hasExecuteRequestUserInfoAvoidFail) yield break;
@@ -108,15 +126,16 @@ public class UserPlayer : JCEntity
                     AuthLoginMask.ins?.SetRetryCount(_getUserInfoRetryCount); 
                 yield return new WaitForSeconds(3.3f);
             } else {
+                _getUserInfoFailed = true;
                 AuthLoginMask.ins?.SetAutoRetryFail();
                 yield break;
             }
         }
-        Debug.Log("out");
     }
     private bool _hasGetUserInfo = false;
     private void DoAfterGetUserInfo(UserInfo userInfo)
     {
+        if (_getUserInfoFailed) return; //主要是为了避免提示了(网络异常后请稍后再试),又突然可以了
         if (_hasGetUserInfo) return;
         _hasGetUserInfo = true;
         LoginMgr.myUserInfo = userInfo;