Exemplo n.º 1
0
        public async Task <object> GetValueAsync()
        {
            if (Type.IsGenericType && Type.GetGenericTypeDefinition() == typeof(IAsyncCollector <>))
            {
                if (_attribute.TriggerAttribute == nameof(PerperStreamTriggerAttribute))
                {
                    var collectorType = typeof(PerperStreamAsyncCollector <>).MakeGenericType(Type.GenericTypeArguments);
                    return(Activator.CreateInstance(collectorType, _attribute.Stream, _context) !);
                }
                else
                {
                    var collectorType = typeof(PerperWorkerAsyncCollector <>).MakeGenericType(Type.GenericTypeArguments);
                    return(Activator.CreateInstance(collectorType, _attribute.Stream, _attribute.Worker, _context) !);
                }
            }

            var data = _context.GetData(_attribute.Stream);

            if (Type.IsGenericType && Type.GetGenericTypeDefinition() == typeof(IAsyncEnumerable <>))
            {
                var streamType = typeof(PerperStreamAsyncEnumerable <>).MakeGenericType(Type.GenericTypeArguments[0]);
                return(Activator.CreateInstance(streamType, _attribute.Stream, _attribute.Delegate,
                                                _attribute.Parameter, await data.FetchStreamParameterStreamNameAsync(_attribute.Parameter), _context) !);
            }

            var result = _attribute.TriggerAttribute switch
            {
                nameof(PerperStreamTriggerAttribute) => await data.FetchStreamParameterAsync <object>(_attribute
                                                                                                      .Parameter),
                nameof(PerperWorkerTriggerAttribute) => await data.FetchWorkerParameterAsync <object>(_attribute.Worker,
                                                                                                      _attribute.Parameter),
                nameof(PerperModuleTriggerAttribute) => await data.FetchWorkerParameterAsync <object>(_attribute.Worker, _attribute.Parameter),
                _ => throw new ArgumentException()
            };

            if (Type == typeof(IPerperStream[]) && result is object[] binaryObjects)
            {
                result = binaryObjects.OfType <IBinaryObject>().Select(x => x.Deserialize <PerperFabricStream>()).ToArray();
            }

            return(result);
        }
Exemplo n.º 2
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _context.StartListen(_delegateName);
            _listenTask = ListenAsync(_listenCancellationTokenSource.Token);

            if (_attribute.RunOnStartup)
            {
                var data = _context.GetData($"$launcher.{_delegateName}");
                await data.StreamActionAsync($"$launcher.{_delegateName}", "", new {});

                await data.CallWorkerAsync($"$launcher.{_delegateName}", _delegateName, "", new {});
            }
        }
Exemplo n.º 3
0
 public async Task AddAsync(T item, CancellationToken cancellationToken = new CancellationToken())
 {
     var data = _context.GetData(_streamName);
     await data.SubmitWorkerResultAsync(_workerName, item);
 }
Exemplo n.º 4
0
        public async Task AddAsync(T item, CancellationToken cancellationToken = new CancellationToken())
        {
            var data = _context.GetData(_streamName);

            await data.AddStreamItemAsync(item);
        }
Exemplo n.º 5
0
        public IQueryable <T> Query <T>(IAsyncEnumerable <T> stream)
        {
            var streamName = (stream as PerperStreamAsyncEnumerable <T>) !.GetStreamName();
            var data       = _context.GetData(streamName);

            return(data.QueryStreamItemsAsync <T>());
        }