Exemple #1
0
        public async Task <int> ExecuteAsync(ShellCommand command)
        {
            Command?cmd = Cli.Wrap(_shell)
                          .WithArguments("/c " + command.Command + " " + command.Arguments)
                          .WithWorkingDirectory(command.WorkDirectory ?? _boostApplicationContext.WorkingDirectory.FullName);

            var exitCode = 0;

            await foreach (CommandEvent? cmdEvent in cmd.ListenAsync())
            {
                switch (cmdEvent)
                {
                case StartedCommandEvent started:
                    _messageHandler?.Invoke(new ShellMessage(
                                                _session.Next(),
                                                "cmd",
                                                $"{_shell}> {command.Command} {command.Arguments}")
                    {
                        Tags = new[] { "command" }
                    });
                    break;

                case StandardOutputCommandEvent stdOut:
                    _messageHandler?.Invoke(new ShellMessage(_session.Next(), "info", stdOut.Text)
                    {
                        Tags = ShellMessageTagger.GetTags(stdOut.Text)
                    });
                    break;

                case StandardErrorCommandEvent stdErr:
                    _messageHandler?.Invoke(new ShellMessage(_session.Next(), "error", stdErr.Text)
                    {
                        Tags = new[] { "error" }
                    });
                    break;

                case ExitedCommandEvent exited:
                    exitCode = exited.ExitCode;
                    _messageHandler?.Invoke(new ShellMessage(
                                                _session.Next(),
                                                "end",
                                                (exitCode == 0) ?
                                                "Command completed successfully" :
                                                $"Command completed with errors (ExitCode: {exitCode})"
                                                )
                    {
                        Tags = new string[] { (exitCode == 0) ? "success" : "error" }
                    });
                    break;
                }
            }

            return(exitCode);
        }
Exemple #2
0
        public async Task <int> ExecuteAsync(ShellCommand command)
        {
            _startInfo.Arguments = $"/c {command.Command} {command.Arguments}";
            _messageHandler?.Invoke(new ShellMessage(
                                        _session.Next(),
                                        "cmd",
                                        $"{_startInfo.FileName}> {command.Command} {command.Arguments}")
            {
                Tags = new[] { "command" }
            });

            var process = new Process();

            process.StartInfo = _startInfo;
            process.StartInfo.WorkingDirectory = command.WorkDirectory ??
                                                 _boostApplicationContext.WorkingDirectory.FullName;

            process.EnableRaisingEvents = true;
            process.OutputDataReceived += Process_OutputDataReceived;
            process.ErrorDataReceived  += Process_ErrorOutputDataReceived;
            process.Start();
            process.BeginOutputReadLine();
            process.BeginErrorReadLine();
            _messageHandler?.Invoke(new ShellMessage(_session, "start", ""));
            await process.WaitForExitAsync();;

            _messageHandler?.Invoke(new ShellMessage(
                                        _session.Next(),
                                        "end",
                                        (process.ExitCode == 0) ?
                                        "Command completed successfully" :
                                        $"Command completed with errors (ExitCode: {process.ExitCode})"
                                        )
            {
                Tags = new string[] { (process.ExitCode == 0) ? "success" : "error" }
            });

            return(process.ExitCode);
        }
Exemple #3
0
        public async Task <int> IndexWorkRootsAsync(
            [Service] IHubContext <ConsoleHub> hubContext,
            [Service] ILocalRepositoryIndexer repositoryIndexer,
            [Service] IUserSettingsManager settingsManager,
            CancellationToken cancellationToken)
        {
            UserSettings settings = await settingsManager.GetAsync(cancellationToken);

            var session = new MessageSession();

            Action <string> handler = async(string msg) =>
            {
                await hubContext.Clients.All.SendAsync("consoleData",
                                                       new ShellMessage(session.Next(), "Info", msg));
            };

            int indexCount = 0;

            foreach (WorkRoot wr in settings.WorkRoots)
            {
                var count = await repositoryIndexer.IndexWorkRootAsync(
                    wr,
                    handler,
                    cancellationToken);

                indexCount += count;
            }

            await hubContext.Clients.All.SendAsync("consoleData",
                                                   new ShellMessage(session.Next(), "end", $"Scan completed: {indexCount}")
            {
                Tags = new string[] { "success" }
            });

            return(indexCount);
        }