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();
        }
Example #2
0
        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();
        }