Exemplo n.º 1
0
        public void RunShell()
        {
            _readline = new Readline.Readline(History)
            {
                CtrlCInterrupts = CtrlCInterrupts,
                CtrlDIsEOF      = CtrlDIsEOF,
                CtrlZIsEOF      = CtrlZIsEOF
            };

            _readline.WritePrompt       += ReadlineOnWritePrompt;
            _readline.Interrupt         += (sender, args) => ShellInterrupt?.Invoke(this, EventArgs.Empty);
            _readline.TabComplete       += ReadlineOnTabComplete;
            _readline.PrintAlternatives += (sender, args) => OnPrintAlternatives(args);

            while (true)
            {
                var input = _readline.ReadLine();

                if (string.IsNullOrWhiteSpace(input))
                {
                    continue;
                }

                input = input.Trim();


                var allTokens = ShellCommandTokenizer.Tokenize(input);

                foreach (var cmdTokens in allTokens)
                {
                    try
                    {
                        var tokenArr = cmdTokens.ToArray();

                        IShellCommand command = null;
                        lock (_lock)
                        {
                            command = _container.FindCommand(this, tokenArr);
                        }

                        BeforeCommandExecute?.Invoke(this, new CommandExecuteEventArgs(input, null, command));
                        ExecuteCommand(tokenArr);
                        AfterCommandExecute?.Invoke(this, new CommandExecuteEventArgs(input, CommandResult, command));
                    }
                    catch (ShellCommandNotFoundException)
                    {
                        OnShellCommandNotFound(input);
                    }
                }

                History.AddUnique(input);
            }
        }
Exemplo n.º 2
0
 internal static void OnBeforeCommandExecute(Player player, UserInputData userInputData, object?[] args, CancelEventArgs cancelEventArgs)
 => BeforeCommandExecute?.Invoke(player, userInputData, args, cancelEventArgs);
Exemplo n.º 3
0
 public virtual void OnBeforeCommandExecute(object sender, ModelCommandBeforeExecuteEventArgs e)
 {
     BeforeCommandExecute?.Invoke(sender, e);
 }