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 (isCommand(command) || isEvent(command)) { lock (_commandProcessLock) { _commandsInProcessing++; } ThreadPool.QueueUserWorkItem((m) => { if (isCommand(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)) { var prefix = "event|"; EventDispatcher() .Forward(command.Substring(prefix.Length, command.Length - prefix.Length)); } lock (_commandProcessLock) { _commandsInProcessing--; } }, null); } else { Console.WriteLine(command); } }
private void dispatchMessage(string command) { if (command.Length == 0) return; var parser = new CommandStringParser(); var args = parser.Parse(command); if (isError(command)) { printError(command); return; } if (isComment(command)) { printComment(command); return; } _dispatcher.For( parser.GetCommand(args), parser.GetArguments(args)); }