public ElectionInfo(Action <Action> synchronousInvoker, ThreadReader t, IPogDb db, String forum, String url, Int32 postsPerPage, Boolean noLynchAllowed, Language language, String vbVersion) { _synchronousInvoker = synchronousInvoker; _forumURL = forum; _url = url; _postsPerPage = postsPerPage; _noLynchAllowed = noLynchAllowed; _language = language; _vbVersion = vbVersion; _threadId = VBulletinForum.ThreadIdFromUrl(url); _day = 1; DateTime now = DateTime.Now; _endTime = new DateTime(now.Year, now.Month, now.Day, 18, 0, 0, now.Kind); _thread = t; _thread.PageCompleteEvent += new EventHandler <PageCompleteEventArgs>(_thread_PageCompleteEvent); _thread.ReadCompleteEvent += new EventHandler <ReadCompleteEventArgs>(_thread_ReadCompleteEvent); _db = db; _db.WriteThreadDefinition(_threadId, url, false); if (forum.Contains("mindromp.org")) { _final = true; } }
private void LoadGame() { _thread = _forum.Reader(); _thread.PageCompleteEvent += new EventHandler <PageCompleteEventArgs>(_thread_PageCompleteEvent); _thread.ReadCompleteEvent += new EventHandler <ReadCompleteEventArgs>(_thread_ReadCompleteEvent); _thread.PageErrorEvent += new EventHandler <PageErrorEventArgs>(_thread_PageErrorEvent); }
private void Reader_Completed(ThreadReader aReader) { iCompleted.Add(aReader); iReaders.Remove(aReader); // if (iReaders.Count == 0) { iWaiter.Set(); } }
void ReadTurbo(String url) { Int32 _threadId = Misc.TidFromURL(url); ThreadReader t = _forum.Reader(); Action <Action> invoker = a => a(); _count = new ElectionInfo(invoker, t, _db, _forum.ForumURL, url, _forum.PostsPerPage, false, Language.English, "3.8.7"); _count.CheckThread(() => { Console.WriteLine("{0} posts", _count.LastPost); Post p = _db.GetPost(_threadId, 1); ReadPost(p, "OP"); Console.WriteLine("{0} writes... {1}", p.Poster.Name, p.Title); var posts = _db.GetPosts(_threadId, p.Poster.Name); Console.WriteLine("{0} has {1} posts.", p.Poster.Name, posts.Count()); foreach (Post post in posts) { switch (post.Title) { case "Mod: Lynch result": { ReadPost(post, "Lynch"); } break; case "Mod: It is day!": { ReadPost(post, "Day"); } break; case "Mod: Game Over": { ReadPost(post, "End"); } break; case "Vote Count": { ReadPost(post, "VoteCount"); } break; default: { } break; } } }); }
void RunThreadRequest(ThreadReadEventArgs e) { _currentThreadReadRequest = e; Trace.TraceInformation("Request to read {0}", e.URL); Int32 pageStart = (e.StartPost - 1) / _forum.PostsPerPage; Int32 pageEnd = (e.EndPost - 1) / _forum.PostsPerPage; ThreadReader thread = _forum.Reader(); thread.PageCompleteEvent += new EventHandler <PageCompleteEventArgs>(thread_PageCompleteEvent); thread.ReadCompleteEvent += new EventHandler <ReadCompleteEventArgs>(thread_ReadCompleteEvent); thread.ReadPages(e.URL, pageStart, pageEnd, e); }
void thread_PageCompleteEvent(object sender, PageCompleteEventArgs e) { ThreadReader tr = sender as ThreadReader; ThreadReadEventArgs readArgs = e.Cookie as ThreadReadEventArgs; foreach (Post p in e.Posts) { if ((p.PostNumber >= readArgs.StartPost) && (p.PostNumber <= readArgs.EndPost)) { _cms.PublishPost(readArgs.URL, readArgs.ID, p, e.TimeStamp); } } }
private void BindToNewGame(String url) { url = POG.Utils.Misc.NormalizeUrl(url); ThreadReader t = _forum.Reader(); _voteCount = new VoteCount(_synchronousInvoker, t, _db, _forumURL, url, _forum.PostsPerPage); _voteCount.PropertyChanged += new PropertyChangedEventHandler(_voteCount_PropertyChanged); _voteCount.Turbo = _turbo; _voteCount.ChangeDay(_day); _voteCount.Refresh(); _voteCount.CheckThread(); }
public void Read() { Partition(); // iWaiter = new AutoResetEvent(false); for (int i = iReaders.Count - 1; i >= 0; i--) { ThreadReader reader = iReaders[i]; reader.Completed += new ThreadReader.CompletionHandler(Reader_Completed); ThreadPool.QueueUserWorkItem(new WaitCallback(StartReader), reader); } // Now wait using ( iWaiter ) { iWaiter.WaitOne(); } iWaiter = null; }
/// <summary> /// リーダーを開く /// </summary> private bool OpenReader() { aboneDetected = false; retried = false; // 未取得スレッドなら現在の設定を反映させる if (!ThreadIndexer.Exists(Cache, headerInfo)) { headerInfo.UseGzip = useGzip; } // 基本リーダーを作成 reader = CreateBaseReader(headerInfo.BoardInfo.Bbs); // リーダーを開く reader.BufferSize = bufferSize; reader.Open(headerInfo); return(reader.IsOpen); }
/// <summary> /// newbbsに対応したリーダーを作成 /// (既に作成済みであれば何もしない) /// </summary> /// <param name="newbbs"></param> private ThreadReader CreateBaseReader(BbsType newbbs) { if (newbbs != bbsType) { bbsType = newbbs; reader = TypeCreator.CreateThreadReader(newbbs); if (reader is X2chKakoThreadReader) { X2chKakoThreadReader kako = (X2chKakoThreadReader)reader; kako.RetryServers = new BoardInfo[] { retryServer }; } reader.ABone += new EventHandler(OnABoneInternal); reader.Pastlog += new EventHandler <PastlogEventArgs>(OnPastlogInternal); } return(reader); }
private void BindToNewGame(String url) { url = Utils.Misc.NormalizeUrl(url); ThreadReader t = _forum.Reader(); _voteCount = new ElectionInfo(_synchronousInvoker, t, _db, _forum.ForumURL, url, _forum.PostsPerPage, true, _language, _forum.VBVersion); _voteCount.PropertyChanged += new PropertyChangedEventHandler(_voteCount_PropertyChanged); _voteCount.Turbo = _turbo; _moderator = new Moderator(_synchronousInvoker, _voteCount, _forum); txtLastPost.DataBindings.Clear(); udStartPost.DataBindings.Clear(); txtEndPost.DataBindings.Clear(); dtEndTime.DataBindings.Clear(); dtStartTime.DataBindings.Clear(); txtLastPost.DataBindings.Add("Text", _voteCount, "LastPost", false, DataSourceUpdateMode.OnPropertyChanged); udStartPost.DataBindings.Add("Text", _voteCount, "StartPost", false, DataSourceUpdateMode.OnPropertyChanged); txtEndPost.DataBindings.Add("Text", _voteCount, "EndPost", false, DataSourceUpdateMode.OnPropertyChanged); _voteCount.ChangeDay(_day); _voteCount.Refresh(); EnableButtons(false); _voteCount.CheckThread(() => { EnableButtons(true); }); }
private void Partition() { // Read entire file into buffer byte[] data = new byte[iFile.Length]; using (Stream reader = new FileStream(iFile.FullName, FileMode.Open)) { reader.Read(data, 0, data.Length); } // This is the pattern we are searching for: byte[] pattern = new byte[] { (byte)'F', (byte)'r', (byte)'o', (byte)'m', (byte)' ', (byte)' ', (byte)' ', (byte)' ' }; int threadCount = System.Environment.ProcessorCount; int chunkSize = (int)iFile.Length / threadCount; // int blockPosStart = 0; for (int i = 0; i < threadCount; i++) { int pos = 0; int blockPosEnd = Math.Min(data.Length - 1, blockPosStart + chunkSize); while (pos >= 0) { pos = Array.IndexOf(data, pattern[0], blockPosEnd); if (pos > 0) { if (pos + 8 >= data.Length) { break; } else if (pos + 8 < data.Length && data[pos + 7] == pattern[7]) { bool isMatch = CompareByteArrays(pattern, data, pos); if (isMatch) { int length = pos - blockPosStart; System.Console.WriteLine(string.Format("Block {0:d2} @ 0x{1:x8}, length: {2:d8}", i, blockPosStart, length)); // ThreadReader reader = new ThreadReader(data, blockPosStart, length, iStore); iReaders.Add(reader); blockPosStart = pos; break; } } else { // Didn't find a match, move forwards blockPosEnd = pos + 1; } } else { // Searched to end of file and didn't find another block, so just create // a new reader for everything that remains. int length2 = data.Length - blockPosStart; System.Console.WriteLine(string.Format("Block {0:d2} @ 0x{1:x8}, length: {2:d8}", i, blockPosStart, length2)); // ThreadReader reader2 = new ThreadReader(data, blockPosStart, length2, iStore); iReaders.Add(reader2); break; } } } }
private static void StartReader(object aThreadReader) { ThreadReader reader = (ThreadReader)aThreadReader; reader.Read(); }