/// <summary> /// 重连 /// </summary> public void ReConnet() { mLastReconnetTime = Time.realtimeSinceStartup;//重连时间 LoginModel.Inst.mSessionId = -1; Global.Inst.GetController <NetLoadingController>().ShowLoading(false); GameManager.Instance.CancelHeartBreath(); NetProcess.ReleaseAllConnect(); CallBack call = () => { SQDebug.Log("重连次数" + mAutoReConnectNum); if (mBreathCallBack == null) { Global.Inst.GetController <MainController>().BackToMain(Ip, port); } else { mBreathCallBack(MainViewModel.Inst.mNowIp, MainViewModel.Inst.mNowPort); } }; if (mAutoReConnectNum < 3)//如果自动重连次数少于两次就弹出提示 { mAutoReConnectNum++; call(); } else { Global.Inst.GetController <CommonTipsController>().ShowTips("网络连接失败", "尝试连接|退出游戏", true, call, () => { Application.Quit(); }, null, "网络异常"); } }
void OnApplicationPause(bool b) { if (b)//最小化游戏 { SQDebug.Log("程序失去焦点"); NetProcess.ReleaseAllConnect(); GameManager.Instance.ResetConnetTime(); } }
/// <summary> /// 账号在其他玩家登录 /// </summary> /// <param name="msg"></param> private void OnLoginInOther(MessageData msg) { GameManager.Instance.CancelHeartBreath(); NetProcess.ReleaseAllConnect(); LoginSR.LoingInOtherRecieve data = msg.Read <LoginSR.LoingInOtherRecieve>(); Global.Inst.GetController <CommonTipsController>().ShowTips("您的账号在其他地方登录,请确认后重新登录", "确定", true, () => { CloseOtherViewOpenLogin(); }); }
void Update() { if (Input.GetKeyUp(KeyCode.A)) { OnApplicationPause(false); } if (Input.GetKeyUp(KeyCode.Z)) { NetProcess.ReleaseAllConnect(); } }
/// <summary> /// 显示网络提示 /// </summary> public void ShowNetTips() { GameManager.Instance.CancelHeartBreath(); NetProcess.ReleaseAllConnect(); Global.Inst.GetController <NetLoadingController>().ShowLoading(true); SetTimeout.remove(ReConnet); if (Time.realtimeSinceStartup - mLastReconnetTime > 5)//重连间隔要大于5秒 { SQDebug.Log("直接重连"); ReConnet(); } else { float time = 5 + mLastReconnetTime - Time.realtimeSinceStartup; SQDebug.Log("等" + time + "秒重连"); SetTimeout.add(time, ReConnet); } }
/// <summary> /// 连接服务器 /// </summary> /// <param name="call"></param> private void ConnectServer(CallBack call) { NetProcess.ReleaseAllConnect(); string ip = GameManager.Instance.Ip; int port = GameManager.Instance.port; SQDebug.Log("开始连接服务器 ip:" + ip + " port:" + port); NetProcess.Connect(ip, port, (b, id) => { if (b) { NetProcess.ReleaseConnectExpectID(id); MainViewModel.Inst.mNowIp = ip; MainViewModel.Inst.mNowPort = port; GameManager.Instance.StartHeartBreath((tip, tport) => { LoginToServer(LoginModel.Inst.LoginData, null); }); LoginModel.Inst.mSessionId = id; SQDebug.Log("网络连接成功 ip:" + ip + " port:" + port); if (call != null) { call(); } } else { GameManager.Instance.CancelHeartBreath(); Global.Inst.GetController <CommonTipsController>().ShowTips("网络连接失败,请检测网络后重新连接", "确定", () => { ConnectServer(call); }); } }); }
void OnApplicationQuit() { NetProcess.ReleaseAllConnect(); }
/// <summary> /// 退出登录 /// </summary> public void LoginOut() { GameManager.Instance.CancelHeartBreath(); NetProcess.ReleaseAllConnect(); CloseOtherViewOpenLogin(); }