using System.Collections; using System.Collections.Generic; using UnityEngine; using JCEngineCore; using UnityEngine.SceneManagement; using DG.Tweening; using JCUnityLib; /* Socket组件-玩家业务 */ public class UserPlayer : JCEntity { public static UserPlayer ins; public UserPlayer() { ins = this; components.Add("PKComp", PKComp.Instance); components.Add("UserComp", UserComp.Instance); } public static void ConnectServer() { if (ins != null) return; if (HomeMgr.ins) HomeMgr.ins.ShowAuthLoginMask(true); 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()); } else { handleAuthExpire(); } })); } } //之所以做成协程延迟触发,是因为用编辑器调试时,停止运行后会触发断线重连,就会造成游戏停止调试了,但socket还连接的现象。 IEnumerator ReconnenctServer() { yield return new WaitForSecondsRealtime(0.1f); JCEngine.reboot(this); } bool canReconnnect = true; public override void onLoad() { Debug.Log("UserPlayer onLoad()"); authToken(); } public override void onReload() { Debug.Log("UserPlayer onReload()"); authToken(); } public override void onDestroy() { Debug.Log("UserPlayer onDestroy()"); if (canReconnnect) { JCUnityLib.CoroutineStarter.Start(ReconnenctServer()); } } public override void onMiss() { Debug.Log("UserPlayer onMiss()"); if (canReconnnect) { JCUnityLib.CoroutineStarter.Start(ReconnenctServer()); } } public void Close() { LoginMgr.myUserInfo.id = 0; if (ins == this) ins = null; this.canReconnnect = false; this.channel.close(); Debug.Log("user player close"); } //向服务端发送的请求 public void authToken() { string p0 = PlayerPrefs.GetString(LoginMgr.LoginTokenKey, ""); 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 (HomeMgr.ins) { HomeMgr.ins.ShowAuthLoginMask(false); } if (SceneManager.GetActiveScene().name.Equals("Home") && !LoginMgr.myUserInfo.IsGuideFinish(0)) { NewUserGuiderManager.ins?.ReviewNewUserGuide(); } if (SceneManager.GetActiveScene().name.Equals("Home")) { if (userInfo.phone == "10086") { var reporter = GameObject.Find("Reporter")?.GetComponent(); if (reporter && !reporter.enabled) { reporter.enabled = true; Debug.LogWarning("调试控制台启动-在屏幕画圆激活"); } } } }); } else { handleAuthExpire(); } } private static void handleAuthExpire() { //tip if (HomeMgr.ins && HomeMgr.ins.IsAuthLoginMaskActive()) { HomeMgr.ins.SetAuthLoginText(TextAutoLanguage2.GetTextByCNKey("登录认证过期")); } else { PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByCNKey("登录认证过期")); } //delay back login Sequence seq = DOTween.Sequence(); seq.AppendInterval(1.5f); seq.AppendCallback(() => { if (SceneManager.GetActiveScene().name.Equals("Home")) { SceneManager.LoadScene("Login", LoadSceneMode.Single); } else { Application.Quit(); //不是Home场景,就关闭游戏 } }); //close userplayer PlayerPrefs.DeleteKey(LoginMgr.LoginTokenKey); ins?.Close(); } public void onRequestAddFriend() { PopupMgr.ins.ShowTipTop(TextAutoLanguage2.GetTextByKey("tip_friend-receive-request")); tempData.hasFriendRequest = true; } public void onHasFriendTip() { tempData.hasFriendRequest = true; } public TempData tempData = new TempData(); public class TempData { public System.Action onUpdate; private bool _hasFriendRequest; public bool hasFriendRequest { get { return _hasFriendRequest; } set { _hasFriendRequest = value; onUpdate?.Invoke(); } } } }