private void Process(string msg) { if (s != null) { response = msg; s.Set(); return; //Intercepterd by running process //TODO: introduce read queue later? } var args = msg.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); var key = args[0]; if (CliCommands.ContainsKey(key)) { var handler = CliCommands[key]; handler.Action(args); } else if (CliAliases.ContainsKey(key)) { var handler = CliCommands[CliAliases[key]]; handler.Action(args); } else { LogProblem("No Such Command"); } }
public UnityTerminalFrontend() { var modules = typeof(CliModule).FindImplementations(); foreach (var module in modules) { var pluginInstance = Activator.CreateInstance(module, this) as CliModule; Plugins.Add(pluginInstance); var methods = module.GetMethods().Where(m => m.IsDefined(typeof(CliCommand), true)); foreach (var methodInfo in methods) { var c = methodInfo.GetCustomAttributes(typeof(CliCommand), true).FirstOrDefault() as CliCommand; var info = methodInfo; Action <string[]> handler = str => { info.Invoke(pluginInstance, new object[] { str }); }; CliCommands.Add(c.Code, new TerminalServerCommand() { Action = handler, CommandCode = c.Code, Help = c.Help }); var aliases = methodInfo.GetCustomAttributes(typeof(CliAlias), true).Cast <CliAlias>(); foreach (var alias in aliases) { CliAliases.Add(alias.Code, c.Code); } } } Log("Hello, I am Koinonia!"); Log("Type \"help\" or \"h\" for a list of available commands."); Log(""); Log(""); }