private static string CreateStatusJson(TableDependencyStatuses tableDependencyStatuses, DateTimeOffset when)
        {
            var status = new VersionedTableDependencyStatus(tableDependencyStatuses, when);

            var message = JsonConvert.SerializeObject(status);

            return(message);
        }
        private async Task PublishStatus(VersionedTableDependencyStatus versionedTableDependencyStatus)
        {
            string jsonStatusVersion = Serialize(versionedTableDependencyStatus);

            await redisPublisher.SetStringAsync(StatusChannelName, jsonStatusVersion);

            await redisPublisher.PublishAsync(StatusChannelName, jsonStatusVersion);
        }
        private string CreateStatusJson(TableDependencyStatuses tableDependencyStatuses)
        {
            var status = new VersionedTableDependencyStatus(tableDependencyStatuses, DateTimeOffset.Now);

            var jsonStatus = JsonConvert.SerializeObject(status);

            return(jsonStatus);
        }
예제 #4
0
        private void SubscribeToConnectionChanged()
        {
            redisSubscriber.WhenIsConnectedChanges
            .Subscribe(isConnected =>
            {
                if (isConnected)
                {
                    SubscribeToStatusChanges();
                }
                else
                {
                    statusChangesSubscription.Disposable = Disposable.Empty;

                    lastStatus = new VersionedTableDependencyStatus(VersionedTableDependencyStatus.TableDependencyStatuses.None, DateTimeOffset.MinValue);

                    reactiveData.Publish(lastStatus);
                }
            })
            .DisposeWith(CompositeDisposable);
        }
예제 #5
0
        private void SubscribeToStatusChanges()
        {
            var statusMessagesSource = CreateStatusChangedSource();

            var pullStatusMessageSource = Observable.Defer(() => redisSubscriber.GetStringAsync(StatusChannelName).ToObservable(schedulersFactory.ThreadPool));

            statusChangesSubscription.Disposable =
                statusMessagesSource
                .Merge(pullStatusMessageSource)
                .Where(c => !string.IsNullOrEmpty(c))
                .Select(DeserializeVersionedTableDependencyStatus)
                .Subscribe(status =>
            {
                if (lastStatus == null || status.Timestamp == DateTimeOffset.MinValue || lastStatus.Timestamp < status.Timestamp)
                {
                    lastStatus = status;

                    reactiveData.Publish(lastStatus);
                }
            });
        }
        protected async Task OnSqlTableDependencyStatusChanged(TableDependencyStatus status)
        {
            statusVersion = new VersionedTableDependencyStatus(status.Convert(), DateTimeOffset.Now);

            await PublishStatus(statusVersion);
        }
예제 #7
0
 public void Publish(VersionedTableDependencyStatus status)
 {
     whenStatusChanges.OnNext(status);
 }