internal async Task <string> ProcessAsync(string baseAddress) { using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri(baseAddress); // TODO create a stop mechanism. Ugly but it will work for now. If you want to stop it just close the application. while (true) { HttpResponseMessage pollResponseMessage; do { pollResponseMessage = await httpClient.GetAsync("api/tasks/poll/task_4"); Thread.Sleep(1000); } while (pollResponseMessage.StatusCode == System.Net.HttpStatusCode.NoContent); if (!pollResponseMessage.IsSuccessStatusCode) { System.Console.WriteLine($"A problem has occurred during task 4 polling. Status code: {pollResponseMessage.StatusCode}"); continue; } string task1PollJsonResponse = await pollResponseMessage?.Content?.ReadAsStringAsync(); TaskPollResponse taskPollResponse = JsonConvert.DeserializeObject <TaskPollResponse>(task1PollJsonResponse); int?oddEven = taskPollResponse.InputData.OddEven; var taskUpdateRequest = new TaskUpdateRequest(); switch (oddEven) { case 0: var dynamicForkOutputData = new DynamicForkOutputData(); dynamicForkOutputData.DynamicTasks = taskPollResponse.InputData.DynamicTasks; dynamicForkOutputData.Inputs = taskPollResponse.InputData.Inputs; taskUpdateRequest.OutputData = dynamicForkOutputData; break; case 1: break; default: taskUpdateRequest.OutputData = new OutputData(); break; } taskUpdateRequest.TaskId = taskPollResponse.TaskId; taskUpdateRequest.WorkflowInstanceId = taskPollResponse.WorkflowInstanceId; taskUpdateRequest.Status = Constants.TaskStatuses.COMPLETED; taskUpdateRequest.OutputData.OddEven = oddEven; var stringContent = new StringContent(JsonConvert.SerializeObject(taskUpdateRequest), Encoding.UTF8, "application/json"); HttpResponseMessage responseMessage = await httpClient.PostAsync("api/tasks/", stringContent); if (!responseMessage.IsSuccessStatusCode) { System.Console.WriteLine($"A problem has occurred during task 4 update. Status code: {pollResponseMessage.StatusCode}"); continue; } System.Console.WriteLine($"Task4 Worker Processed task: {await responseMessage.Content.ReadAsStringAsync()}"); Thread.Sleep(1000); } // TODO Send the received ID through an event return(null); } }
public async Task ProcessAsync(string baseAddress) { using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri(baseAddress); // TODO create a stop mechanism. Ugly but it will work for now. If you want to stop it just close the application. while (true) { HttpResponseMessage pollResponseMessage; do { pollResponseMessage = await httpClient.GetAsync("api/tasks/poll/task_1"); Thread.Sleep(1000); } while (pollResponseMessage.StatusCode == System.Net.HttpStatusCode.NoContent); if (!pollResponseMessage.IsSuccessStatusCode) { System.Console.WriteLine($"A problem has occurred during task 1 polling. Status code: {pollResponseMessage.StatusCode}"); continue; } string task1PollJsonResponse = await pollResponseMessage?.Content?.ReadAsStringAsync(); TaskPollResponse taskPollResponse = JsonConvert.DeserializeObject <TaskPollResponse>(task1PollJsonResponse); int?oddEven = taskPollResponse?.InputData?.OddEven; var taskUpdateRequest = new TaskUpdateRequest(); switch (oddEven) { case 0: const string TASK_1 = "task_1"; const string TASK_1_1 = "task_1_1"; const string WF_DYN = "wf_dyn"; var dynamicForkOutputData = new DynamicForkOutputData(); dynamicForkOutputData.TaskToExecute = TASK_1; dynamicForkOutputData.DynamicTasks = new List <DynamicTask>(); dynamicForkOutputData.DynamicTasks.Add(new SimpleDynamicTask { Name = TASK_1, TaskReferenceName = TASK_1_1, }); dynamicForkOutputData.DynamicTasks.Add(new SubWorkFlowDynamicTask { Name = "sub_workflow_4", TaskReferenceName = WF_DYN, SubWorkflowParam = new SubWorkFlowParameter { Name = "sub_flow_1" } }); dynamicForkOutputData.Inputs = new JRaw($"{{\"{TASK_1_1}\": {{}}, \"{WF_DYN}\": {{}}}}"); taskUpdateRequest.OutputData = dynamicForkOutputData; break; case 1: taskUpdateRequest.OutputData = new OutputData(); taskUpdateRequest.OutputData.Mod = taskPollResponse?.InputData?.Mod; break; default: taskUpdateRequest.OutputData = new OutputData(); break; } taskUpdateRequest.TaskId = taskPollResponse.TaskId; taskUpdateRequest.WorkflowInstanceId = taskPollResponse.WorkflowInstanceId; taskUpdateRequest.Status = Constants.TaskStatuses.COMPLETED; taskUpdateRequest.OutputData.OddEven = oddEven; var stringContent = new StringContent(JsonConvert.SerializeObject(taskUpdateRequest), Encoding.UTF8, "application/json"); HttpResponseMessage responseMessage = await httpClient.PostAsync("api/tasks/", stringContent); if (!responseMessage.IsSuccessStatusCode) { System.Console.WriteLine($"A problem has occurred during task 1 update. Status code: {pollResponseMessage.StatusCode}"); continue; } System.Console.WriteLine($"Task1 Worker Processed task: {await responseMessage.Content.ReadAsStringAsync()}"); Thread.Sleep(1000); } } }