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); } }
protected virtual void OnShellCommandNotFound(string input) { var handler = ShellCommandNotFound; if (handler != null) { handler.Invoke(this, new CommandNotFoundEventArgs(input)); } else { Console.WriteLine("UserInput not found: {0}", input); AfterCommandExecute?.Invoke(this, new CommandExecuteEventArgs(input, null)); } }
internal static void OnAfterCommandExecute(Player player, UserInputData userInputData, object?[] args) => AfterCommandExecute?.Invoke(player, userInputData, args);
private T Execute <T>(CommandType commandType, string strSql, CommandExecuteHandler <T> commandExecuteHandler, object objParameters = null) { DbParameter[] dbParameters = objParameters == null ? null : GetDbParameters(objParameters); DbConnection conn = GetDbConnection(); DbCommand cmd = null; try { if (conn.State != ConnectionState.Open) { conn.Open(); } cmd = conn.CreateCommand(); cmd.CommandType = commandType; cmd.CommandText = strSql; if (_commandTimeout != (int)CommandTimeoutValue.None) { cmd.CommandTimeout = _commandTimeout; } if (Transactional) { cmd.Transaction = _dbTransaction; } if (dbParameters != null) { cmd.Parameters.AddRange(dbParameters); } DbAccessorContext context = new DbAccessorContext(this, cmd); if (PreCommandExecute != null) { PreCommandExecute.Invoke(context); } T result = commandExecuteHandler(cmd); if (AfterCommandExecute != null) { AfterCommandExecute.Invoke(context); } return(result); } finally { if (cmd != null) { cmd.Dispose(); } if (!Transactional && !(typeof(T) == typeof(DbDataReader))) { conn.Dispose(); } } }