aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Application/OpenSim.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Application/OpenSim.cs')
-rw-r--r--OpenSim/Region/Application/OpenSim.cs254
1 files changed, 31 insertions, 223 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index b24641a..cffbb3b 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -82,8 +82,8 @@ namespace OpenSim
82 { 82 {
83 base.ReadExtraConfigSettings(); 83 base.ReadExtraConfigSettings();
84 84
85 IConfig startupConfig = m_config.Source.Configs["Startup"]; 85 IConfig startupConfig = Config.Configs["Startup"];
86 IConfig networkConfig = m_config.Source.Configs["Network"]; 86 IConfig networkConfig = Config.Configs["Network"];
87 87
88 int stpMaxThreads = 15; 88 int stpMaxThreads = 15;
89 89
@@ -106,22 +106,6 @@ namespace OpenSim
106 m_timeInterval = startupConfig.GetInt("timer_Interval", 1200); 106 m_timeInterval = startupConfig.GetInt("timer_Interval", 1200);
107 } 107 }
108 108
109 if (m_logFileAppender != null)
110 {
111 if (m_logFileAppender is log4net.Appender.FileAppender)
112 {
113 log4net.Appender.FileAppender appender =
114 (log4net.Appender.FileAppender)m_logFileAppender;
115 string fileName = startupConfig.GetString("LogFile", String.Empty);
116 if (fileName != String.Empty)
117 {
118 appender.File = fileName;
119 appender.ActivateOptions();
120 }
121 m_log.InfoFormat("[LOGGING]: Logging started to file {0}", appender.File);
122 }
123 }
124
125 string asyncCallMethodStr = startupConfig.GetString("async_call_method", String.Empty); 109 string asyncCallMethodStr = startupConfig.GetString("async_call_method", String.Empty);
126 FireAndForgetMethod asyncCallMethod; 110 FireAndForgetMethod asyncCallMethod;
127 if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) 111 if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod))
@@ -164,7 +148,7 @@ namespace OpenSim
164 break; 148 break;
165 case "rest": 149 case "rest":
166 m_console = new RemoteConsole("Region"); 150 m_console = new RemoteConsole("Region");
167 ((RemoteConsole)m_console).ReadConfig(m_config.Source); 151 ((RemoteConsole)m_console).ReadConfig(Config);
168 break; 152 break;
169 default: 153 default:
170 m_console = new LocalConsole("Region"); 154 m_console = new LocalConsole("Region");
@@ -174,6 +158,7 @@ namespace OpenSim
174 158
175 MainConsole.Instance = m_console; 159 MainConsole.Instance = m_console;
176 160
161 RegisterCommonAppenders(Config.Configs["Startup"]);
177 RegisterConsoleCommands(); 162 RegisterConsoleCommands();
178 163
179 base.StartupSpecific(); 164 base.StartupSpecific();
@@ -372,26 +357,6 @@ namespace OpenSim
372 "restart", 357 "restart",
373 "Restart all sims in this instance", RunCommand); 358 "Restart all sims in this instance", RunCommand);
374 359
375 m_console.Commands.AddCommand("General", false, "config set",
376 "config set <section> <key> <value>",
377 "Set a config option. In most cases this is not useful since changed parameters are not dynamically reloaded. Neither do changed parameters persist - you will have to change a config file manually and restart.", HandleConfig);
378
379 m_console.Commands.AddCommand("General", false, "config get",
380 "config get [<section>] [<key>]",
381 "Synonym for config show",
382 HandleConfig);
383
384 m_console.Commands.AddCommand("General", false, "config show",
385 "config show [<section>] [<key>]",
386 "Show config information",
387 "If neither section nor field are specified, then the whole current configuration is printed." + Environment.NewLine
388 + "If a section is given but not a field, then all fields in that section are printed.",
389 HandleConfig);
390
391 m_console.Commands.AddCommand("General", false, "config save",
392 "config save <path>",
393 "Save current configuration to a file at the given path", HandleConfig);
394
395 m_console.Commands.AddCommand("General", false, "command-script", 360 m_console.Commands.AddCommand("General", false, "command-script",
396 "command-script <script>", 361 "command-script <script>",
397 "Run a command script from file", RunCommand); 362 "Run a command script from file", RunCommand);
@@ -502,35 +467,6 @@ namespace OpenSim
502 } 467 }
503 468
504 /// <summary> 469 /// <summary>
505 /// Run an optional startup list of commands
506 /// </summary>
507 /// <param name="fileName"></param>
508 private void RunCommandScript(string fileName)
509 {
510 if (File.Exists(fileName))
511 {
512 m_log.Info("[COMMANDFILE]: Running " + fileName);
513
514 using (StreamReader readFile = File.OpenText(fileName))
515 {
516 string currentCommand;
517 while ((currentCommand = readFile.ReadLine()) != null)
518 {
519 currentCommand = currentCommand.Trim();
520 if (!(currentCommand == ""
521 || currentCommand.StartsWith(";")
522 || currentCommand.StartsWith("//")
523 || currentCommand.StartsWith("#")))
524 {
525 m_log.Info("[COMMANDFILE]: Running '" + currentCommand + "'");
526 m_console.RunCommand(currentCommand);
527 }
528 }
529 }
530 }
531 }
532
533 /// <summary>
534 /// Opens a file and uses it as input to the console command parser. 470 /// Opens a file and uses it as input to the console command parser.
535 /// </summary> 471 /// </summary>
536 /// <param name="fileName">name of file to use as input to the console</param> 472 /// <param name="fileName">name of file to use as input to the console</param>
@@ -634,111 +570,9 @@ namespace OpenSim
634 bool changed = PopulateRegionEstateInfo(regInfo); 570 bool changed = PopulateRegionEstateInfo(regInfo);
635 IScene scene; 571 IScene scene;
636 CreateRegion(regInfo, true, out scene); 572 CreateRegion(regInfo, true, out scene);
637 if (changed)
638 regInfo.EstateSettings.Save();
639 }
640
641 /// <summary>
642 /// Change and load configuration file data.
643 /// </summary>
644 /// <param name="module"></param>
645 /// <param name="cmd"></param>
646 private void HandleConfig(string module, string[] cmd)
647 {
648 List<string> args = new List<string>(cmd);
649 args.RemoveAt(0);
650 string[] cmdparams = args.ToArray();
651
652 if (cmdparams.Length > 0)
653 {
654 string firstParam = cmdparams[0].ToLower();
655
656 switch (firstParam)
657 {
658 case "set":
659 if (cmdparams.Length < 4)
660 {
661 Notice("Syntax: config set <section> <key> <value>");
662 Notice("Example: config set ScriptEngine.DotNetEngine NumberOfScriptThreads 5");
663 }
664 else
665 {
666 IConfig c;
667 IConfigSource source = new IniConfigSource();
668 c = source.AddConfig(cmdparams[1]);
669 if (c != null)
670 {
671 string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3);
672 c.Set(cmdparams[2], _value);
673 m_config.Source.Merge(source);
674
675 Notice("In section [{0}], set {1} = {2}", c.Name, cmdparams[2], _value);
676 }
677 }
678 break;
679
680 case "get":
681 case "show":
682 if (cmdparams.Length == 1)
683 {
684 foreach (IConfig config in m_config.Source.Configs)
685 {
686 Notice("[{0}]", config.Name);
687 string[] keys = config.GetKeys();
688 foreach (string key in keys)
689 Notice(" {0} = {1}", key, config.GetString(key));
690 }
691 }
692 else if (cmdparams.Length == 2 || cmdparams.Length == 3)
693 {
694 IConfig config = m_config.Source.Configs[cmdparams[1]];
695 if (config == null)
696 {
697 Notice("Section \"{0}\" does not exist.",cmdparams[1]);
698 break;
699 }
700 else
701 {
702 if (cmdparams.Length == 2)
703 {
704 Notice("[{0}]", config.Name);
705 foreach (string key in config.GetKeys())
706 Notice(" {0} = {1}", key, config.GetString(key));
707 }
708 else
709 {
710 Notice(
711 "config get {0} {1} : {2}",
712 cmdparams[1], cmdparams[2], config.GetString(cmdparams[2]));
713 }
714 }
715 }
716 else
717 {
718 Notice("Syntax: config {0} [<section>] [<key>]", firstParam);
719 Notice("Example: config {0} ScriptEngine.DotNetEngine NumberOfScriptThreads", firstParam);
720 }
721
722 break;
723
724 case "save":
725 if (cmdparams.Length < 2)
726 {
727 Notice("Syntax: config save <path>");
728 return;
729 }
730
731 if (Application.iniFilePath == cmdparams[1])
732 {
733 Notice("Path can not be " + Application.iniFilePath);
734 return;
735 }
736 573
737 Notice("Saving configuration file: " + cmdparams[1]); 574 if (changed)
738 m_config.Save(cmdparams[1]); 575 regInfo.EstateSettings.Save();
739 break;
740 }
741 }
742 } 576 }
743 577
744 /// <summary> 578 /// <summary>
@@ -757,33 +591,13 @@ namespace OpenSim
757 switch (cmdparams[0].ToLower()) 591 switch (cmdparams[0].ToLower())
758 { 592 {
759 case "list": 593 case "list":
760 foreach (IRegionModule irm in m_moduleLoader.GetLoadedSharedModules) 594 //TODO: Convert to new region modules
761 {
762 MainConsole.Instance.Output(String.Format("Shared region module: {0}", irm.Name));
763 }
764 break; 595 break;
765 case "unload": 596 case "unload":
766 if (cmdparams.Length > 1) 597 //TODO: Convert to new region modules
767 {
768 foreach (IRegionModule rm in new ArrayList(m_moduleLoader.GetLoadedSharedModules))
769 {
770 if (rm.Name.ToLower() == cmdparams[1].ToLower())
771 {
772 MainConsole.Instance.Output(String.Format("Unloading module: {0}", rm.Name));
773 m_moduleLoader.UnloadModule(rm);
774 }
775 }
776 }
777 break; 598 break;
778 case "load": 599 case "load":
779 if (cmdparams.Length > 1) 600 //TODO: Convert to new region modules
780 {
781 foreach (Scene s in new ArrayList(SceneManager.Scenes))
782 {
783 MainConsole.Instance.Output(String.Format("Loading module: {0}", cmdparams[1]));
784 m_moduleLoader.LoadRegionModules(cmdparams[1], s);
785 }
786 }
787 break; 601 break;
788 } 602 }
789 } 603 }
@@ -807,13 +621,6 @@ namespace OpenSim
807 621
808 switch (command) 622 switch (command)
809 { 623 {
810 case "command-script":
811 if (cmdparams.Length > 0)
812 {
813 RunCommandScript(cmdparams[0]);
814 }
815 break;
816
817 case "backup": 624 case "backup":
818 MainConsole.Instance.Output("Triggering save of pending object updates to persistent store"); 625 MainConsole.Instance.Output("Triggering save of pending object updates to persistent store");
819 SceneManager.BackupCurrentScene(); 626 SceneManager.BackupCurrentScene();
@@ -857,12 +664,20 @@ namespace OpenSim
857 664
858 if (!SceneManager.TrySetCurrentScene(newRegionName)) 665 if (!SceneManager.TrySetCurrentScene(newRegionName))
859 MainConsole.Instance.Output(String.Format("Couldn't select region {0}", newRegionName)); 666 MainConsole.Instance.Output(String.Format("Couldn't select region {0}", newRegionName));
667 else
668 RefreshPrompt();
860 } 669 }
861 else 670 else
862 { 671 {
863 MainConsole.Instance.Output("Usage: change region <region name>"); 672 MainConsole.Instance.Output("Usage: change region <region name>");
864 } 673 }
674 }
865 675
676 /// <summary>
677 /// Refreshs prompt with the current selection details.
678 /// </summary>
679 private void RefreshPrompt()
680 {
866 string regionName = (SceneManager.CurrentScene == null ? "root" : SceneManager.CurrentScene.RegionInfo.RegionName); 681 string regionName = (SceneManager.CurrentScene == null ? "root" : SceneManager.CurrentScene.RegionInfo.RegionName);
867 MainConsole.Instance.Output(String.Format("Currently selected region is {0}", regionName)); 682 MainConsole.Instance.Output(String.Format("Currently selected region is {0}", regionName));
868 683
@@ -884,6 +699,18 @@ namespace OpenSim
884 m_console.ConsoleScene = SceneManager.CurrentScene; 699 m_console.ConsoleScene = SceneManager.CurrentScene;
885 } 700 }
886 701
702 protected override void HandleRestartRegion(RegionInfo whichRegion)
703 {
704 base.HandleRestartRegion(whichRegion);
705
706 // Where we are restarting multiple scenes at once, a previous call to RefreshPrompt may have set the
707 // m_console.ConsoleScene to null (indicating all scenes).
708 if (m_console.ConsoleScene != null && whichRegion.RegionName == ((Scene)m_console.ConsoleScene).Name)
709 SceneManager.TrySetCurrentScene(whichRegion.RegionName);
710
711 RefreshPrompt();
712 }
713
887 /// <summary> 714 /// <summary>
888 /// Turn on some debugging values for OpenSim. 715 /// Turn on some debugging values for OpenSim.
889 /// </summary> 716 /// </summary>
@@ -1018,28 +845,9 @@ namespace OpenSim
1018 break; 845 break;
1019 846
1020 case "modules": 847 case "modules":
1021 MainConsole.Instance.Output("The currently loaded shared modules are:");
1022 foreach (IRegionModule module in m_moduleLoader.GetLoadedSharedModules)
1023 {
1024 MainConsole.Instance.Output("Shared Module: " + module.Name);
1025 }
1026
1027 SceneManager.ForEachScene(
1028 delegate(Scene scene) {
1029 m_log.Error("The currently loaded modules in " + scene.RegionInfo.RegionName + " are:");
1030 foreach (IRegionModule module in scene.Modules.Values)
1031 {
1032 if (!module.IsSharedModule)
1033 {
1034 m_log.Error("Region Module: " + module.Name);
1035 }
1036 }
1037 }
1038 );
1039
1040 SceneManager.ForEachScene( 848 SceneManager.ForEachScene(
1041 delegate(Scene scene) { 849 delegate(Scene scene) {
1042 MainConsole.Instance.Output("Loaded new region modules in" + scene.RegionInfo.RegionName + " are:"); 850 MainConsole.Instance.Output("Loaded region modules in" + scene.RegionInfo.RegionName + " are:");
1043 foreach (IRegionModuleBase module in scene.RegionModules.Values) 851 foreach (IRegionModuleBase module in scene.RegionModules.Values)
1044 { 852 {
1045 Type type = module.GetType().GetInterface("ISharedRegionModule"); 853 Type type = module.GetType().GetInterface("ISharedRegionModule");
@@ -1111,7 +919,7 @@ namespace OpenSim
1111 aCircuit.Name, 919 aCircuit.Name,
1112 aCircuit.child ? "child" : "root", 920 aCircuit.child ? "child" : "root",
1113 aCircuit.circuitcode.ToString(), 921 aCircuit.circuitcode.ToString(),
1114 aCircuit.IPAddress.ToString(), 922 aCircuit.IPAddress != null ? aCircuit.IPAddress.ToString() : "not set",
1115 aCircuit.Viewer); 923 aCircuit.Viewer);
1116 }); 924 });
1117 925