Example #1
0
        private void TryMergePiecePacket()
        {
            int curNumIndex = getMsgNumPacketByPieceQeue(CurRecvNum);

            if (curNumIndex < 0)
            {
                return;
            }
            int nextNumIndex = getMsgNumPacketByPieceQeue(DesireNextMsgNum);

            if (nextNumIndex < 0)
            {
                return;
            }
            var curPacket  = recvPiecesBuff[curNumIndex];
            var nextPacket = recvPiecesBuff[nextNumIndex];

            curPacket.Append(nextPacket);
            CurRecvNum       = DesireNextMsgNum;
            curPacket.MsgNum = CurRecvNum;
            curPacket.Piece--;
            RSocketUtils.ListRemoveAt <NetPacket>(recvPiecesBuff, nextNumIndex);
            nextPacket.GC();

            if (curPacket.Piece <= 1)
            {
                recvQueue.Enqueue(curPacket);
                RSocketUtils.ListRemoveAt <NetPacket>(recvPiecesBuff, CurRecvNum);
                curPacket.GC();
                return;
            }
            TryMergePiecePacket();
        }
Example #2
0
        private void CheckBuffQueue()
        {
            int index = -1;

            for (int i = 0; i < recvBuff.Count; i++)
            {
                if (isExpectRecvMsgNum(recvBuff[i].MsgNum))
                {
                    index = i;
                    break;
                }
            }
            if (index != -1)
            {
                CurRecvNum++;
                recvQueue.Enqueue(recvBuff[index]);
                RSocketUtils.ListRemoveAt <NetPacket>(recvBuff, index);
                CheckBuffQueue();
            }
        }