private void SaveRequest(long offset, DirectionOfContent direction) { _lastRequest = new PageRequest(); _lastRequest.LastOffsetAsked = offset; _lastRequest.LastAskTime = DateTime.Now; _lastRequest.LastDirection = direction; }
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); }
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(); }