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(); }
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(); } }