/// <summary> /// Start the mud engine. /// </summary> /// <param name="Flags">Flags control engine functions</param> /// <param name="Database"></param> /// <param name="Assemblies">Modules to integrate</param> /// <returns></returns> public static bool Start(StartupFlags Flags, WorldDataService Database, params ModuleAssembly[] Assemblies) { ShuttingDown = false; Core.Flags = Flags; try { // Setup the rule engine and some basic rules. GlobalRules = new RuleEngine(NewRuleQueueingMode.QueueNewRules); GlobalRules.DeclarePerformRuleBook("at startup", "[] : Considered when the engine is started."); GlobalRules.DeclarePerformRuleBook<MudObject>("singleplayer game started", "Considered when a single player game is begun"); // Integrate modules. The Core assembly is always integrated. IntegratedModules.Add(new ModuleAssembly(Assembly.GetExecutingAssembly(), new ModuleInfo { Author = "Blecki", Description = "RMUD Core", BaseNameSpace = "RMUD" }, "Core.dll")); IntegratedModules.AddRange(Assemblies); if ((Flags & StartupFlags.SearchDirectory) == StartupFlags.SearchDirectory) { foreach (var file in System.IO.Directory.EnumerateFiles(System.IO.Directory.GetCurrentDirectory()).Where(p => System.IO.Path.GetExtension(p) == ".dll")) { var assembly = System.Reflection.Assembly.LoadFrom(file); var infoType = assembly.GetTypes().FirstOrDefault(t => t.IsSubclassOf(typeof(ModuleInfo))); if (infoType != null) { IntegratedModules.Add(new ModuleAssembly(assembly, file)); if ((Flags & StartupFlags.Silent) == 0) Console.WriteLine("Discovered module: " + file); } } } foreach (var startupAssembly in IntegratedModules) IntegrateModule(startupAssembly); PersistentValueSerializer.AddGlobalSerializer(new BitArraySerializer()); InitializeCommandProcessor(); GlobalRules.FinalizeNewRules(); Core.Database = Database; Database.Initialize(); GlobalRules.ConsiderPerformRule("at startup"); if ((Flags & StartupFlags.SingleThreaded) == 0) StartThreadedCommandProcesor(); } catch (Exception e) { LogError("Failed to start mud engine."); LogError(e.Message); LogError(e.StackTrace); throw; } return true; }
/// <summary> /// Start the mud engine. /// </summary> /// <param name="Flags">Flags control engine functions</param> /// <param name="Database"></param> /// <param name="Assemblies">Modules to integrate</param> /// <returns></returns> public static bool Start(StartupFlags Flags, String DatabasePath, WorldDataService Database, Assembly AdditionalAssembly = null) { Core.DatabasePath = DatabasePath; ShuttingDown = false; Core.Flags = Flags; try { // Setup the rule engine and some basic rules. GlobalRules = new RuleEngine(NewRuleQueueingMode.QueueNewRules); GlobalRules.DeclarePerformRuleBook("at startup", "[] : Considered when the engine is started."); GlobalRules.DeclarePerformRuleBook <MudObject>("singleplayer game started", "Considered when a single player game is begun"); DefaultParser = new CommandParser(); InitializeEngine(Assembly.GetExecutingAssembly()); if (AdditionalAssembly != null) { InitializeEngine(AdditionalAssembly); } InitializeCommandProcessor(); GlobalRules.FinalizeNewRules(); Core.Database = Database; Database.Initialize(); GlobalRules.ConsiderPerformRule("at startup"); if ((Flags & StartupFlags.SingleThreaded) == 0) { StartThreadedCommandProcesor(); } } catch (Exception e) { LogError("Failed to start mud engine."); LogError(e.Message); LogError(e.StackTrace); throw; } return(true); }
/// <summary> /// Start the mud engine. /// </summary> /// <param name="Flags">Flags control engine functions</param> /// <param name="Database"></param> /// <param name="Assemblies">Modules to integrate</param> /// <returns></returns> public static bool Start(StartupFlags Flags, WorldDataService Database, params ModuleAssembly[] Assemblies) { ShuttingDown = false; Core.Flags = Flags; try { // Setup the rule engine and some basic rules. GlobalRules = new RuleEngine(NewRuleQueueingMode.QueueNewRules); GlobalRules.DeclarePerformRuleBook("at startup", "[] : Considered when the engine is started."); GlobalRules.DeclarePerformRuleBook <MudObject>("singleplayer game started", "Considered when a single player game is begun"); // Integrate modules. The Core assembly is always integrated. IntegratedModules.Add(new ModuleAssembly(Assembly.GetExecutingAssembly(), new ModuleInfo { Author = "Blecki", Description = "RMUD Core", BaseNameSpace = "RMUD" }, "Core.dll")); IntegratedModules.AddRange(Assemblies); if ((Flags & StartupFlags.SearchDirectory) == StartupFlags.SearchDirectory) { foreach (var file in System.IO.Directory.EnumerateFiles(System.IO.Directory.GetCurrentDirectory()).Where(p => System.IO.Path.GetExtension(p) == ".dll")) { var assembly = System.Reflection.Assembly.LoadFrom(file); var infoType = assembly.GetTypes().FirstOrDefault(t => t.IsSubclassOf(typeof(ModuleInfo))); if (infoType != null) { IntegratedModules.Add(new ModuleAssembly(assembly, file)); if ((Flags & StartupFlags.Silent) == 0) { Console.WriteLine("Discovered module: " + file); } } } } foreach (var startupAssembly in IntegratedModules) { IntegrateModule(startupAssembly); } PersistentValueSerializer.AddGlobalSerializer(new BitArraySerializer()); InitializeCommandProcessor(); GlobalRules.FinalizeNewRules(); Core.Database = Database; Database.Initialize(); GlobalRules.ConsiderPerformRule("at startup"); if ((Flags & StartupFlags.SingleThreaded) == 0) { StartThreadedCommandProcesor(); } } catch (Exception e) { LogError("Failed to start mud engine."); LogError(e.Message); LogError(e.StackTrace); throw; } return(true); }