public void ProcessRivenQueue(CancellationToken c) { var parser = _rivenParserFactory.CreateRivenParser(); while (true) { if (c.IsCancellationRequested) { break; } RivenParseTaskWorkItem item = null; if (!_rivenWorkQueue.TryDequeue(out item) || item == null) { Thread.Sleep(250); continue; } foreach (var r in item.RivenWorkDetails) { using (var croppedCopy = new Bitmap(r.CroppedRivenBitmap)) { using (var cleaned = _rivenCleaner.CleanRiven(croppedCopy)) { using (var cleanedCopy = new Bitmap(cleaned)) { var riven = parser.ParseRivenTextFromImage(cleanedCopy, null); riven.Polarity = parser.ParseRivenPolarityFromColorImage(croppedCopy); riven.Rank = parser.ParseRivenRankFromColorImage(croppedCopy); riven.MessagePlacementId = r.RivenIndex; riven.Name = r.RivenName; _dataSender.AsyncSendRivenImage(riven.ImageId, croppedCopy); r.CroppedRivenBitmap.Dispose(); item.Message.Rivens.Add(riven); } } } } _messageCache.Enqueue(item.Message.Author + item.Message.EnhancedMessage); _messageCacheDetails[item.Message.Author + item.Message.EnhancedMessage] = item.Message; _dataSender.AsyncSendChatMessage(item.Message); } if (parser is IDisposable) { ((IDisposable)parser).Dispose(); } }
public static void ProcessRivenQueue(CancellationToken c, IRivenParserFactory factory, IDataSender dataSender, ConcurrentQueue <RivenParseTaskWorkItem> queue, IRivenCleaner cleaner) { var parser = factory.CreateRivenParser(); while (true) { if (c.IsCancellationRequested) { break; } RivenParseTaskWorkItem item = null; if (!queue.TryDequeue(out item) || item == null) { Thread.Sleep(250); continue; } foreach (var r in item.RivenWorkDetails) { using (var croppedCopy = new Bitmap(r.CroppedRivenBitmap)) { using (var cleaned = cleaner.CleanRiven(croppedCopy)) { using (var cleanedCopy = new Bitmap(cleaned)) { var riven = parser.ParseRivenTextFromImage(cleanedCopy, null); riven.Polarity = parser.ParseRivenPolarityFromColorImage(croppedCopy); riven.Rank = parser.ParseRivenRankFromColorImage(croppedCopy); riven.MessagePlacementId = r.RivenIndex; riven.Name = r.RivenName; dataSender.AsyncSendRivenImage(riven.ImageID, croppedCopy); r.CroppedRivenBitmap.Dispose(); item.Model.Rivens.Add(riven); } } } dataSender.AsyncSendChatMessage(item.Model); } } if (parser is IDisposable) { ((IDisposable)parser).Dispose(); } }