예제 #1
0
        public async Task <AcknowledgementMessage> ExecuteTask(JobStartedMessage taskMessage)
        {
            return(await Task.Delay(100)
                   .ContinueWith <AcknowledgementMessage>(task =>
            {
                AcknowledgementReceipt receipt = AcknowledgementReceipt.SUCCESS;
                long taskTime = 0;
                Task externalTask = Task.Factory.StartNew(() =>
                {
                    // call or execute an external application here
                });

                // wait for task to complete
                externalTask.Wait();

                switch (externalTask.Status)
                {
                case TaskStatus.Faulted:
                    receipt = AcknowledgementReceipt.FAILED;
                    break;

                case TaskStatus.Canceled:
                    receipt = AcknowledgementReceipt.CANCELED;
                    break;

                case TaskStatus.RanToCompletion:
                    receipt = AcknowledgementReceipt.SUCCESS;
                    break;
                }

                // send the acknowledgement
                return new AcknowledgementMessage(taskMessage.ID, taskMessage.Description, taskTime, receipt);
            }));
        }
예제 #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AcknowledgementMessage"/>  class
 /// </summary>
 /// <param name="id"></param>
 /// <param name="description"></param>
 /// <param name="duration"></param>
 /// <param name="receipt"></param>
 public AcknowledgementMessage(int id, string description, long duration,
                               AcknowledgementReceipt receipt)
 {
     ID             = id;
     Description    = description;
     CompletionTime = duration;
     Receipt        = receipt;
 }
예제 #3
0
        public async Task <AcknowledgementMessage> ExecuteTask(JobStartedMessage taskMessage)
        {
            string outputPath = ConfigurationManager.AppSettings["ClientOutputFolderPath"];
            string exePath    = ConfigurationManager.AppSettings["ClientExecutablePath"];
            string title      = string.Format($"Executer : Task {taskMessage.ID}");

            outputPath = ConvertToURIPath(outputPath);
            exePath    = ConvertToURIPath(exePath);

            string extractor1 = outputPath + @"/" + "Extractor1.txt";
            string extractor2 = outputPath + @"/" + taskMessage.Description;

            return(await Task.Delay(100)
                   .ContinueWith <AcknowledgementMessage>(task =>
            {
                // execute task here
                long taskTime = 0;
                int exitCode = 0;
                AcknowledgementReceipt receipt = AcknowledgementReceipt.SUCCESS;

                if (string.IsNullOrEmpty(extractor2) || string.IsNullOrEmpty(extractor1) ||
                    string.IsNullOrEmpty(outputPath) || string.IsNullOrEmpty(exePath))
                {
                    receipt = AcknowledgementReceipt.INVALID_TASK;
                }
                else
                {
                    Task exteranlTask = Task.Factory.StartNew(() =>
                    {
                        ExecuteExternalApplication(extractor1, extractor2,
                                                   outputPath, exePath, title, ref taskTime, ref exitCode);
                    });

                    // wait for task to complete
                    exteranlTask.Wait();

                    Console.WriteLine(string.Format("Clpping process for task {0} exited with exit code {1}:",
                                                    taskMessage.ID.ToString(), exitCode.ToString()));

                    switch (exteranlTask.Status)
                    {
                    case TaskStatus.Faulted:
                        receipt = AcknowledgementReceipt.FAILED;
                        break;

                    case TaskStatus.Canceled:
                        receipt = AcknowledgementReceipt.CANCELED;
                        break;

                    case TaskStatus.RanToCompletion:
                        {
                            if (exitCode == 0 || exitCode == -529697949)
                            {
                                receipt = AcknowledgementReceipt.SUCCESS;
                            }
                            else if (exitCode == -1073741510)
                            {
                                receipt = AcknowledgementReceipt.CANCELED;
                            }
                            else
                            {
                                receipt = AcknowledgementReceipt.FAILED;
                            }
                            break;
                        }
                    }
                }

                // send the acknowledgement
                return new AcknowledgementMessage(taskMessage.ID, taskMessage.Description, taskTime, receipt);
            }));
        }