void EndReceiveFromCallback(IAsyncResult iar) { SocketState state = iar.AsyncState as SocketState; Socket socket = state.Socket; try { int byteRead = socket.EndReceiveFrom(iar, ref state.RemoteEP); MyCentorl.RecvMessage(state.Buffer); } catch (Exception e) { Console.WriteLine("发生异常!异常信息:"); Console.WriteLine(e.Message); } finally { //非常重要:继续异步接收 socket.BeginReceiveFrom( state.Buffer, 0, state.Buffer.Length, SocketFlags.None, ref state.RemoteEP, EndReceiveFromCallback, state); } }
/// <summary> /// 基础界面组件 /// </summary> /// <param name="_ModelContorl"></param> /// <param name="_Agr">第一个参数 资源根路径</param> public override void Load(ModelContorlBase _ModelContorl, params object[] _Agr) { base.Load(_ModelContorl); string PrefabName = (string)_Agr[0]; GameObject UIRoot = null; switch (ShowLevel) { case UILevel.LowUI: UIRoot = ViewManagerModel.Instance.LowUIRoot; break; case UILevel.NormalUI: UIRoot = ViewManagerModel.Instance.NormalUIRoot; break; case UILevel.HightUI: UIRoot = ViewManagerModel.Instance.HightUIRoot; break; } UIGameobject = MyCentorl.CreateObj("Prefab", PrefabName, UIRoot); RectTransform rectTrans = UIGameobject.GetComponent <RectTransform>(); rectTrans.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, 0); rectTrans.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, 0, 0); rectTrans.anchorMin = Vector2.zero; rectTrans.anchorMax = Vector2.one; }
public override void Load(ModelContorlBase _ModelContorl, params object[] _Agr) { base.Load(_ModelContorl, "LoginViewComp"); Image = UIGameobject.OnSubmit <Image>("Image"); Image.sprite = MyCentorl.LoadAsset <Sprite>("Image", "zi_zhdl"); TestButt = UIGameobject.OnSubmit <Button>("TestButt"); TestButt.onClick.AddListener(TestButtClick); }
public CoroutineTask StartCoroutine(IEnumerator coroutine) { CoroutineTask task = new CoroutineTask(coroutine); task.Finished += TaskFinished; AllTask.Add(task); MyCentorl.StartTask(task); return(task); }
/// <summary> /// 一帧处理一条消息 /// </summary> /// <returns></returns> private IEnumerator DealMesageCoroutine() { while (ReceiveMessageQueue.Count > 0) { MyCentorl.DealMessage(ReceiveMessageQueue.Dequeue()); yield return(new WaitForEndOfFrame()); } IsDealMesageing = false; }
public void ReceiveMessage(CSMessage Msg) { lock (ReceiveMessageQueue) { ReceiveMessageQueue.Enqueue(Msg); if (!IsDealMesageing) { MyCentorl.VP(0, () => { IsDealMesageing = true; MyCentorl.StartCoroutine(DealMesageCoroutine()); }); } } }
private IEnumerator LoadSceneControl(ISceneLoadCompBase SceneLoadComp, float Start, float Target) { CurrSceneLoadComp = SceneLoadComp; int currProcess = 0; int toProcess = 0; if (CurrSceneLoadComp != null) { MyCentorl.StartCoroutine(CurrSceneLoadComp.LoadScene()); while (LoadSceneProgress < Target) { toProcess = (int)(CurrSceneLoadComp.GetProcess() * 100); while (currProcess < toProcess) { ++currProcess; LoadSceneProgress = Mathf.Lerp(Start, Target, currProcess / 100.0f); Cheduler.UpdataProgress(LoadSceneProgress); yield return(new WaitForEndOfFrame()); } yield return(new WaitForEndOfFrame()); } } else { toProcess = 100; while (LoadSceneProgress < Target) { while (currProcess < toProcess) { ++currProcess; LoadSceneProgress = Mathf.Lerp(Start, Target, currProcess / 100.0f); Cheduler.UpdataProgress(LoadSceneProgress); yield return(new WaitForEndOfFrame()); } yield return(new WaitForEndOfFrame()); } } }
private void OnRecv(IAsyncResult ar) { try { int recvLength = socket.EndReceive(ar); int pkgLength = 0; byte[] data; //如果半包数据不为空 if (null != backupBuffer) { //将半包和后面接收到的数据报拼接起来 data = backupBuffer.Concat(recvBuffer.Take(recvLength).ToArray()).ToArray(); } else { data = recvBuffer.Take(recvLength).ToArray(); } //解决连包问题 while (true) { // 1. recvEvent返回一个完整的数据包长度 pkgLength = MyCentorl.RecvMessage(data); if (pkgLength <= 0 || pkgLength > maxPackage) { //出现异常,连接关闭 state = ServiceModel.BASESOCKET_STATE.SOCKET_ERROR; Close(); break; } // 2. 如果正常处理完,则直接启动下次接收 if (pkgLength == data.Length) { ////TraceUtil.Log("正常"); backupBuffer = null; Array.Clear(recvBuffer, 0, recvBuffer.Length); pkgLength = 0; break; } // 3. 如果还未接收完,半包则在偏移处等待 else if (pkgLength > data.Length) { //将半包数据拷贝到backupBuffer ////TraceUtil.Log("半包"); backupBuffer = data.Take(data.Length).ToArray(); break; } // 4. 如果是连包,则循环处理 else if (pkgLength < data.Length) { //自增偏移量并跳过已经处理的包 ////TraceUtil.Log("连包"); data = data.Skip(pkgLength).ToArray(); backupBuffer = null; } else { break; } } StartRecv(); } catch { state = ServiceModel.BASESOCKET_STATE.SOCKET_ERROR; Close(); } }
public void PlayEffetcMusic(string MusicName) { AudioClip Music = MyCentorl.LoadAsset <AudioClip>("Sound", MusicName); PlayBackMusic(Music); }
public void ChangeScene(ISceneLoadCompBase SceneLoadComp) { LoadSceneProgress = 0; MyCentorl.StartCoroutine(ChangeSceneCoroutine(SceneLoadComp)); }