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.ins); } 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) { JC.Unity.CoroutineStarter.Start(ReconnenctServer()); } } public override void onMiss() { Debug.Log("UserPlayer onMiss()"); if (canReconnnect) { JC.Unity.CoroutineStarter.Start(ReconnenctServer()); } } public void Close() { 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 call("authToken", p0); } //被服务端调用的函数 public void onAuthRes(bool res) { Debug.Log("onAuthRes," + res); if (res) { UserComp.ins.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); } }); } else { //clear token info PlayerPrefs.DeleteKey("IdAndToken"); //tip if (HomeMgr.ins && HomeMgr.ins.IsAuthLoginMaskActive()) { HomeMgr.ins.SetAuthLoginText(TextAutoLanguage2.GetTextByCNKey("登录认证过期")); } else { PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByCNKey("登录认证过期")); } //delay back login or quit Sequence seq = DOTween.Sequence(); seq.AppendInterval(1.5f); seq.AppendCallback(() => { if (SceneManager.GetActiveScene().name == "Home") { SceneManager.LoadScene("Login", LoadSceneMode.Single); } else { Application.Quit(); } }); //close socket 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(); } } } }