Exemple #1
0
        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;
            }
        }
Exemple #2
0
 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);
 }
Exemple #3
0
 private void Reader_Completed(ThreadReader aReader)
 {
     iCompleted.Add(aReader);
     iReaders.Remove(aReader);
     //
     if (iReaders.Count == 0)
     {
         iWaiter.Set();
     }
 }
Exemple #4
0
        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;
                    }
                }
            });
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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();
        }
Exemple #8
0
            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); });
        }
Exemple #12
0
            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;
                        }
                    }
                }
            }
Exemple #13
0
            private static void StartReader(object aThreadReader)
            {
                ThreadReader reader = (ThreadReader)aThreadReader;

                reader.Read();
            }