public void ExecuteCommand(string command)
{
// Call registered executioner.
if (executioners.Count != 0)
{
executioners.Peek().ExecuteCommand(command);
return;
}
// Run the command.
char[] spaceChars = new char[] { ' ' };
Echo(Prompt + command);
command = command.TrimStart(spaceChars);
List<string> args = new List<string>(command.Split(spaceChars));
string cmdText = args[0];
args.RemoveAt(0);
CommandInfo cmd;
if (commandTable.TryGetValue(cmdText.ToLower(), out cmd))
{
try
{
// Call registered command delegate.
cmd.callback(this, command, args);
}
catch (Exception e)
{
// Exception occured while running command.
EchoError("Unhandled Exception occured");
string[] lines = e.Message.Split(new char[] { '\n' });
foreach (string line in lines)
EchoError(line);
}
}
else
{
Echo("Unknown Command");
}
// Add to command history.
commandHistory.Add(command);
while (commandHistory.Count > MaxCommandHistory)
commandHistory.RemoveAt(0);
commandHistoryIndex = commandHistory.Count;
}