Beispiel #1
0
        private void CheckReceivePackageLoss(NetUdpFixedSizePackage mPackage)
        {
            if (mPackage.nOrderId == nCurrentWaitReceiveOrderId)
            {
                CheckCombinePackage(mPackage);
                AddReceivePackageOrderId();
                while (mReceiveLossPackageDic.Count > 0)
                {
                    if (mReceiveLossPackageDic.ContainsKey(nCurrentWaitReceiveOrderId))
                    {
                        mPackage = mReceiveLossPackageDic [nCurrentWaitReceiveOrderId];
                        mReceiveLossPackageDic.Remove(nCurrentWaitReceiveOrderId);

                        CheckCombinePackage(mPackage);
                        AddReceivePackageOrderId();
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else if (mPackage.nOrderId > nCurrentWaitReceiveOrderId)
            {
                mReceiveLossPackageDic [mPackage.nOrderId] = mPackage;
                DebugSystem.Log("Client loss Pcakge: " + nCurrentWaitReceiveOrderId + " | " + mPackage.nOrderId);
            }
            else
            {
                DebugSystem.LogError("Client 接受 过去的 废物包: " + mPackage.nOrderId);
            }
        }
Beispiel #2
0
        private void CheckCombinePackage(NetUdpFixedSizePackage mPackage)
        {
            if (mPackage.nGroupCount > 1)
            {
                NetCombinePackage cc = ObjectPoolManager.Instance.mCombinePackagePool.Pop();
                cc.Init(mPackage);
                mReceiveGroupList.Enqueue(cc);
            }
            else
            {
                if (mReceiveGroupList.Count > 0)
                {
                    var currentGroup = mReceiveGroupList.Peek();
                    currentGroup.Add(mPackage);

                    if (currentGroup.CheckCombineFinish())
                    {
                        mUdpPeer.AddLogicHandleQueue(mReceiveGroupList.Dequeue());
                    }
                }
                else
                {
                    mUdpPeer.AddLogicHandleQueue(mPackage);
                }
            }
        }
        public void Add(NetUdpFixedSizePackage mPackage)
        {
            Combine(mPackage);
            nGetCombineCount++;

            ObjectPoolManager.Instance.mUdpFixedSizePackagePool.recycle(mPackage);
        }
        private void Combine(NetUdpFixedSizePackage mPackage)
        {
            int nCopyLength = mPackage.Length - ClientConfig.nUdpPackageFixedHeadSize;

            Array.Copy(mPackage.buffer, ClientConfig.nUdpPackageFixedHeadSize, base.buffer, base.Length, nCopyLength);
            base.Length += nCopyLength;
        }
        private void HandleReceiveData()
        {
            while (!bClosed)
            {
                NetUdpFixedSizePackage mPackage = null;
                int nHandlePackageCount         = 0;
                while (!mReceivePackageQueue.IsEmpty)
                {
                    if (!mReceivePackageQueue.TryDequeue(out mPackage))
                    {
                        break;
                    }

                    ReceiveNetPackage(mPackage);

                    nHandlePackageCount++;
                    if (nHandlePackageCount > 50)
                    {
                        nHandlePackageCount = 0;
                        Thread.Sleep(1);
                    }
                }

                Thread.Sleep(50);
            }
        }
Beispiel #6
0
        private void SendHeartBeat()
        {
            HeartBeat sendMsg = new HeartBeat();
            NetUdpFixedSizePackage mPackage = GetUdpSystemPackage(UdpNetCommand.COMMAND_HEARTBEAT, sendMsg);

            SendNetPackage(mPackage);
        }
        public static void Encryption(NetUdpFixedSizePackage mPackage)
        {
            UInt16 nOrderId    = mPackage.nOrderId;
            UInt16 nGroupCount = mPackage.nGroupCount;
            UInt16 nPackageId  = mPackage.nPackageId;

            Array.Copy(mCheck, 0, mPackage.buffer, 0, 4);

            byte[] byCom = BitConverter.GetBytes(nOrderId);
            Array.Copy(byCom, 0, mPackage.buffer, 4, byCom.Length);
            byCom = BitConverter.GetBytes(nGroupCount);
            Array.Copy(byCom, 0, mPackage.buffer, 6, byCom.Length);
            byCom = BitConverter.GetBytes(nPackageId);
            Array.Copy(byCom, 0, mPackage.buffer, 8, byCom.Length);
        }
        protected void ReceiveNetPackage(NetUdpFixedSizePackage mPackage)
        {
            bool bSucccess = NetPackageEncryption.DeEncryption(mPackage);

            if (bSucccess)
            {
                if (mPackage.nPackageId > 50)
                {
                    mUdpCheckPool.ReceiveCheckPackage(mPackage);
                }
                else
                {
                    NetPackageExecute(mPackage);
                }
            }
        }
        public void Init(NetUdpFixedSizePackage mPackage)
        {
            base.nPackageId  = mPackage.nPackageId;
            base.nGroupCount = mPackage.nGroupCount;
            base.nOrderId    = mPackage.nOrderId;

            int nSumLength = base.nGroupCount * ClientConfig.nUdpPackageFixedBodySize + ClientConfig.nUdpPackageFixedHeadSize;

            if (base.buffer.Length < nSumLength)
            {
                base.buffer = new byte[nSumLength];
            }

            base.Length = ClientConfig.nUdpPackageFixedHeadSize;

            nGetCombineCount = 0;
            Add(mPackage);
        }
        public static bool DeEncryption(NetUdpFixedSizePackage mPackage)
        {
            if (mPackage.Length < ClientConfig.nUdpPackageFixedHeadSize)
            {
                return(false);
            }

            for (int i = 0; i < 4; i++)
            {
                if (mPackage.buffer [i] != mCheck [i])
                {
                    return(false);
                }
            }

            mPackage.nOrderId    = BitConverter.ToUInt16(mPackage.buffer, 4);
            mPackage.nGroupCount = BitConverter.ToUInt16(mPackage.buffer, 6);
            mPackage.nPackageId  = BitConverter.ToUInt16(mPackage.buffer, 8);
            return(true);
        }
        private void ReceiveThreadUpdate()
        {
            while (!bClosed)
            {
                int length = 0;
                try {
                    NetUdpFixedSizePackage mReceiveStream = ObjectPoolManager.Instance.mUdpFixedSizePackagePool.Pop();
                    length = mSocket.ReceiveFrom(mReceiveStream.buffer, 0, mReceiveStream.buffer.Length, SocketFlags.None, ref remoteEndPoint);
                    if (length > 0)
                    {
                        mReceiveStream.Length = length;
                        mReceivePackageQueue.Enqueue(mReceiveStream);
                    }
                    else
                    {
                        DebugSystem.Log("Client ReceiveLength: " + length);
                        ObjectPoolManager.Instance.mUdpFixedSizePackagePool.recycle(mReceiveStream);
                    }
                } catch (SocketException e) {
                    if (e.SocketErrorCode == SocketError.Shutdown)
                    {
                        DebugSystem.LogWarning("Socket 接受操作被禁止");
                    }
                    else
                    {
                        DebugSystem.LogWarning("ScoketException: " + e.SocketErrorCode);
                    }
                    break;
                } catch (Exception e) {
                    DebugSystem.LogError(e.Message);

                    m_state = NETSTATE.DISCONNECTED;
                    peer_event mEvent = new peer_event();
                    mEvent.mNetEventType = NETEVENT.DISCONNECTED;
                    mEvent.msg           = e.Message;
                    break;
                }
            }

            DebugSystem.LogWarning("Client ReceiveThread Safe Quit !");
        }
Beispiel #12
0
        private void AddSendCheck(NetUdpFixedSizePackage mPackage)
        {
            if (ClientConfig.bNeedCheckPackage)
            {
                UInt16 nOrderId = mPackage.nOrderId;

                CheckPackageInfo mCheckInfo = mCheckPackagePool.Pop();
                mCheckInfo.nReSendCount = 0;
                mCheckInfo.mPackage     = mPackage;
                mCheckInfo.mTimer.restart();

                if (!mWaitCheckSendDic.ContainsKey(nOrderId))
                {
                    mWaitCheckSendDic.Add(nOrderId, mCheckInfo);
                }
                else
                {
                    DebugSystem.LogError("Client Add SendCheck Repeated !!!" + nOrderId);
                }
            }

            mUdpPeer.SendNetPackage(mPackage);
        }
Beispiel #13
0
        public void ReceiveCheckPackage(NetUdpFixedSizePackage mReceiveLogicPackage)
        {
            if (ClientConfig.bNeedCheckPackage)
            {
                UInt16             nOrderId = mReceiveLogicPackage.nOrderId;
                PackageCheckResult mResult  = new PackageCheckResult();
                if (bClient)
                {
                    mResult.NWhoOrderId = (UInt32)(2 << 16 | nOrderId);
                }
                else
                {
                    mResult.NWhoOrderId = (UInt32)(1 << 16 | nOrderId);
                }

                NetUdpFixedSizePackage mCheckResultPackage = mUdpPeer.GetUdpSystemPackage(UdpNetCommand.COMMAND_PACKAGECHECK, mResult);

                CheckPackageInfo mCheckInfo = mCheckPackagePool.Pop();
                mCheckInfo.nReSendCount = 0;
                mCheckInfo.mPackage     = mCheckResultPackage;
                mCheckInfo.mTimer.restart();

                if (!mWaitCheckReceiveDic.ContainsKey(nOrderId))
                {
                    mWaitCheckReceiveDic.Add(nOrderId, mCheckInfo);
                }

                mUdpPeer.SendNetPackage(mCheckResultPackage);

                CheckReceivePackageLoss(mReceiveLogicPackage);
            }
            else
            {
                CheckCombinePackage(mReceiveLogicPackage);
            }
        }