示例#1
0
        private void analyzeKickAssArchive(String archiveLocation)
        {
            MemoryMappedFile memoryMappedArchive = MemoryMappedFile.CreateFromFile(archiveLocation, FileMode.Open);
            Encoding         encoding            = Encoding.GetEncoding("iso-8859-1"); // get extended Ascii Encoding

            int maxOffset = 1000000; int start = startingBlock * maxOffset + 1000; int overlap = 1000;

            waitForThreadPoolEvent = new ManualResetEvent(false);

            threadPoolCounter = archiveBlockCount; // TODO: change when you change the file, also, progress bar maximum value needs to change accordingly
            MemoryMappedViewAccessor memoryMappedAccessor;
            ArchiveBlockArguments    archiveBlockArguments;



            for (int i = startingBlock; i < threadPoolCounter - 1; i++)
            {
                memoryMappedAccessor  = memoryMappedArchive.CreateViewAccessor(start - overlap, maxOffset + overlap);
                archiveBlockArguments = new ArchiveBlockArguments(encoding, memoryMappedAccessor, maxOffset + overlap, start - overlap, i);
                ThreadPool.QueueUserWorkItem(new WaitCallback(analyzeArchiveBlock), archiveBlockArguments);
                start += maxOffset;
            }

            // last block:
            memoryMappedAccessor  = memoryMappedArchive.CreateViewAccessor(start - overlap, archiveSize - (start - overlap));
            archiveBlockArguments = new ArchiveBlockArguments(encoding, memoryMappedAccessor, maxOffset + overlap, start - overlap, threadPoolCounter);
            ThreadPool.QueueUserWorkItem(new WaitCallback(analyzeArchiveBlock), archiveBlockArguments);

            waitForThreadPoolEvent.WaitOne();

            //MemoryMappedViewAccessor memoryMappedAccessor = memoryMappedArchive.CreateViewAccessor(0, 1498824695);
        }
示例#2
0
        private void analyzeArchiveBlock(Object obj)
        {
            ArchiveBlockArguments arguments = (ArchiveBlockArguments)obj;
            Encoding encoding = arguments.encoding;
            MemoryMappedViewAccessor memoryMappedAccessor = arguments.memoryMappedAccessor;
            int maxOffset     = arguments.maxOffset;
            int startingPoint = arguments.startingPoint;
            int blockNr       = arguments.blockNr;

            Byte[] bytes = new Byte[maxOffset];
            for (int i = 0; i < maxOffset; i++)
            {
                Byte b = memoryMappedAccessor.ReadByte(i);
                bytes[i] = b;
            }

            //String s = System.Text.Encoding.ASCII.GetString(bts); //works as well
            String archiveBlock = encoding.GetString(bytes);

            //Program.debug("Current Thread Id: " + Thread.CurrentThread.ManagedThreadId + " is analyzing Archive Block of size: " + maxOffset);

            //Regex regex = new Regex("<div class=\"torrentname\">" + @"\s*" + "<a href=\"" + @"[^ ]*");
            Regex regex = new Regex("http://kickass.to/[^.]*.html");

            MatchCollection mc = regex.Matches(archiveBlock);

            foreach (Match m in mc)
            {
                analyzeTorrentPage(m.ToString(), 0);
            }

            memoryMappedAccessor.Dispose();

            Program.debug("Thread " + Thread.CurrentThread.ManagedThreadId + " finished analyzing memory block starting from: " + startingPoint);
            Program.archiveProgressBarStep();
            progress[blockNr] = true;
            determineProgress();

            if (Interlocked.Decrement(ref threadPoolCounter) == 0)
            {
                waitForThreadPoolEvent.Set();
            }
        }