Example #1
0
        public bool Run(DefinitionCacheItem cmd, IEnumerable <string> args)
        {
            var arguments = args.ToList();

            Logger.Write("Removing the command name from parameters: " + arguments[0]);
            arguments.RemoveAt(0);
            if (cmd.Type == DefinitionCacheItemType.Script || cmd.Type == DefinitionCacheItemType.LanguageScript)
            {
                Logger.Write("Running command as script");
                var script = new Script(Bootstrapper.Settings.RootPath, Environment.CurrentDirectory, cmd.Location);
                var sb     = new StringBuilder();
                // On language commands remove the second argument too if
                // it matches the command name (oi langcommand vs oi C# langcommand)
                if (cmd.Type == DefinitionCacheItemType.LanguageScript &&
                    arguments.Count > 0 &&
                    Bootstrapper.Settings.EnabledLanguages.Contains(args.ElementAt(0)))
                {
                    Logger.Write("Removing second parameter from language command as it's a language script prefixed by language: " + arguments[0]);
                    arguments.RemoveAt(0);
                }
                for (int i = 0; i < arguments.Count; i++)
                {
                    sb.Append(" \"" + arguments[i] + "\"");
                }
                script.Run(
                    sb.ToString(),
                    (command) => {
                    Bootstrapper.DispatchAndCompleteMessage(
                        command,
                        () => {
                        Logger.Write("Writing end of command");
                        script.Write("end-of-command");
                    });
                });
            }
            else if (cmd.Type == DefinitionCacheItemType.Language)
            {
                Logger.Write("Running command as language command");
                var language = new LanguagePlugin(cmd.Location, Bootstrapper.DispatchMessage);
                // If default language command add original parameter
                if (args.ElementAt(0) != language.GetLanguage())
                {
                    arguments.Insert(0, args.ElementAt(0));
                }
                language.Run(arguments.ToArray());
            }
            else
            {
                Logger.Write("Running command as built in command");
                var command = Bootstrapper.GetDefaultHandlers()
                              .FirstOrDefault(x => x.Command == args.ElementAt(0));
                if (command == null)
                {
                    return(false);
                }
                command.Execute(arguments.ToArray());
            }
            return(true);
        }
Example #2
0
        public static void PrintSingleDefinition(DefinitionCacheItem item, int level)
        {
            var name = item.Name;

            if (!item.Required)
            {
                name = "[" + name + "]";
            }
            Console.WriteLine("{0}{1} - {2}", "".PadLeft(level, '\t'), name, item.Description);
        }
Example #3
0
 public static void PrintDefinition(DefinitionCacheItem item, ref int level)
 {
     level++;
     PrintSingleDefinition(item, level);
     foreach (var child in item.Parameters)
     {
         PrintDefinition(child, ref level);
     }
     level--;
 }
Example #4
0
        private IEnumerable <string> getPaths(DefinitionCacheItem x, string path)
        {
            if (x.Parameters.Count() == 0)
            {
                return new string[] { path }
            }
            ;
            var paths = new List <string>();

            x.Parameters.ToList()
            .ForEach(y => paths.AddRange(getPaths(y, path + "/" + y.Name)));
            return(paths);
        }
Example #5
0
 public static void PrintSingleDefinition(DefinitionCacheItem item)
 {
     PrintSingleDefinition(item, 0);
 }
Example #6
0
        public static void PrintDefinition(DefinitionCacheItem item)
        {
            int level = 0;

            PrintDefinition(item, ref level);
        }
Example #7
0
        private void dispatchAndCompleteMessage(string command, Action onCommandCompleted)
        {
            Logger.Write("Dispatching " + command);
            if (command.Length == 0)
            {
                Console.WriteLine();
            }
            else if (isError(command))
            {
                printError(command);
            }
            else if (isWarning(command))
            {
                printWarning(command);
            }
            else if (isColorized(command))
            {
                printColorized(command);
            }
            else if (isCommand(command) || isEvent(command))
            {
                lock (_commandProcessLock) {
                    _commandsInProcessing++;
                }
                ThreadPool.QueueUserWorkItem((m) => {
                    Logger.Write("Handling command in background thread");
                    if (isCommand(command))
                    {
                        Logger.Write("Handling as command");
                        var prefix = getCommandPrefix(command);
                        var parser = new CommandStringParser();
                        var args   =
                            parser.Parse(
                                command.Substring(prefix.Length, command.Length - prefix.Length))
                            .ToArray();
                        if (args.Length == 0)
                        {
                            Logger.Write("No commands specified for " + command);
                        }
                        DefinitionCacheItem cmd = null;
                        if (prefix == "command|")
                        {
                            cmd = GetDefinitionBuilder().Get(args);
                        }
                        else if (prefix == "command-builtin|")
                        {
                            cmd = GetDefinitionBuilder().GetBuiltIn(args);
                        }
                        else if (prefix == "command-language|")
                        {
                            cmd = GetDefinitionBuilder().GetLanguage(args);
                        }
                        else if (prefix == "command-languagescript|")
                        {
                            cmd = GetDefinitionBuilder().GetLanguageScript(args);
                        }
                        else if (prefix == "command-script|")
                        {
                            cmd = GetDefinitionBuilder().GetScript(args);
                        }
                        else if (prefix == "command-original|")
                        {
                            cmd = GetDefinitionBuilder().GetOriginal(args);
                        }

                        if (cmd != null)
                        {
                            new CommandRunner(EventDispatcher)
                            .Run(cmd, args);
                        }
                        else
                        {
                            Logger.Write("Could not find handler for " + command);
                        }
                        onCommandCompleted();
                    }
                    else if (isEvent(command))
                    {
                        Logger.Write("Handling as event");
                        var prefix = "event|";
                        EventDispatcher()
                        .Forward(command.Substring(prefix.Length, command.Length - prefix.Length));
                    }
                    lock (_commandProcessLock) {
                        _commandsInProcessing--;
                    }
                }, null);
            }
            else if (command.StartsWith("raw|"))
            {
                var msg = command.Substring(4, command.Length - 4);
                Console.Write(msg);
            }
            else
            {
                Console.WriteLine(command);
            }
        }