Exemplo n.º 1
0
        /// <summary>
        ///    尝试检查当前剩余的可用数据长度是否满足指定数据长度的需求
        /// </summary>
        /// <param name="length">需要检查的数据长度</param>
        /// <param name="result">返回数据检测结果</param>
        /// <returns>如果返回False, 则证明内部还没有足够的可用数据以供读取</returns>
        private bool InnerCheckEnoughSize(int length, out NetworkDataCheckResult result)
        {
            result.SegmentCount = 0;
            if (_curUsedHead == null)
            {
                return(false);
            }
            int avaSize = _curUsedHead.RemainingSize - _curUsedCount;

            if (avaSize >= length)
            {
                result.SegmentCount = 1;
                return(true);
            }
            result.SegmentCount++;
            SegmentNode usedNode = _curUsedHead;
            SegmentNode nextNode = usedNode.Next;

            do
            {
                if (nextNode == null)
                {
                    return(false);
                }
                avaSize += nextNode.RemainingSize;
                result.SegmentCount++;
                if (avaSize >= length)
                {
                    return(true);
                }
            } while ((nextNode = nextNode.Next) != null);
            return(false);
        }
Exemplo n.º 2
0
 /// <summary>
 ///    ���Լ�鵱ǰʣ��Ŀ������ݳ����Ƿ�����ָ�����ݳ��ȵ�����
 /// </summary>
 /// <param name="length">��Ҫ�������ݳ���</param>
 /// <param name="result">�������ݼ����</param>
 /// <returns>�������False, ��֤���ڲ���û���㹻�Ŀ��������Թ���ȡ</returns>
 private bool InnerCheckEnoughSize(int length, out NetworkDataCheckResult result)
 {
     result.SegmentCount = 0;
     if (_curUsedHead == null) return false;
     int avaSize = _curUsedHead.RemainingSize - _curUsedCount;
     if (avaSize >= length)
     {
         result.SegmentCount = 1;
         return true;
     }
     result.SegmentCount++;
     SegmentNode usedNode = _curUsedHead;
     SegmentNode nextNode = usedNode.Next;
     do
     {
         if (nextNode == null) return false;
         avaSize += nextNode.RemainingSize;
         result.SegmentCount++;
         if (avaSize >= length) return true;
     } while ((nextNode = nextNode.Next) != null);
     return false;
 }