Exemplo n.º 1
0
        public void Init(string url, FeatureHubRepository repository)
        {
            var config = new Configuration(uri: new UriBuilder(url).Uri);

            _eventSource = new EventSource(config);
            _eventSource.MessageReceived += (sender, args) =>
            {
                // Console.WriteLine($"{args.EventName}:\n\t {args.Message.Data}");

                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;
                }

                if (state == null)
                {
                    return;
                }

                repository.Notify(state.Value, args.Message.Data);

                if (state == SSEResultState.Failure)
                {
                    _eventSource.Close();
                }
            };

            _eventSource.StartAsync();
        }
        public void Init(string url, FeatureHubRepository repository)
        {
            if (!_initialized)
            {
                _initialized = true;
                _url         = url;
                _repository  = repository;

                xFeatureHubHeader = _repository.ClientContext.GenerateHeader();

                _repository.ClientContext.ContextUpdateHandler += (sender, header) =>
                {
                    if (header == xFeatureHubHeader || (_eventSource.ReadyState != ReadyState.Open && _eventSource.ReadyState != ReadyState.Connecting))
                    {
                        return;
                    }

                    xFeatureHubHeader = header;
                    _eventSource.Close();
                    Init(_url, _repository);
                };
            }

            var headers = new Dictionary <string, string>();

            if (xFeatureHubHeader != null)
            {
                headers.Add("x-featurehub", xFeatureHubHeader);
            }
            var config = new Configuration(uri: new UriBuilder(url).Uri, requestHeaders: headers);

            _eventSource = new EventSource(config);
            _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;
                }

                if (state == null)
                {
                    return;
                }

                repository.Notify(state.Value, args.Message.Data);

                if (state == SSEResultState.Failure)
                {
                    _eventSource.Close();
                }
            };

            _eventSource.StartAsync();
        }