public void Init() { var config = new Configuration(uri: new UriBuilder(_featureHost.Url).Uri, requestHeaders: _featureHost.ServerEvaluation ? BuildContextHeader() : null); _eventSource = new EventSource(config); // _eventSource.Closed += (sender, args) => // { // Console.WriteLine("source closed\n"); // }; _eventSource.MessageReceived += (sender, args) => { SSEResultState?state; switch (args.EventName) { case "features": state = SSEResultState.Features; break; case "feature": state = SSEResultState.Feature; break; case "failure": state = SSEResultState.Failure; break; case "delete_feature": state = SSEResultState.Deletefeature; break; default: state = null; break; } // Console.WriteLine($"The state was {state} with value {args.Message.Data}\n"); if (state == null) { return; } _repository.Notify(state.Value, args.Message.Data); if (state == SSEResultState.Failure) { _eventSource.Close(); } }; _eventSource.StartAsync(); }
public void Init() { var config = new Configuration(uri: new UriBuilder(_featureHost.Url).Uri, backoffResetThreshold: TimeSpan.MaxValue, delayRetryDuration: TimeSpan.Zero, requestHeaders: _featureHost.ServerEvaluation ? BuildContextHeader() : null); if (FeatureLogging.InfoLogger != null) { FeatureLogging.InfoLogger(this, $"Opening connection to ${_featureHost.Url}"); } _eventSource = new EventSource(config); if (FeatureLogging.DebugLogger != null) { _eventSource.Closed += (sender, args) => { FeatureLogging.DebugLogger(this, "source closed"); }; } _eventSource.MessageReceived += (sender, args) => { SSEResultState?state; switch (args.EventName) { case "features": state = SSEResultState.Features; if (FeatureLogging.TraceLogger != null) { FeatureLogging.TraceLogger(this, "featurehub: fresh feature set received, ready to rumble"); } break; case "feature": state = SSEResultState.Feature; break; case "failure": state = SSEResultState.Failure; break; case "delete_feature": state = SSEResultState.Deletefeature; break; case "bye": state = null; if (FeatureLogging.TraceLogger != null) { FeatureLogging.TraceLogger(this, "featurehub: renewing connection process started"); } break; default: state = null; break; } if (FeatureLogging.TraceLogger != null) { FeatureLogging.TraceLogger(this, $"featurehub: The state was {state} with value {args.Message.Data}"); } if (state == null) { return; } _repository.Notify(state.Value, args.Message.Data); if (state == SSEResultState.Failure) { if (FeatureLogging.ErrorLogger != null) { FeatureLogging.ErrorLogger(this, "featurehub: received a failure so closing"); } _eventSource.Close(); } }; _eventSource.StartAsync(); }