public void Initialize() { // Initialize Engine engine.SetInputToDefaultAudioDevice(); engine.UnloadAllGrammars(); // Load Grammar var commandDatabase = CommandDatabaseConfig.FromDirectory(Program.Config.CommandDatabaseDirectory); var grammars = GrammarGenerator.FromConfig(commandDatabase); foreach (var grammar in grammars) { engine.LoadGrammar(grammar); } // Load Corrections var correctionsContent = File.ReadAllText(Program.Config.CorrectionsDictionaryPath); var correctionsUnloaded = JsonConvert.DeserializeObject <Dictionary <string, string> >(correctionsContent); corrections.Clear(); foreach (var kvp in correctionsUnloaded) { corrections.Add(kvp.Key, kvp.Value); } // Initialize Services foreach (var service in services.Values) { service.Initialize(); } }
public static CommandDatabaseConfig FromDirectory(string directory) { if (directory == null) { throw new ArgumentNullException("directory"); } var config = new CommandDatabaseConfig(); var di = new DirectoryInfo(directory); var files = di.GetFiles("*.json"); foreach (var file in files) { var fragmentContents = File.ReadAllText(file.FullName); var fragmentConfig = JsonConvert.DeserializeObject <CommandDatabaseConfig>(fragmentContents); config.MergeFrom(fragmentConfig); } config.Commands.Sort((l, r) => { int lLen = l.Pattern.Length - (Math.Max(l.Pattern.LastIndexOf('}'), 0) - Math.Max(l.Pattern.IndexOf('{'), 0)); int rLen = r.Pattern.Length - (Math.Max(r.Pattern.LastIndexOf('}'), 0) - Math.Max(r.Pattern.IndexOf('{'), 0)); return(rLen - lLen); }); config.Validate(); return(config); }
public static IEnumerable <Grammar> FromConfig(CommandDatabaseConfig config) { if (config == null) { throw new ArgumentNullException("config"); } yield return(GenerateCommandGrammar(config.Commands)); }
private void MergeFrom(CommandDatabaseConfig source) { if (!source.Enabled) { return; } Commands.AddRange(source.Commands); }
public CommandEngine() { Enabled = false; segment = ""; lastTs = DateTime.MinValue; actions = new Dictionary <string, IAction>(); commandDatabase = CommandDatabaseConfig.FromDirectory(Program.Config.CommandDatabaseDirectory); var asm = Assembly.GetExecutingAssembly(); foreach (var type in asm.GetTypes() .Where(x => typeof(IAction).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract)) { actions[type.Name] = (IAction)Activator.CreateInstance(type); } }