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); }
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 {}); } }
public async Task AddAsync(T item, CancellationToken cancellationToken = new CancellationToken()) { var data = _context.GetData(_streamName); await data.SubmitWorkerResultAsync(_workerName, item); }
public async Task AddAsync(T item, CancellationToken cancellationToken = new CancellationToken()) { var data = _context.GetData(_streamName); await data.AddStreamItemAsync(item); }
public IQueryable <T> Query <T>(IAsyncEnumerable <T> stream) { var streamName = (stream as PerperStreamAsyncEnumerable <T>) !.GetStreamName(); var data = _context.GetData(streamName); return(data.QueryStreamItemsAsync <T>()); }