using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace ShiftOS.Engine.Terminal { public static class TerminalBackend { // The line below gets all the terminal commands in... well... the entire ShiftOS.Engine public static IEnumerable instances = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsSubclassOf(typeof(TerminalCommand)) && t.GetConstructor(Type.EmptyTypes) != null) .Select(t => Activator.CreateInstance(t) as TerminalCommand); /// /// Runs a terminal command. /// /// /// Returns all the output from that command. public static string RunCommand(string command) { string name; try { name = command.Split(' ')[0]; } catch { name = command; } var theParams = new string[command.Split(' ').Length - 1]; Array.Copy(command.Split(' '), 1, theParams, 0, command.Split(' ').Length - 1); foreach (var instance in Instances) { if (instance.GetName() == name) { return instance.Run(theParams); } } return "The command cannot be found."; } } }