Пример #1
0
        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);
            }
        }
Пример #2
0
        /// <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;
        }
Пример #3
0
 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);
 }
Пример #4
0
        public CoroutineTask StartCoroutine(IEnumerator coroutine)
        {
            CoroutineTask task = new CoroutineTask(coroutine);

            task.Finished += TaskFinished;
            AllTask.Add(task);
            MyCentorl.StartTask(task);
            return(task);
        }
Пример #5
0
 /// <summary>
 /// 一帧处理一条消息
 /// </summary>
 /// <returns></returns>
 private IEnumerator DealMesageCoroutine()
 {
     while (ReceiveMessageQueue.Count > 0)
     {
         MyCentorl.DealMessage(ReceiveMessageQueue.Dequeue());
         yield return(new WaitForEndOfFrame());
     }
     IsDealMesageing = false;
 }
Пример #6
0
 public void ReceiveMessage(CSMessage Msg)
 {
     lock (ReceiveMessageQueue)
     {
         ReceiveMessageQueue.Enqueue(Msg);
         if (!IsDealMesageing)
         {
             MyCentorl.VP(0, () =>
             {
                 IsDealMesageing = true;
                 MyCentorl.StartCoroutine(DealMesageCoroutine());
             });
         }
     }
 }
Пример #7
0
        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());
                }
            }
        }
Пример #8
0
        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();
            }
        }
Пример #9
0
        public void PlayEffetcMusic(string MusicName)
        {
            AudioClip Music = MyCentorl.LoadAsset <AudioClip>("Sound", MusicName);

            PlayBackMusic(Music);
        }
Пример #10
0
 public void ChangeScene(ISceneLoadCompBase SceneLoadComp)
 {
     LoadSceneProgress = 0;
     MyCentorl.StartCoroutine(ChangeSceneCoroutine(SceneLoadComp));
 }