public static FightRequestTemplateResolution Resolve(FightRequestTemplate template, FightContextData context) { if (template == null) { throw new ArgumentNullException(nameof(template)); } if (context?.Fight == null) { throw new ArgumentNullException(nameof(context)); } var result = new FightRequestTemplateResolution(); result.MappingValues.Clear(); result.MappingValues.Add(RequestWildcard.ReportId, context.ReportId); result.MappingValues.Add(RequestWildcard.FightEnd, context.Fight.end_time.ToString() ?? string.Empty); result.MappingValues.Add(RequestWildcard.FightStart, context.Fight.start_time.ToString() ?? string.Empty); result.MappingValues.Add(RequestWildcard.FightId, context.Fight.id.ToString() ?? string.Empty); var sb = new StringBuilder(template.RequestTemplate); foreach (var mapping in result.MappingValues) { sb.Replace(mapping.Key.Key, mapping.Value); } result.ResolvedTemplate = sb.ToString(); return(result); }
public async Task <List <HitDetectionResult> > GetResultsAsync(FightContextData context) { var content = await this.GetFightContentAsync(Template, context).ConfigureAwait(false); return(await GetResultsFromContentAsync(content).ConfigureAwait(false)); }
public async Task <string> GetFightContentAsync(FightRequestTemplate requestTemplate, FightContextData context) { var resolution = FightRequestTemplateResolver.Resolve(requestTemplate, context); return(await DownloadStringAsync(resolution.ResolvedTemplate).ConfigureAwait(false)); }
public async Task ApplyResultMappingAsync(CancellationToken cancellationToken, FightContextData fightContext, Dictionary <string, object> requestResults, string templateKey) { var results = await GetResultsAsync(fightContext).ConfigureAwait(false); Func <HitDetectionResult, KeyValuePair <string, object> > extractor; if (KeyValueMappings.Mappings.TryGetValue(templateKey, out extractor)) { foreach (var parserResult in results) { var output = extractor(parserResult); object value; if (requestResults.TryGetValue(output.Key, out value)) { requestResults[output.Key] = output.Value; } else { requestResults.Add(output.Key, output.Value); } } } }