public Progress(BlockConsumerContainer hashContainer) { startTime = DateTime.Now; this.blockConsumers = hashContainer; source = ((ByteStreamToBlock)hashContainer.b.BlockSource).Source; }
public FileEnvironment(Version version, BlockConsumerContainer container, FileInfo fileInfo, DateTime startedOn, int totalFiles, int processedFiles, long totalBytes, long processedBytes) { FileStartedOn = DateTime.Now; StartedOn = startedOn; TotalFiles = totalFiles; ProcessedFiles = processedFiles; TotalBytes = totalBytes; ProcessedBytes = processedBytes; File = fileInfo; Container = container; Exceptions = new FileProcessingExceptionCollection(version, fileInfo != null ? fileInfo.FullName : null); }
private static BlockConsumerContainer CreateContainer(int blockCount, int blockSize) { BlockConsumerContainer container = new BlockConsumerContainer(blockCount, blockSize * 1024); //container.RegisterBlockConsumer("TIGER", new HashCalculator("TIGER", new TigerForTTH(), h => BaseConverter.ToString(h.Hash))); container.RegisterBlockConsumer("TIGER", new HashCalculator("TIGER", new Tiger(), h => BaseConverter.ToString(h.Hash))); container.RegisterBlockConsumer("AICH", new HashCalculator("AICH", new Aich(), h => BaseConverter.ToString(h.Hash))); container.RegisterBlockConsumer("SHA1", new HashCalculator("SHA1", new SHA1CryptoServiceProvider(), h => BaseConverter.ToString(h.Hash))); container.RegisterBlockConsumer("CRC", new HashCalculator("CRC", new Crc32(), h => BaseConverter.ToString(h.Hash))); container.RegisterBlockConsumer("MD4", new HashCalculator("MD4", new Md4(), h => BaseConverter.ToString(h.Hash))); container.RegisterBlockConsumer("MD5", new HashCalculator("MD5", new MD5CryptoServiceProvider(), h => BaseConverter.ToString(h.Hash))); container.RegisterBlockConsumer("TTH", new HashCalculator("TTH", new TTH(Environment.ProcessorCount), h => BaseConverter.ToString(h.Hash, BaseOption.Base32))); //container.RegisterBlockConsumer("TTH2", new HashCalculator("TTH2", new TTH2(Environment.ProcessorCount), h => BaseConverter.ToString(h.Hash, BaseOption.Base32))); //container.RegisterBlockConsumer("TTH3", new HashCalculator("TTH3", new TTH3(Environment.ProcessorCount), h => BaseConverter.ToString(h.Hash, BaseOption.Base32))); container.RegisterBlockConsumer("Matroska", new MatroskaParser("Matroska")); container.RegisterBlockConsumer("Ogm/Ogg", new OgmOggParser("Ogm/Ogg")); container.RegisterBlockConsumer("ED2K", new HashCalculator("ED2K", new Ed2k(), h => BaseConverter.ToString(h.Hash) + (((Ed2k)h).BlueIsRed ? "" : " | " + BaseConverter.ToString(((Ed2k)h).BlueHash)) )); return container; }
private static void DisplayBuffer(FileEnvironment e, BlockConsumerContainer.Progress progress) { double bufferSize = 0; int charCount = 0; long bytesProcessed = 0; int lastLineIndex = 0, maxNameLength = 0; long fileSize = e.File == null ? e.TotalBytes : e.File.Length; int consoleWidth = Console.BufferWidth != 0 ? Console.BufferWidth : (Console.WindowWidth != 0 ? Console.WindowWidth : 80); string output; Average[] mean = null; if(progress != null) { mean = new Average[progress.BlockConsumerCount]; for(int i = 0;i < mean.Length;i++) mean[i] = new Average(); for(int i = 0;i < progress.BlockConsumerCount;i++) if(maxNameLength < progress.Name(i).Length) maxNameLength = progress.Name(i).Length + 1; if(maxNameLength < "Progress".Length) maxNameLength = "Progress".Length; CursorVisible = false; output = "Bar: Buffer usage | blocksize: " + blockSize + "KB | blockCount: " + blockCount + "\n"; for(int i = 0;i < progress.BlockConsumerCount;i++) { output += progress.Name(i).PadRight(maxNameLength + 1) + "[" + "".PadRight(consoleWidth - maxNameLength - 4) + "]\n"; } output += "\n" + "Progress".PadRight(maxNameLength + 1) + "[" + "".PadRight(consoleWidth - maxNameLength - 4) + "]\n\n\n"; Console.Write(output); } lastLineIndex = Console.CursorTop; bool doLoop; int barLength = consoleWidth - maxNameLength - 4; do { doLoop = progress != null && !progress.HasFinished; if(progress != null) { bytesProcessed = 0; for(int i = 0;i < progress.BlockConsumerCount;i++) { mean[i].Add(progress.BlockCount(i)); bufferSize = mean[i].Calc(10); if(bytesProcessed > progress.ProcessedBytes(i) || bytesProcessed == 0) bytesProcessed = progress.ProcessedBytes(i); charCount = bufferSize != 0 ? (int)((bufferSize / (double)blockCount) * barLength) : 0; charCount = progress.ProcessedBytes(i) == fileSize ? 0 : charCount; Console.SetCursorPosition(maxNameLength + 2, lastLineIndex - progress.BlockConsumerCount + i - 4); Console.Write("".PadLeft(charCount, '*') + "".PadRight(barLength - charCount, ' ')); } Console.SetCursorPosition(maxNameLength + 2, lastLineIndex - 3); charCount = fileSize != 0 ? (int)((double)bytesProcessed / (double)fileSize * barLength) : barLength; Console.WriteLine("".PadLeft(charCount, '*') + "".PadRight(barLength - charCount, ' ')); output = "Position: " + (bytesProcessed >> 20).ToString().PadLeft(3) + "MB/" + (fileSize >> 20) + "MB " + "Elapsed time: " + progress.TimeElapsed.ToFormatedString() + " " + "Speed: " + Math.Max((int)((bytesProcessed >> 20) / progress.TimeElapsed.TotalSeconds), 0) + "MB/s"; output += "".PadLeft(output.Length < consoleWidth ? consoleWidth - output.Length - 1 : 0, ' '); Console.WriteLine(output); } else { bytesProcessed = fileSize; } bytesProcessed += e.ProcessedBytes; var totalTimeElapsed = DateTime.Now - e.StartedOn; var eta = e.TotalBytes * (totalTimeElapsed.TotalSeconds / bytesProcessed) - totalTimeElapsed.TotalSeconds + 0.5; if(!double.IsInfinity(eta)) { output = "Files: " + (e.ProcessedFiles + 1) + "/" + e.TotalFiles + " " + "Bytes: " + (bytesProcessed >> 20) + "MB/" + (e.TotalBytes >> 20) + "MB " + "Elapsed: " + totalTimeElapsed.ToFormatedString() + " " + "ETA: " + TimeSpan.FromSeconds(eta).ToFormatedString(); //output += "".PadLeft(output.Length < consoleWidth ? consoleWidth - output.Length - 1 : 0, ' '); Console.WriteLine(output.PadRight(consoleWidth - 1)); } #if(HasACreq) if(anidb != null) { output = "ACReq( Done: " + sentACReqs + " Todo: " + (e.TotalFiles - sentACReqs - failedACReqs - anidb.UnsentQueryCount) + " Failed: " + failedACReqs + " Pending: " + anidb.UnsentQueryCount + " )"; Console.Write(output.PadRight(consoleWidth - 1)); } #endif if(doLoop) Thread.Sleep(80); } while(doLoop); if(progress != null) { for(int i = 0;i < progress.BlockConsumerCount;i++) { Console.SetCursorPosition(maxNameLength + 2, lastLineIndex - progress.BlockConsumerCount + i - 4); Console.Write(progress.BlockConsumerObj(i).ToString()); } Console.SetCursorPosition(0, lastLineIndex); } Console.WriteLine(); CursorVisible = true; }