/// <summary> /// Procesa una llamada a la API /// </summary> private async Task ProcessCallApiAsync(BlockLogModel block, CallApiSentence sentence, CancellationToken cancellationToken) { List <BaseSentence> sentences = await new Processor.ApiProcessor(this).ProcessAsync(block, sentence, cancellationToken); if (sentences.Count > 0) { await ExecuteAsync(block, sentences, cancellationToken); } }
/// <summary> /// Procesa una sentencia de llamada /// </summary> internal async Task <List <BaseSentence> > ProcessAsync(BlockLogModel block, CallApiSentence sentence, CancellationToken cancellationToken) { HttpClientManager client = new HttpClientManager(new Uri(TransformVariables(sentence.Url)), TransformVariables(sentence.User), TransformVariables(sentence.Password)); List <BaseSentence> sentences = new List <BaseSentence>(); // Ejecuta las sentencias foreach (CallApiMethodSentence method in sentence.Methods) { if (!HasError && !cancellationToken.IsCancellationRequested) { sentences.AddRange(await ExecuteMethodAsync(block, method, client, cancellationToken)); } } // Devuelve las sentencias que hay que ejecutar return(sentences); }
/// <summary> /// Carga una sentencia de deifinición de API /// </summary> private BaseSentence LoadApiDefinitionSentence(MLNode rootML) { CallApiSentence sentence = new CallApiSentence(); // Asigna las propiedades AssignDefaultProperties(sentence, rootML); sentence.Url = rootML.Attributes[TagUrl].Value.TrimIgnoreNull(); sentence.User = rootML.Attributes[TagUser].Value.TrimIgnoreNull(); sentence.Password = rootML.Attributes[TagPassword].Value.TrimIgnoreNull(); // Obtiene los métodos foreach (MLNode nodeML in rootML.Nodes) { if (nodeML.Name == TagMethod) { sentence.Methods.Add(LoadMethod(nodeML)); } } // Devuelve la sentencia return(sentence); }