public MatchPipeline(RiotApi riotApi, RiotQuerySettings querySettings, IMatchDetailProcessor matchDetailProcessor) { api = riotApi; this.querySettings = querySettings; this.matchDetailProcessor = matchDetailProcessor; queryQueues.Add(querySettings.Queue); // Create match producer if (!querySettings.NoDownload) { playerMatchProducer = new PlayerMatchProducer(api, querySettings, queryQueues, testSynchronizer); // Create blocks ConsumeMatchBlock = new TransformBlock<MatchSummary, MatchDetail>( async match => await ConsumeMatch(match), new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 5 }); } ConsumeMatchDetailBlock = new ActionBlock<MatchDetail>( async match => await matchDetailProcessor.ConsumeMatchDetail(match), new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = matchDetailProcessor.MaxDegreeOfParallelism }); // Link blocks if (!querySettings.NoDownload) { playerMatchProducer.MatchProducerBlock.LinkTo(ConsumeMatchBlock, new DataflowLinkOptions() { PropagateCompletion = false }); ConsumeMatchBlock.LinkTo(ConsumeMatchDetailBlock, new DataflowLinkOptions() { PropagateCompletion = false }, match => match != null); ConsumeMatchBlock.LinkTo(DataflowBlock.NullTarget<MatchDetail>(), new DataflowLinkOptions() { PropagateCompletion = false }); } }
public PlayerMatchProducer(RiotApi riotApi, RiotQuerySettings querySettings, List<Queue> queryQueues, MatchDownloadLimiter testSynchronizer) { api = riotApi; this.querySettings = querySettings; this.queryQueues = queryQueues; this.testSynchronizer = testSynchronizer; // Create blocks PlayerBufferBlock = new BufferBlock<PlayerEntry>(); PlayerToMatchesBlock = new TransformManyBlock<PlayerEntry, MatchSummary>( async player => await ConsumePlayerAsync(player), new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 2 }); // Link blocks PlayerBufferBlock.LinkTo(PlayerToMatchesBlock, new DataflowLinkOptions() { PropagateCompletion = true }); }
public MatchPipeline(RiotApi riotApi, RiotQuerySettings querySettings, IMatchDetailProcessor matchDetailProcessor) { api = riotApi; this.querySettings = querySettings; this.matchDetailProcessor = matchDetailProcessor; queryQueues.Add(querySettings.Queue); // Create match producer if (!querySettings.NoDownload) { playerMatchProducer = new PlayerMatchProducer(api, querySettings, queryQueues, testSynchronizer); // Create blocks ConsumeMatchBlock = new TransformBlock <MatchSummary, MatchDetail>( async match => await ConsumeMatch(match), new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 5 }); } ConsumeMatchDetailBlock = new ActionBlock <MatchDetail>( async match => await matchDetailProcessor.ConsumeMatchDetail(match), new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = matchDetailProcessor.MaxDegreeOfParallelism }); // Link blocks if (!querySettings.NoDownload) { playerMatchProducer.MatchProducerBlock.LinkTo(ConsumeMatchBlock, new DataflowLinkOptions() { PropagateCompletion = false }); ConsumeMatchBlock.LinkTo(ConsumeMatchDetailBlock, new DataflowLinkOptions() { PropagateCompletion = false }, match => match != null); ConsumeMatchBlock.LinkTo(DataflowBlock.NullTarget <MatchDetail>(), new DataflowLinkOptions() { PropagateCompletion = false }); } }
public PlayerMatchProducer(RiotApi riotApi, RiotQuerySettings querySettings, List <Queue> queryQueues, MatchDownloadLimiter testSynchronizer) { api = riotApi; this.querySettings = querySettings; this.queryQueues = queryQueues; this.testSynchronizer = testSynchronizer; // Create blocks PlayerBufferBlock = new BufferBlock <PlayerEntry>(); PlayerToMatchesBlock = new TransformManyBlock <PlayerEntry, MatchSummary>( async player => await ConsumePlayerAsync(player), new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 2 }); // Link blocks PlayerBufferBlock.LinkTo(PlayerToMatchesBlock, new DataflowLinkOptions() { PropagateCompletion = true }); }