|
|
@@ -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;
|