예제 #1
0
파일: Processor.cs 프로젝트: sbnair/perper
        public static async Task RunAsync([PerperStreamTrigger] PerperStreamContext context,
                                          [Perper("generator")] IAsyncEnumerable <Data> generator,
                                          [Perper("multiplier")] int multiplier,
                                          [Perper("output")] IAsyncCollector <Data> output,
                                          ILogger logger, CancellationToken cancellationToken)
        {
            var state = await context.FetchStateAsync <List <int> >() ?? new List <int>();

            int counter = 0;

            await foreach (var data in generator.WithCancellation(cancellationToken))
            {
                var value = data.Value;
                logger.LogInformation($"Processor is processing value: {value}");

                var result = await context.CallWorkerAsync <int>(typeof(Worker), new { value, multiplier, state }, cancellationToken);

                state.Add(result);
                await context.UpdateStateAsync(state);

                await output.AddAsync(new Data { Value = result, Description = $"Description {result}" }, cancellationToken);

                counter++;

                if (counter > 4)
                {
                    var iquery = context.Query <Data>(generator).Where(item => item.Value > 100);

                    foreach (var item in iquery.ToList())
                    {
                        logger.LogInformation($"LINQ Query (Where): Received odd item with value: {item.Value}");
                    }
                }
            }
        }
예제 #2
0
        public async Task Run([PerperStreamTrigger] PerperStreamContext context,
                              [Perper("chains")] Dictionary <Guid, Chain> chains,
                              [Perper("ibc")] IAsyncEnumerable <Message <Hash> > ibc,
                              [Perper("gossips")] IAsyncEnumerable <Gossip <Hash> > gossips,
                              [Perper("hashRegistry")] IPerperStream hashRegistry,
                              [Perper("output")] IAsyncCollector <object> output,
                              CancellationToken cancellationToken)
        {
            _hashRegistry = context.Query <HashRegistryEntry>(hashRegistry);
            _output       = output;

            foreach (var(chainId, chain) in chains)
            {
                var executor = new Executor(chainId,
                                            async(worker, input) => await context.CallWorkerAsync <(byte[]?, (string, object[])[], Dictionary <Guid, string[]>, Dictionary <Guid, string>)>(worker, new { input }, default));
예제 #3
0
 public async Task Run([PerperStreamTrigger] PerperStreamContext context,
                       [Perper("enumerated")] IAsyncEnumerable <Message> enumerated,
                       [Perper("filtered")] IAsyncEnumerable <Message> filtered,
                       [Perper("queried")] IPerperStream[] queried,
                       [Perper("i")] int i,
                       [Perper("n")] int n,
                       [Perper("output")] IAsyncCollector <Message> output)
 {
     await Task.WhenAll(
         ProcessEnumerated(i, enumerated),
         ProcessFiltered(i, filtered),
         ProcessQueried(i, queried.Select(stream => context.Query <Message>(stream))),
         SendOutput(i, n, output)
         );
 }
예제 #4
0
        public async Task Run([PerperStreamTrigger] PerperStreamContext context,
                              [Perper("node")] Node node,
                              [Perper("chainData")] Chain chainData,
                              [Perper("consensus")] IAsyncEnumerable <Message <Hash> > consensus,
                              [Perper("filter")] IAsyncEnumerable <Hash> filter,
                              [Perper("queries")] IAsyncEnumerable <Query <Hash> > queries,
                              [Perper("hashRegistry")] IPerperStream hashRegistry,
                              [Perper("output")] IAsyncCollector <Message <Hash> > output,
                              CancellationToken cancellationToken)
        {
            _output       = output;
            _node         = node;
            _hashRegistry = context.Query <HashRegistryEntry>(hashRegistry);

            var executor = new Executor(_node !.ChainId,
                                        async(worker, input) => await context.CallWorkerAsync <(byte[]?, (string, object[])[], Dictionary <Guid, string[]>, Dictionary <Guid, string>)>(worker, new { input }, default));