public ParsedArgument[] ParseArguments(ConsoleParser.ParseResult.ParseToken[] tokens) { if (tokens == null) return null; List<ParsedArgument> ret = new List<ParsedArgument>(); int curArg = 0; foreach (var token in tokens) { if (token.Type == ConsoleParser.ParseResult.ParseToken.TokenType.CmdOrVar) continue; CommandArgument arg = Arguments.Value[curArg]; if (!arg.IsGoodValue(token.Value)) return null; ParsedArgument newArg = new ParsedArgument() { Name = arg.Name, CommandType = arg.CommandType, StrValue = token.Value, Value = arg.GetConvertedValue(token.Value) }; curArg++; ret.Add(newArg); } //Required argument(s) not passed. if (curArg < NumRequiredArgs) return null; //Have to populate the list with any optional arguments not passed in. for (int i = curArg; i < NumArgs; i++) { CommandArgument arg = Arguments.Value[i]; ParsedArgument newArg = new ParsedArgument() { Name = arg.Name, CommandType = arg.CommandType, StrValue = arg.DefaultVal.ToString(), Value = arg.DefaultVal }; curArg++; ret.Add(newArg); } return ret.ToArray(); }
public void ConsoleUserInput(string input) { if (this.History.Count == 0 || input != this.History[this.History.Count - 1]) { this.History.Add(input); } while (this.History.Count > MaxHistory) { this.History.RemoveAt(0); } ConsoleParser.ParseResult parsed = ConsoleParser.Parse(input); Log(">" + input); if (parsed.ParsedResult.Length == 0 || !IsConVarOrCmd(parsed.ParsedResult[0].Value)) { Log("Incorrect input"); return; } string ConObject = parsed.ParsedResult[0].Value; if (IsConCommand(ConObject)) { int NumArgs = parsed.ParsedResult.Length - 1; var command = GetConCommand(ConObject); if (NumArgs >= command.NumRequiredArgs && NumArgs <= command.NumArgs) { var parsedArgs = command.ParseArguments(parsed.ParsedResult); if (parsedArgs == null) { Log("ERROR: Bad arguments"); PrintConCommandDescription(command); } else { var collection = new ConCommand.ArgCollection() { ParsedArgs = parsedArgs }; command.OnCalled.Value(collection); } } else { Log("ERROR: Wrong number of arguments."); PrintConCommandDescription(command); } } else if (IsConVar(ConObject)) { if (parsed.ParsedResult.Length == 1) { var convar = GetConVar(parsed.ParsedResult[0].Value); Log(convar.Name + ": " + convar.Description + " (Value: " + convar.GetCastedValue() + " " + convar.OutCastConstraint.ToString().Replace("System.", "") + ")"); } else { var argument = parsed.ParsedResult[1].Value; SetConVarValue(parsed.ParsedResult[0].Value, argument); } } }