internal static void ProcessQueue() { RequestEventInfo requestEvent; while (requestEventQueue.TryDequeue(out requestEvent)) { HTTPRequest source = requestEvent.SourceRequest; if (HTTPManager.Logger.Level == Loglevels.All) { HTTPManager.Logger.Information("RequestEventHelper", "Processing request event: " + requestEvent.ToString(), source.Context); } if (OnEvent != null) { try { OnEvent(requestEvent); } catch (Exception ex) { HTTPManager.Logger.Exception("RequestEventHelper", "ProcessQueue", ex, source.Context); } } switch (requestEvent.Event) { case RequestEvents.StreamingData: { var response = source.Response; if (response != null) { System.Threading.Interlocked.Decrement(ref response.UnprocessedFragments); } bool reuseBuffer = true; try { if (source.OnStreamingData != null) { reuseBuffer = source.OnStreamingData(source, response, requestEvent.Data, requestEvent.DataLength); } } catch (Exception ex) { HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.StreamingData", ex, source.Context); } if (reuseBuffer) { BufferPool.Release(requestEvent.Data); } break; } case RequestEvents.DownloadProgress: try { if (source.OnDownloadProgress != null) { source.OnDownloadProgress(source, requestEvent.Progress, requestEvent.ProgressLength); } } catch (Exception ex) { HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.DownloadProgress", ex, source.Context); } break; case RequestEvents.UploadProgress: try { if (source.OnUploadProgress != null) { source.OnUploadProgress(source, requestEvent.Progress, requestEvent.ProgressLength); } } catch (Exception ex) { HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.UploadProgress", ex, source.Context); } break; case RequestEvents.Upgraded: try { if (source.OnUpgraded != null) { source.OnUpgraded(source, source.Response); } } catch (Exception ex) { HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.Upgraded", ex, source.Context); } IProtocol protocol = source.Response as IProtocol; if (protocol != null) { ProtocolEventHelper.AddProtocol(protocol); } break; case RequestEvents.Resend: source.State = HTTPRequestStates.Initial; var host = HostManager.GetHost(source.CurrentUri.Host); host.Send(source); break; case RequestEvents.Headers: { try { var response = source.Response; if (source.OnHeadersReceived != null && response != null) { source.OnHeadersReceived(source, response); } } catch (Exception ex) { HTTPManager.Logger.Exception("RequestEventHelper", "Process RequestEventQueue - RequestEvents.Headers", ex, source.Context); } break; } case RequestEvents.StateChange: try { RequestEventHelper.HandleRequestStateChange(requestEvent); } catch (Exception ex) { HTTPManager.Logger.Exception("RequestEventHelper", "HandleRequestStateChange", ex, source.Context); } break; } } }