Example #1
0
        private void ProcessUnSeriMsgs(byte[] data)
        {
            var        unSeriMsgs = ProtoSerAndUnSer.UnSerialize <SCServerRes>(data);
            OpCodeType opCode     = unSeriMsgs.RtCode;

            StaticData.DebugGreen($"WebSocket Receive opCode:{opCode.ToString()}");
            IMessage msg = ListOPRelation.GetRealMessageByOpCodeType(opCode, unSeriMsgs.Data.ToByteArray());

            Debug.Log("ProcessUnSeriMsgs opCode = " + (int)opCode);
            Debug.Log("unSeriMsgs.Code = " + unSeriMsgs.Code);
            int code = (int)opCode;

            if (code >= 50000)
            {
                //账号被挤掉了
                switch (code)
                {
                case 50020:    //账户被挤掉
                    PushSystemAccountWasSqueezed();
                    break;

                case 60000:    //服务器强制更新
                    ServerForcedUpdate();
                    break;

                default:    //服务器推送
                    RigisterCmdPush.PushMsgHandle(msg, (int)opCode);
                    break;
                }
            }
            else
            {
                //判定队列中是否有,如果没有,直接丢弃
                if (QueueMsgBuiness.Count > 0)
                {
                    if (QueueMsgBuiness.Peek().opCode != opCode)
                    {
                        return;
                    }
                }

                if (QueueMsgBuiness.Count <= 0) //队列中没有东西,但是收到了返回
                {                               //重置
                    SetOnceMessageCompelete();
                    return;
                }

                //出队
                if (msg != null)
                {
                    StaticData.DebugGreen($"WebSocket msg:{msg.ToString()} Dequeue");
                }
                else
                {
                    StaticData.DebugGreen($"==========消息返回:{QueueMsgBuiness.Peek().opCode}为null!");
                }

                var msgItem = QueueMsgBuiness.Dequeue();
                SetOnceMessageCompelete();

                //正常请求
                if (unSeriMsgs.Code != (int)WebErrorCode.Success)
                {
                    ErrorInfo error = new ErrorInfo()
                    {
                        webErrorCode = (WebErrorCode)unSeriMsgs.Code, ErrorMessage = $"服务器异常{unSeriMsgs.Code}"
                    };
                    msgItem.onFail(error);
                }
                else
                {
                    msgItem.onSuccess((msg));
                }
            }
        }