Ejemplo n.º 1
0
		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();
		}
Ejemplo n.º 2
0
        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);
                }
            }
        }