示例#1
0
 private void SaveRequest(long offset, DirectionOfContent direction)
 {
     _lastRequest = new PageRequest();
     _lastRequest.LastOffsetAsked = offset;
     _lastRequest.LastAskTime     = DateTime.Now;
     _lastRequest.LastDirection   = direction;
 }
示例#2
0
 public void RequestForOffset(long offset, DirectionOfContent direction)
 {
     Log.Debug("RequestForOFfset " + offset + " " + direction);
     if (_stream == null)
     {
         return;
     }
     if (!IsValidOffset(offset))
     {
         return;
     }
     if (IsInCurrentPage(offset))
     {
         return;
     }
     SaveRequest(offset, direction);
 }
示例#3
0
        private void LoadPageForOffset(PageRequest request)
        {
            if (_stream == null)
            {
                return;
            }
            long requestedOffset         = request.LastOffsetAsked;
            DirectionOfContent direction = request.LastDirection;

            long actualOffset = 0;

            if (direction == DirectionOfContent.Previous)
            {
                long temp = requestedOffset - MAX_PAGE_SIZE_IN_BYTES + PAGE_OVERLAPPING_IN_BYTES;
                actualOffset = Math.Max(0, temp);
            }
            if (direction == DirectionOfContent.Folowing)
            {
                if (_fileWatcher.SizeOfFile > MAX_PAGE_SIZE_IN_BYTES)
                {
                    long temp = _fileWatcher.SizeOfFile - MAX_PAGE_SIZE_IN_BYTES;
                    actualOffset = Math.Min(requestedOffset - PAGE_OVERLAPPING_IN_BYTES, temp);
                }
                else
                {
                    Log.Error("How the hell did you request this offset ??:" + requestedOffset);
                    actualOffset = requestedOffset - PAGE_OVERLAPPING_IN_BYTES;
                }
            }

            if (actualOffset < 0)
            {
                Log.Error(" BUG : actual offset = " + actualOffset + "reseting it to 0");
                actualOffset = 0;
            }

            _stream.SetPosition(actualOffset, SeekOrigin.Begin);
            //var a = _stream.GetPosition();
            FillCurrentPage(requestedOffset);
            NewContentIsAvailable = true;
            OnPageLoaded();
        }