示例#1
0
        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);
        }
示例#2
0
        public async Task <List <HitDetectionResult> > GetResultsAsync(FightContextData context)
        {
            var content = await this.GetFightContentAsync(Template, context).ConfigureAwait(false);

            return(await GetResultsFromContentAsync(content).ConfigureAwait(false));
        }
示例#3
0
        public async Task <string> GetFightContentAsync(FightRequestTemplate requestTemplate, FightContextData context)
        {
            var resolution = FightRequestTemplateResolver.Resolve(requestTemplate, context);

            return(await DownloadStringAsync(resolution.ResolvedTemplate).ConfigureAwait(false));
        }
示例#4
0
        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);
                    }
                }
            }
        }