예제 #1
0
        internal async static Task ConsoleTask(string[] arguments)
        {
            var    verbCommand         = new VerbCommands();
            string invokedVerb         = string.Empty;;
            object invokedVerbInstance = new object();

            if (!Parser.Default.ParseArguments(arguments, verbCommand, (verb, subObtions) =>
            {
                invokedVerb = verb;
                invokedVerbInstance = subObtions;
            }))
            {
                Environment.Exit(Parser.DefaultExitCodeFail);
            }
            else
            {
                try
                {
                    ConsoleProgress <Dictionary <ProgressType, string> > progressDictionary = new ConsoleProgress <Dictionary <ProgressType, string> >(value =>
                    {
                        if (value.ContainsKey(ProgressType.Output) && !string.IsNullOrWhiteSpace(value[ProgressType.Output]))
                        {
                            Log.Info(value[ProgressType.Output]);
                        }
                        if (value.ContainsKey(ProgressType.Error))
                        {
                            Log.Error(value[ProgressType.Error]);
                        }
                        if (value.ContainsKey(ProgressType.Warning))
                        {
                            Log.Warn(value[ProgressType.Warning]);
                        }
                    });
                    CancelSource = new CancellationTokenSource();
                    var cancelToken = CancelSource.Token;

                    ConsoleCommands parsedVerb;
                    var             taskWatcher = new TaskWatcher();
                    if (Enum.TryParse(invokedVerb, true, out parsedVerb))
                    {
                        Log.Warn(MessageStrings.CmdCancelMessage);
                        Console.CancelKeyPress += (sender, eventargs) =>
                        {
                            CancelSource.Cancel();
                            eventargs.Cancel = true;
                        };

                        switch (parsedVerb)
                        {
                        case ConsoleCommands.Retry:
                            var retry = (RetryCommands)invokedVerbInstance;
                            try
                            {
                                retry.OctRepository = new OctopusConnectionWorker((IOctopusConnectionSettings)retry).UserConnection();
                                var retryWorker = new RetryWorker((IOctopusSettings)retry, (IRetrySettings)retry);
                                await retryWorker.RetryTasks(progressDictionary, taskWatcher, cancelToken);
                            }
                            catch (Exception ex)
                            {
                                Log.Error(ex.Message);
                                Log.Error(retry.GetUsage());
                                Environment.Exit(1);
                            }
                            break;

                        case ConsoleCommands.Cancel:
                            var cancel = (CancelCommands)invokedVerbInstance;
                            try
                            {
                                cancel.OctRepository = new OctopusConnectionWorker((IOctopusConnectionSettings)cancel).UserConnection();
                                var cancelWorker = new CancelWorker((IOctopusSettings)cancel, (ICancelSettings)cancel);
                                await cancelWorker.CancelTasks(progressDictionary, taskWatcher, cancelToken);
                            }
                            catch (Exception ex)
                            {
                                Log.Error(ex.Message);
                                Log.Error(cancel.GetUsage());
                                Environment.Exit(1);
                            }
                            break;

                        default:
                            Log.Info(verbCommand.GetUsage());
                            break;
                        }
                    }
                    else
                    {
                        Log.Error(verbCommand.GetUsage());
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
예제 #2
0
 private void btnCancelWorker_Click(object sender, EventArgs e)
 {
     CancelWorker?.Invoke();
     this.Close();
 }