/// <summary> /// Called when a page is received to store in the cache /// </summary> /// <param name="pageNumber">Page number</param> /// <param name="subPageNumber">Subpage number</param> /// <param name="pageData">PageData </param> /// <param name="vbiLines">VBI lines</param> public void PageReceived(int pageNumber, int subPageNumber, byte[] pageData, string vbiLines) { //if (pageNumber == 0x600) Trace.WriteLine(String.Format("PageReceived {0:X}/{1:X}", pageNumber, subPageNumber)); if (pageNumber < MIN_PAGE || pageNumber >= MAX_PAGE) throw new ArgumentOutOfRangeException("pageNumber"); if (_pageCache[pageNumber] == null) { _pageCache[pageNumber] = new TeletextPage(pageNumber); } if (subPageNumber == 0) { if (_pageCache[pageNumber].SubPageCount > 0) { for (int i = 1; i <= _pageCache[pageNumber].SubPageCount; ++i) { _pageCache[pageNumber].Delete(pageNumber, i); if (OnPageDeleted != null) { OnPageDeleted(pageNumber, i); } } } } if (subPageNumber > 0) { subPageNumber--; } bool isUpdate, isNew, isDeleted; _pageCache[pageNumber].SubPageReceived(pageNumber, ref subPageNumber, ref pageData, out isUpdate, out isNew, out isDeleted, vbiLines); if (isNew) { if (OnPageAdded != null) { OnPageAdded(pageNumber, subPageNumber); } } if (isDeleted) { if (OnPageDeleted != null) { OnPageDeleted(pageNumber, subPageNumber); } } if (isUpdate) { if (OnPageUpdated != null) { OnPageUpdated(pageNumber, subPageNumber); } } TimeSpan ts = DateTime.Now - _checkTimer; if (ts.TotalSeconds < 10) return; for (pageNumber = MIN_PAGE; pageNumber < MAX_PAGE; pageNumber++) { if (_pageCache[pageNumber] == null) continue; if (_pageCache[pageNumber].SubPageCount < 0) continue; ts = DateTime.Now - _pageCache[pageNumber].LastTimeReceived; if (ts.TotalSeconds >= 120) { //if (pageNumber == 0x600) // Trace.WriteLine("timeout on 600"); _pageCache[pageNumber].Dispose(); _pageCache[pageNumber] = null; if (OnPageDeleted != null) { OnPageDeleted(pageNumber, 0); } } } _checkTimer = DateTime.Now; }
/// <summary> /// Called when a page is received to store in the cache /// </summary> /// <param name="pageNumber">Page number</param> /// <param name="subPageNumber">Subpage number</param> /// <param name="pageData">PageData </param> /// <param name="vbiLines">VBI lines</param> public void PageReceived(int pageNumber, int subPageNumber, byte[] pageData, string vbiLines) { //if (pageNumber == 0x600) Trace.WriteLine(String.Format("PageReceived {0:X}/{1:X}", pageNumber, subPageNumber)); if (pageNumber < MIN_PAGE || pageNumber >= MAX_PAGE) { throw new ArgumentOutOfRangeException("pageNumber"); } if (_pageCache[pageNumber] == null) { _pageCache[pageNumber] = new TeletextPage(pageNumber); } if (subPageNumber == 0) { if (_pageCache[pageNumber].SubPageCount > 0) { for (int i = 1; i <= _pageCache[pageNumber].SubPageCount; ++i) { _pageCache[pageNumber].Delete(pageNumber, i); if (OnPageDeleted != null) { OnPageDeleted(pageNumber, i); } } } } if (subPageNumber > 0) { subPageNumber--; } bool isUpdate, isNew, isDeleted; _pageCache[pageNumber].SubPageReceived(pageNumber, ref subPageNumber, ref pageData, out isUpdate, out isNew, out isDeleted, vbiLines); if (isNew) { if (OnPageAdded != null) { OnPageAdded(pageNumber, subPageNumber); } } if (isDeleted) { if (OnPageDeleted != null) { OnPageDeleted(pageNumber, subPageNumber); } } if (isUpdate) { if (OnPageUpdated != null) { OnPageUpdated(pageNumber, subPageNumber); } } TimeSpan ts = DateTime.Now - _checkTimer; if (ts.TotalSeconds < 10) { return; } for (pageNumber = MIN_PAGE; pageNumber < MAX_PAGE; pageNumber++) { if (_pageCache[pageNumber] == null) { continue; } if (_pageCache[pageNumber].SubPageCount < 0) { continue; } ts = DateTime.Now - _pageCache[pageNumber].LastTimeReceived; if (ts.TotalSeconds >= 120) { //if (pageNumber == 0x600) // Trace.WriteLine("timeout on 600"); _pageCache[pageNumber].Dispose(); _pageCache[pageNumber] = null; if (OnPageDeleted != null) { OnPageDeleted(pageNumber, 0); } } } _checkTimer = DateTime.Now; }