Пример #1
0
        internal async Task OnStopped(QueryETag etag, string error)
        {
            if (_instancesByKey.TryGetValue(etag.Key, out var instance))
            {
                await _notifier.NotifyStopped(etag, error, instance.ConnectionIds);
            }

            _changedWindow.OnChanged(etag);
        }
Пример #2
0
        internal void OnChanged(QueryETag etag)
        {
            var now = Clock.Now;

            _queriesByKey[etag.Key] = new QueryWindow(etag, now);

            if (now - _whenTrimmed > _trimDelay)
            {
                TrimQueries(now);
            }
        }
Пример #3
0
        public static Task <QueryContent> ReadQueryContent(this IQueryDb db, string etag, Type type, Id id) =>
        db.ReadQueryContent(area =>
        {
            if (!string.IsNullOrWhiteSpace(etag))
            {
                return(QueryETag.From(etag, area));
            }

            var key = FlowKey.From(area.Queries[type], id);

            return(QueryETag.From(key, TimelinePosition.None));
        });
Пример #4
0
        public async Task SubscribeToChanged(Id connectionId, QueryETag etag)
        {
            var connection = _connectionsById.GetOrAdd(connectionId, _ => new QueryConnection(connectionId, this));
            var instance   = _instancesByKey.GetOrAdd(etag.Key, _ => new QueryInstance(etag.Key, this));

            connection.Subscribe(instance);

            var latestETag = _changedWindow.OnSubscribed(etag);

            if (latestETag != etag)
            {
                await _notifier.NotifyChanged(latestETag, Many.Of(connectionId));
            }
        }
Пример #5
0
 public QueryContent(QueryETag etag, Stream content)
 {
     ETag  = etag;
     _data = content;
 }
Пример #6
0
 public QueryContent(QueryETag etag)
 {
     ETag        = etag;
     NotModified = true;
 }
Пример #7
0
 public Task OnQueryStopped(QueryETag query, string error) =>
 _queries.OnStopped(query, error);
Пример #8
0
 public Task OnQueryChanged(QueryETag query) =>
 _queries.OnChanged(query);
Пример #9
0
 public QueryState(QueryETag etag, Stream content)
 {
   ETag = etag;
   _content = content;
 }
Пример #10
0
 public QueryState(QueryETag etag)
 {
   ETag = etag;
   NotModified = true;
 }
Пример #11
0
 internal QueryETag GetLatest(QueryETag etag) =>
 _etag.GetLatest(etag);
Пример #12
0
 internal QueryWindow(QueryETag etag, DateTimeOffset whenChanged)
 {
     _etag        = etag;
     _whenChanged = whenChanged;
 }
Пример #13
0
 internal QueryETag OnSubscribed(QueryETag etag) =>
 _queriesByKey
 .GetOrAdd(etag.Key, _ => new QueryWindow(etag, Clock.Now))
 .GetLatest(etag);