/// <summary> /// Constructs a StreamManager instance. /// </summary> /// <param name="streamProcessor">A platform-specific implementation of IStreamProcessor.</param> /// <param name="streamProperties">HTTP request properties for the stream.</param> /// <param name="config">An implementation of IBaseConfiguration.</param> /// <param name="clientEnvironment">A subclass of ClientEnvironment.</param> /// <param name="eventSourceCreator">Null in normal usage; pass a non-null delegate if you /// are in a unit test and want to mock out the event source.</param> public StreamManager(IStreamProcessor streamProcessor, StreamProperties streamProperties, IBaseConfiguration config, ClientEnvironment clientEnvironment, EventSourceCreator eventSourceCreator) { _streamProcessor = streamProcessor; _streamProperties = streamProperties; _config = config; _clientEnvironment = clientEnvironment; _esCreator = eventSourceCreator ?? DefaultEventSourceCreator; _initTask = new TaskCompletionSource <bool>(); _backOff = new EventSource.ExponentialBackoffWithDecorrelation(_config.ReconnectTime, TimeSpan.FromMilliseconds(30000)); }
private IEventSource DefaultEventSourceCreator(StreamProperties streamProperties, IDictionary <string, string> headers) { EventSource.Configuration config = EventSource.Configuration.Builder(streamProperties.StreamUri) .Method(streamProperties.Method) .RequestBodyFactory(() => streamProperties.RequestBody) .MessageHandler(_config.HttpClientHandler) .ConnectionTimeout(_config.HttpClientTimeout) .DelayRetryDuration(_config.ReconnectTime) .ReadTimeout(_config.ReadTimeout) .RequestHeaders(headers) .Logger(LogManager.GetLogger(typeof(EventSource.EventSource))) .Build(); return(new EventSource.EventSource(config)); }