Exemplo n.º 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);
        }
Exemplo n.º 2
0
        internal void OnChanged(QueryETag etag)
        {
            var now = Clock.Now;

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

            if (now - _whenTrimmed > _trimDelay)
            {
                TrimQueries(now);
            }
        }
Exemplo n.º 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));
        });
Exemplo n.º 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));
            }
        }
Exemplo n.º 5
0
 public QueryContent(QueryETag etag, Stream content)
 {
     ETag  = etag;
     _data = content;
 }
Exemplo n.º 6
0
 public QueryContent(QueryETag etag)
 {
     ETag        = etag;
     NotModified = true;
 }
Exemplo n.º 7
0
 public Task OnQueryStopped(QueryETag query, string error) =>
 _queries.OnStopped(query, error);
Exemplo n.º 8
0
 public Task OnQueryChanged(QueryETag query) =>
 _queries.OnChanged(query);
Exemplo n.º 9
0
 public QueryState(QueryETag etag, Stream content)
 {
   ETag = etag;
   _content = content;
 }
Exemplo n.º 10
0
 public QueryState(QueryETag etag)
 {
   ETag = etag;
   NotModified = true;
 }
Exemplo n.º 11
0
 internal QueryETag GetLatest(QueryETag etag) =>
 _etag.GetLatest(etag);
Exemplo n.º 12
0
 internal QueryWindow(QueryETag etag, DateTimeOffset whenChanged)
 {
     _etag        = etag;
     _whenChanged = whenChanged;
 }
Exemplo n.º 13
0
 internal QueryETag OnSubscribed(QueryETag etag) =>
 _queriesByKey
 .GetOrAdd(etag.Key, _ => new QueryWindow(etag, Clock.Now))
 .GetLatest(etag);