protected override void Produce(object sender, DoWorkEventArgs e) { while (!BackgroundThread.CancellationPending) { Thread.Sleep(1000); if (!RequestFactory.IsApiKeyValid) { Log.Error("VirusTotal API key is invalid. Please set the API key"); Thread.Sleep(5000); continue; } if (!PendingApplications.IsEmpty) { MultiHashRequest multiHashRequest = RequestFactory.GetMultiHashRequest(); foreach (var item in PendingApplications) { if (BackgroundThread.CancellationPending) { break; } else { IApplication application; if (PendingApplications.TryDequeue(out application)) { if (multiHashRequest.AddApplication(application)) { Log.Info("Added '" + application.Name + "' to the request"); } else { Log.Debug("Requeued application because the request is full: " + application.Name); // Requeue the application if the hash request is full. PendingApplications.Enqueue(application); break; } } } } if (BackgroundThread.CancellationPending) { break; } else { Log.Info("Building multi hash request..."); multiHashRequest.Build(); IEvent multiHashRequestEvent = new MultiHashRequestEvent(multiHashRequest); EventConduit.SendEvent(multiHashRequestEvent); } } } e.Cancel = true; }
public override void OnEvent(IEvent _event) { EventType eventType = _event.GetEventType(); switch (eventType) { case EventType.MultiHashRequest: MultiHashRequestEvent multiHashReportRequestEvent = (MultiHashRequestEvent)_event; IRequest multiHashReportRequest = multiHashReportRequestEvent.MultiHashReportRequest; RequestsToExecute.Enqueue(multiHashReportRequest); break; } }