using System.Collections; using System.Collections.Generic; using UnityEngine; using JCEngineCore; using UnityEngine.SceneManagement; using DG.Tweening; /* Socket组件-玩家业务 */ public class UserPlayer : JCEntity { public static UserPlayer ins; public UserPlayer() { ins = this; components.Add("PKComp", PKComp.Instance); } public static void ConnectServer() { if (ins != null) return; if (HomeMgr.ins) HomeMgr.ins.ShowAuthLoginMask(true); JCEngine.boot(CommonConfig.businessServerWsURI, new UserPlayer()); } //之所以做成协程延迟触发,是因为用编辑器调试时,停止运行后会触发断线重连,就会造成游戏停止调试了,但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() { PlayerPrefs.DeleteKey("IdAndToken"); 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("IdAndToken", ""); #if UNITY_EDITOR if (string.IsNullOrEmpty(p0)) { p0 = "12&f29f72fcba4b4a63aa4f965b5d603a4e"; } #endif 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(); } }); } else { //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(() => { SceneManager.LoadScene("Login", LoadSceneMode.Single); }); //close userplayer 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(); } } } }