/// <summary> /// 次スレチェックスレッド /// </summary> protected virtual void Checking() { ThreadListReader listReader = null; List <ThreadHeader> tempItems = new List <ThreadHeader>(); BoardInfo board = header.BoardInfo; try { matchItems.Clear(); listReader = TypeCreator.CreateThreadListReader(board.Bbs); if (listReader.Open(board)) { while (listReader.Read(tempItems) != 0) { ; } matchItems = Check(header, tempItems); } OnSuccess(this, new ThreadHeaderEventArgs(matchItems)); } catch (Exception ex) { TwinDll.Output(ex); } finally { if (listReader != null) { listReader.Close(); } } }
/// <summary> /// 巡回を開始 (更新チェックのみ) /// </summary> public override void Patrol() { // 更新対象の板をすべてコレクションに詰める Hashtable boardList = new Hashtable(); foreach (ThreadHeader item1 in Items) { BoardInfo board = item1.BoardInfo; OnPatroling(new PatrolEventArgs(item1)); // スレッド一覧を受信 if (!boardList.Contains(board.Url)) { OnStatusTextChanged(board.Url + "subject.txt を取得中..."); List <ThreadHeader> headers = new List <ThreadHeader>(); ThreadListReader listReader = TypeCreator.CreateThreadListReader(board.Bbs); listReader.ServerChange += new EventHandler <ServerChangeEventArgs>(delegate(object sender, ServerChangeEventArgs e) { item1.BoardInfo.Server = board.Server = e.NewBoard.Server; }); try { if (listReader.Open(board)) { while (listReader.Read(headers) != 0) { ; } } } catch {} finally { if (listReader != null) { listReader.Close(); } } boardList[board.Url] = headers; } // レス数が増えていれば更新されている、存在しなければdat落ち List <ThreadHeader> targetList = (List <ThreadHeader>)boardList[board.Url]; int index = targetList.IndexOf(item1); if (index == -1 && targetList.Count > 0) { item1.Pastlog = true; OnUpdated(new PatrolEventArgs(item1)); } else if (index >= 0 && item1.GotResCount < targetList[index].ResCount) { item1.ResCount = targetList[index].ResCount; OnUpdated(new PatrolEventArgs(item1)); } } }