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