diff options
Diffstat (limited to 'OpenSim/Region/Application')
-rw-r--r-- | OpenSim/Region/Application/Application.cs | 42 | ||||
-rw-r--r-- | OpenSim/Region/Application/ConfigurationLoader.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/Application/OpenSim.cs | 109 | ||||
-rw-r--r-- | OpenSim/Region/Application/OpenSimBase.cs | 90 |
4 files changed, 69 insertions, 177 deletions
diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs index c3e7ec2..3a4e5df 100644 --- a/OpenSim/Region/Application/Application.cs +++ b/OpenSim/Region/Application/Application.cs | |||
@@ -103,48 +103,63 @@ namespace OpenSim | |||
103 | "[OPENSIM MAIN]: Environment variable MONO_THREADS_PER_CPU is {0}", monoThreadsPerCpu ?? "unset"); | 103 | "[OPENSIM MAIN]: Environment variable MONO_THREADS_PER_CPU is {0}", monoThreadsPerCpu ?? "unset"); |
104 | 104 | ||
105 | // Verify the Threadpool allocates or uses enough worker and IO completion threads | 105 | // Verify the Threadpool allocates or uses enough worker and IO completion threads |
106 | // .NET 2.0 workerthreads default to 50 * numcores | 106 | // .NET 2.0, workerthreads default to 50 * numcores |
107 | // .NET 3.0 workerthreads defaults to 250 * numcores | 107 | // .NET 3.0, workerthreads defaults to 250 * numcores |
108 | // .NET 4.0 workerthreads are dynamic based on bitness and OS resources | 108 | // .NET 4.0, workerthreads are dynamic based on bitness and OS resources |
109 | // Max IO Completion threads are 1000 on all 3 CLRs. | 109 | // Max IO Completion threads are 1000 on all 3 CLRs |
110 | // | ||
111 | // Mono 2.10.9 to at least Mono 3.1, workerthreads default to 100 * numcores, iocp threads to 4 * numcores | ||
110 | int workerThreadsMin = 500; | 112 | int workerThreadsMin = 500; |
111 | int workerThreadsMax = 1000; // may need further adjustment to match other CLR | 113 | int workerThreadsMax = 1000; // may need further adjustment to match other CLR |
112 | int iocpThreadsMin = 1000; | 114 | int iocpThreadsMin = 1000; |
113 | int iocpThreadsMax = 2000; // may need further adjustment to match other CLR | 115 | int iocpThreadsMax = 2000; // may need further adjustment to match other CLR |
116 | |||
117 | { | ||
118 | int currentMinWorkerThreads, currentMinIocpThreads; | ||
119 | System.Threading.ThreadPool.GetMinThreads(out currentMinWorkerThreads, out currentMinIocpThreads); | ||
120 | m_log.InfoFormat( | ||
121 | "[OPENSIM MAIN]: Runtime gave us {0} min worker threads and {1} min IOCP threads", | ||
122 | currentMinWorkerThreads, currentMinIocpThreads); | ||
123 | } | ||
124 | |||
114 | int workerThreads, iocpThreads; | 125 | int workerThreads, iocpThreads; |
115 | System.Threading.ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads); | 126 | System.Threading.ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads); |
116 | m_log.InfoFormat("[OPENSIM MAIN]: Runtime gave us {0} worker threads and {1} IOCP threads", workerThreads, iocpThreads); | 127 | m_log.InfoFormat("[OPENSIM MAIN]: Runtime gave us {0} max worker threads and {1} max IOCP threads", workerThreads, iocpThreads); |
128 | |||
117 | if (workerThreads < workerThreadsMin) | 129 | if (workerThreads < workerThreadsMin) |
118 | { | 130 | { |
119 | workerThreads = workerThreadsMin; | 131 | workerThreads = workerThreadsMin; |
120 | m_log.InfoFormat("[OPENSIM MAIN]: Bumping up to worker threads to {0}",workerThreads); | 132 | m_log.InfoFormat("[OPENSIM MAIN]: Bumping up to max worker threads to {0}",workerThreads); |
121 | } | 133 | } |
122 | if (workerThreads > workerThreadsMax) | 134 | if (workerThreads > workerThreadsMax) |
123 | { | 135 | { |
124 | workerThreads = workerThreadsMax; | 136 | workerThreads = workerThreadsMax; |
125 | m_log.InfoFormat("[OPENSIM MAIN]: Limiting worker threads to {0}",workerThreads); | 137 | m_log.InfoFormat("[OPENSIM MAIN]: Limiting max worker threads to {0}",workerThreads); |
126 | } | 138 | } |
139 | |||
127 | // Increase the number of IOCP threads available. | 140 | // Increase the number of IOCP threads available. |
128 | // Mono defaults to a tragically low number (24 on 6-core / 8GB Fedora 17) | 141 | // Mono defaults to a tragically low number (24 on 6-core / 8GB Fedora 17) |
129 | if (iocpThreads < iocpThreadsMin) | 142 | if (iocpThreads < iocpThreadsMin) |
130 | { | 143 | { |
131 | iocpThreads = iocpThreadsMin; | 144 | iocpThreads = iocpThreadsMin; |
132 | m_log.InfoFormat("[OPENSIM MAIN]: Bumping up IO completion threads to {0}",iocpThreads); | 145 | m_log.InfoFormat("[OPENSIM MAIN]: Bumping up max IOCP threads to {0}",iocpThreads); |
133 | } | 146 | } |
134 | // Make sure we don't overallocate IOCP threads and thrash system resources | 147 | // Make sure we don't overallocate IOCP threads and thrash system resources |
135 | if ( iocpThreads > iocpThreadsMax ) | 148 | if ( iocpThreads > iocpThreadsMax ) |
136 | { | 149 | { |
137 | iocpThreads = iocpThreadsMax; | 150 | iocpThreads = iocpThreadsMax; |
138 | m_log.InfoFormat("[OPENSIM MAIN]: Limiting IO completion threads to {0}",iocpThreads); | 151 | m_log.InfoFormat("[OPENSIM MAIN]: Limiting max IOCP completion threads to {0}",iocpThreads); |
139 | } | 152 | } |
140 | // set the resulting worker and IO completion thread counts back to ThreadPool | 153 | // set the resulting worker and IO completion thread counts back to ThreadPool |
141 | if ( System.Threading.ThreadPool.SetMaxThreads(workerThreads, iocpThreads) ) | 154 | if ( System.Threading.ThreadPool.SetMaxThreads(workerThreads, iocpThreads) ) |
142 | { | 155 | { |
143 | m_log.InfoFormat("[OPENSIM MAIN]: Threadpool set to {0} worker threads and {1} IO completion threads", workerThreads, iocpThreads); | 156 | m_log.InfoFormat( |
157 | "[OPENSIM MAIN]: Threadpool set to {0} max worker threads and {1} max IOCP threads", | ||
158 | workerThreads, iocpThreads); | ||
144 | } | 159 | } |
145 | else | 160 | else |
146 | { | 161 | { |
147 | m_log.Info("[OPENSIM MAIN]: Threadpool reconfiguration failed, runtime defaults still in effect."); | 162 | m_log.Warn("[OPENSIM MAIN]: Threadpool reconfiguration failed, runtime defaults still in effect."); |
148 | } | 163 | } |
149 | 164 | ||
150 | // Check if the system is compatible with OpenSimulator. | 165 | // Check if the system is compatible with OpenSimulator. |
@@ -152,17 +167,16 @@ namespace OpenSim | |||
152 | string supported = String.Empty; | 167 | string supported = String.Empty; |
153 | if (Util.IsEnvironmentSupported(ref supported)) | 168 | if (Util.IsEnvironmentSupported(ref supported)) |
154 | { | 169 | { |
155 | m_log.Info("Environment is compatible.\n"); | 170 | m_log.Info("[OPENSIM MAIN]: Environment is supported by OpenSimulator."); |
156 | } | 171 | } |
157 | else | 172 | else |
158 | { | 173 | { |
159 | m_log.Warn("Environment is unsupported (" + supported + ")\n"); | 174 | m_log.Warn("[OPENSIM MAIN]: Environment is not supported by OpenSimulator (" + supported + ")\n"); |
160 | } | 175 | } |
161 | 176 | ||
162 | // Configure nIni aliases and localles | 177 | // Configure nIni aliases and localles |
163 | Culture.SetCurrentCulture(); | 178 | Culture.SetCurrentCulture(); |
164 | 179 | ||
165 | |||
166 | // Validate that the user has the most basic configuration done | 180 | // Validate that the user has the most basic configuration done |
167 | // If not, offer to do the most basic configuration for them warning them along the way of the importance of | 181 | // If not, offer to do the most basic configuration for them warning them along the way of the importance of |
168 | // reading these files. | 182 | // reading these files. |
diff --git a/OpenSim/Region/Application/ConfigurationLoader.cs b/OpenSim/Region/Application/ConfigurationLoader.cs index fc3999f..bc7ecb7 100644 --- a/OpenSim/Region/Application/ConfigurationLoader.cs +++ b/OpenSim/Region/Application/ConfigurationLoader.cs | |||
@@ -201,11 +201,11 @@ namespace OpenSim | |||
201 | 201 | ||
202 | envConfigSource.LoadEnv(); | 202 | envConfigSource.LoadEnv(); |
203 | m_config.Source.Merge(envConfigSource); | 203 | m_config.Source.Merge(envConfigSource); |
204 | m_config.Source.ExpandKeyValues(); | ||
205 | } | 204 | } |
206 | 205 | ||
207 | |||
208 | ReadConfigSettings(); | 206 | ReadConfigSettings(); |
207 | |||
208 | m_config.Source.ExpandKeyValues(); | ||
209 | 209 | ||
210 | return m_config; | 210 | return m_config; |
211 | } | 211 | } |
@@ -337,7 +337,6 @@ namespace OpenSim | |||
337 | config.Set("physics", "OpenDynamicsEngine"); | 337 | config.Set("physics", "OpenDynamicsEngine"); |
338 | config.Set("meshing", "Meshmerizer"); | 338 | config.Set("meshing", "Meshmerizer"); |
339 | config.Set("physical_prim", true); | 339 | config.Set("physical_prim", true); |
340 | config.Set("see_into_this_sim_from_neighbor", true); | ||
341 | config.Set("serverside_object_permissions", true); | 340 | config.Set("serverside_object_permissions", true); |
342 | config.Set("storage_plugin", "OpenSim.Data.SQLite.dll"); | 341 | config.Set("storage_plugin", "OpenSim.Data.SQLite.dll"); |
343 | config.Set("storage_connection_string", "URI=file:OpenSim.db,version=3"); | 342 | config.Set("storage_connection_string", "URI=file:OpenSim.db,version=3"); |
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index a7e7d03..a18a6fe 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -86,6 +86,7 @@ namespace OpenSim | |||
86 | IConfig startupConfig = Config.Configs["Startup"]; | 86 | IConfig startupConfig = Config.Configs["Startup"]; |
87 | IConfig networkConfig = Config.Configs["Network"]; | 87 | IConfig networkConfig = Config.Configs["Network"]; |
88 | 88 | ||
89 | int stpMinThreads = 2; | ||
89 | int stpMaxThreads = 15; | 90 | int stpMaxThreads = 15; |
90 | 91 | ||
91 | if (startupConfig != null) | 92 | if (startupConfig != null) |
@@ -112,12 +113,13 @@ namespace OpenSim | |||
112 | if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) | 113 | if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) |
113 | Util.FireAndForgetMethod = asyncCallMethod; | 114 | Util.FireAndForgetMethod = asyncCallMethod; |
114 | 115 | ||
116 | stpMinThreads = startupConfig.GetInt("MinPoolThreads", 15); | ||
115 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15); | 117 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15); |
116 | m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) "); | 118 | m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) "); |
117 | } | 119 | } |
118 | 120 | ||
119 | if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool) | 121 | if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool) |
120 | Util.InitThreadPool(stpMaxThreads); | 122 | Util.InitThreadPool(stpMinThreads, stpMaxThreads); |
121 | 123 | ||
122 | m_log.Info("[OPENSIM MAIN]: Using async_call_method " + Util.FireAndForgetMethod); | 124 | m_log.Info("[OPENSIM MAIN]: Using async_call_method " + Util.FireAndForgetMethod); |
123 | } | 125 | } |
@@ -170,6 +172,13 @@ namespace OpenSim | |||
170 | if (userStatsURI != String.Empty) | 172 | if (userStatsURI != String.Empty) |
171 | MainServer.Instance.AddStreamHandler(new OpenSim.UXSimStatusHandler(this)); | 173 | MainServer.Instance.AddStreamHandler(new OpenSim.UXSimStatusHandler(this)); |
172 | 174 | ||
175 | if (managedStatsURI != String.Empty) | ||
176 | { | ||
177 | string urlBase = String.Format("/{0}/", managedStatsURI); | ||
178 | MainServer.Instance.AddHTTPHandler(urlBase, StatsManager.HandleStatsRequest); | ||
179 | m_log.InfoFormat("[OPENSIM] Enabling remote managed stats fetch. URL = {0}", urlBase); | ||
180 | } | ||
181 | |||
173 | if (m_console is RemoteConsole) | 182 | if (m_console is RemoteConsole) |
174 | { | 183 | { |
175 | if (m_consolePort == 0) | 184 | if (m_consolePort == 0) |
@@ -226,18 +235,6 @@ namespace OpenSim | |||
226 | "Force the update of all objects on clients", | 235 | "Force the update of all objects on clients", |
227 | HandleForceUpdate); | 236 | HandleForceUpdate); |
228 | 237 | ||
229 | m_console.Commands.AddCommand("Debug", false, "debug packet", | ||
230 | "debug packet <level> [<avatar-first-name> <avatar-last-name>]", | ||
231 | "Turn on packet debugging", | ||
232 | "If level > 255 then all incoming and outgoing packets are logged.\n" | ||
233 | + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n" | ||
234 | + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n" | ||
235 | + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n" | ||
236 | + "If level <= 50 then outgoing ImprovedTerseObjectUpdate packets are not logged.\n" | ||
237 | + "If level <= 0 then no packets are logged.\n" | ||
238 | + "If an avatar name is given then only packets from that avatar are logged", | ||
239 | Debug); | ||
240 | |||
241 | m_console.Commands.AddCommand("General", false, "change region", | 238 | m_console.Commands.AddCommand("General", false, "change region", |
242 | "change region <region name>", | 239 | "change region <region name>", |
243 | "Change current console region", ChangeSelectedRegion); | 240 | "Change current console region", ChangeSelectedRegion); |
@@ -358,21 +355,9 @@ namespace OpenSim | |||
358 | m_console.Commands.AddCommand("Regions", false, "delete-region", | 355 | m_console.Commands.AddCommand("Regions", false, "delete-region", |
359 | "delete-region <name>", | 356 | "delete-region <name>", |
360 | "Delete a region from disk", RunCommand); | 357 | "Delete a region from disk", RunCommand); |
361 | |||
362 | m_console.Commands.AddCommand("General", false, "modules list", | ||
363 | "modules list", | ||
364 | "List modules", HandleModules); | ||
365 | |||
366 | m_console.Commands.AddCommand("General", false, "modules load", | ||
367 | "modules load <name>", | ||
368 | "Load a module", HandleModules); | ||
369 | |||
370 | m_console.Commands.AddCommand("General", false, "modules unload", | ||
371 | "modules unload <name>", | ||
372 | "Unload a module", HandleModules); | ||
373 | } | 358 | } |
374 | 359 | ||
375 | public override void ShutdownSpecific() | 360 | protected override void ShutdownSpecific() |
376 | { | 361 | { |
377 | if (m_shutdownCommandsFile != String.Empty) | 362 | if (m_shutdownCommandsFile != String.Empty) |
378 | { | 363 | { |
@@ -435,8 +420,8 @@ namespace OpenSim | |||
435 | { | 420 | { |
436 | RegionInfo regionInfo = presence.Scene.RegionInfo; | 421 | RegionInfo regionInfo = presence.Scene.RegionInfo; |
437 | 422 | ||
438 | if (presence.Firstname.ToLower().Contains(mainParams[2].ToLower()) && | 423 | if (presence.Firstname.ToLower().Equals(mainParams[2].ToLower()) && |
439 | presence.Lastname.ToLower().Contains(mainParams[3].ToLower())) | 424 | presence.Lastname.ToLower().Equals(mainParams[3].ToLower())) |
440 | { | 425 | { |
441 | MainConsole.Instance.Output( | 426 | MainConsole.Instance.Output( |
442 | String.Format( | 427 | String.Format( |
@@ -450,6 +435,7 @@ namespace OpenSim | |||
450 | presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n"); | 435 | presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n"); |
451 | 436 | ||
452 | presence.Scene.IncomingCloseAgent(presence.UUID, force); | 437 | presence.Scene.IncomingCloseAgent(presence.UUID, force); |
438 | break; | ||
453 | } | 439 | } |
454 | } | 440 | } |
455 | 441 | ||
@@ -566,34 +552,6 @@ namespace OpenSim | |||
566 | } | 552 | } |
567 | 553 | ||
568 | /// <summary> | 554 | /// <summary> |
569 | /// Load, Unload, and list Region modules in use | ||
570 | /// </summary> | ||
571 | /// <param name="module"></param> | ||
572 | /// <param name="cmd"></param> | ||
573 | private void HandleModules(string module, string[] cmd) | ||
574 | { | ||
575 | List<string> args = new List<string>(cmd); | ||
576 | args.RemoveAt(0); | ||
577 | string[] cmdparams = args.ToArray(); | ||
578 | |||
579 | if (cmdparams.Length > 0) | ||
580 | { | ||
581 | switch (cmdparams[0].ToLower()) | ||
582 | { | ||
583 | case "list": | ||
584 | //TODO: Convert to new region modules | ||
585 | break; | ||
586 | case "unload": | ||
587 | //TODO: Convert to new region modules | ||
588 | break; | ||
589 | case "load": | ||
590 | //TODO: Convert to new region modules | ||
591 | break; | ||
592 | } | ||
593 | } | ||
594 | } | ||
595 | |||
596 | /// <summary> | ||
597 | /// Runs commands issued by the server console from the operator | 555 | /// Runs commands issued by the server console from the operator |
598 | /// </summary> | 556 | /// </summary> |
599 | /// <param name="command">The first argument of the parameter (the command)</param> | 557 | /// <param name="command">The first argument of the parameter (the command)</param> |
@@ -701,45 +659,6 @@ namespace OpenSim | |||
701 | RefreshPrompt(); | 659 | RefreshPrompt(); |
702 | } | 660 | } |
703 | 661 | ||
704 | /// <summary> | ||
705 | /// Turn on some debugging values for OpenSim. | ||
706 | /// </summary> | ||
707 | /// <param name="args"></param> | ||
708 | protected void Debug(string module, string[] args) | ||
709 | { | ||
710 | if (args.Length == 1) | ||
711 | return; | ||
712 | |||
713 | switch (args[1]) | ||
714 | { | ||
715 | case "packet": | ||
716 | string name = null; | ||
717 | if (args.Length == 5) | ||
718 | name = string.Format("{0} {1}", args[3], args[4]); | ||
719 | |||
720 | if (args.Length > 2) | ||
721 | { | ||
722 | int newDebug; | ||
723 | if (int.TryParse(args[2], out newDebug)) | ||
724 | { | ||
725 | SceneManager.SetDebugPacketLevelOnCurrentScene(newDebug, name); | ||
726 | // We provide user information elsewhere if any clients had their debug level set. | ||
727 | // MainConsole.Instance.OutputFormat("Debug packet level set to {0}", newDebug); | ||
728 | } | ||
729 | else | ||
730 | { | ||
731 | MainConsole.Instance.Output("Usage: debug packet 0..255"); | ||
732 | } | ||
733 | } | ||
734 | |||
735 | break; | ||
736 | |||
737 | default: | ||
738 | MainConsole.Instance.Output("Unknown debug command"); | ||
739 | break; | ||
740 | } | ||
741 | } | ||
742 | |||
743 | // see BaseOpenSimServer | 662 | // see BaseOpenSimServer |
744 | /// <summary> | 663 | /// <summary> |
745 | /// Many commands list objects for debugging. Some of the types are listed here | 664 | /// Many commands list objects for debugging. Some of the types are listed here |
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 88bd869..4891c1a 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -75,6 +75,7 @@ namespace OpenSim | |||
75 | protected int proxyOffset = 0; | 75 | protected int proxyOffset = 0; |
76 | 76 | ||
77 | public string userStatsURI = String.Empty; | 77 | public string userStatsURI = String.Empty; |
78 | public string managedStatsURI = String.Empty; | ||
78 | 79 | ||
79 | protected bool m_autoCreateClientStack = true; | 80 | protected bool m_autoCreateClientStack = true; |
80 | 81 | ||
@@ -199,6 +200,8 @@ namespace OpenSim | |||
199 | new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule"); | 200 | new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule"); |
200 | 201 | ||
201 | m_permsModules = new List<string>(permissionModules.Split(',')); | 202 | m_permsModules = new List<string>(permissionModules.Split(',')); |
203 | |||
204 | managedStatsURI = startupConfig.GetString("ManagedStatsRemoteFetchURI", String.Empty); | ||
202 | } | 205 | } |
203 | 206 | ||
204 | // Load the simulation data service | 207 | // Load the simulation data service |
@@ -248,10 +251,7 @@ namespace OpenSim | |||
248 | } | 251 | } |
249 | 252 | ||
250 | if (m_console != null) | 253 | if (m_console != null) |
251 | { | ||
252 | StatsManager.RegisterConsoleCommands(m_console); | ||
253 | AddPluginCommands(m_console); | 254 | AddPluginCommands(m_console); |
254 | } | ||
255 | } | 255 | } |
256 | 256 | ||
257 | protected virtual void AddPluginCommands(ICommandConsole console) | 257 | protected virtual void AddPluginCommands(ICommandConsole console) |
@@ -496,9 +496,6 @@ namespace OpenSim | |||
496 | scene.SnmpService.LinkUp(scene); | 496 | scene.SnmpService.LinkUp(scene); |
497 | } | 497 | } |
498 | 498 | ||
499 | scene.Start(); | ||
500 | scene.StartScripts(); | ||
501 | |||
502 | return clientServers; | 499 | return clientServers; |
503 | } | 500 | } |
504 | 501 | ||
@@ -813,7 +810,7 @@ namespace OpenSim | |||
813 | 810 | ||
814 | if (foundClientServer) | 811 | if (foundClientServer) |
815 | { | 812 | { |
816 | m_clientServers[clientServerElement].NetworkStop(); | 813 | m_clientServers[clientServerElement].Stop(); |
817 | m_clientServers.RemoveAt(clientServerElement); | 814 | m_clientServers.RemoveAt(clientServerElement); |
818 | } | 815 | } |
819 | } | 816 | } |
@@ -827,6 +824,7 @@ namespace OpenSim | |||
827 | ShutdownClientServer(whichRegion); | 824 | ShutdownClientServer(whichRegion); |
828 | IScene scene; | 825 | IScene scene; |
829 | CreateRegion(whichRegion, true, out scene); | 826 | CreateRegion(whichRegion, true, out scene); |
827 | scene.Start(); | ||
830 | } | 828 | } |
831 | 829 | ||
832 | # region Setup methods | 830 | # region Setup methods |
@@ -840,73 +838,49 @@ namespace OpenSim | |||
840 | /// <summary> | 838 | /// <summary> |
841 | /// Handler to supply the current status of this sim | 839 | /// Handler to supply the current status of this sim |
842 | /// </summary> | 840 | /// </summary> |
841 | /// <remarks> | ||
843 | /// Currently this is always OK if the simulator is still listening for connections on its HTTP service | 842 | /// Currently this is always OK if the simulator is still listening for connections on its HTTP service |
844 | public class SimStatusHandler : IStreamedRequestHandler | 843 | /// </remarks> |
844 | public class SimStatusHandler : BaseStreamHandler | ||
845 | { | 845 | { |
846 | public byte[] Handle(string path, Stream request, | 846 | public SimStatusHandler() : base("GET", "/simstatus", "SimStatus", "Simulator Status") {} |
847 | |||
848 | protected override byte[] ProcessRequest(string path, Stream request, | ||
847 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 849 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
848 | { | 850 | { |
849 | return Util.UTF8.GetBytes("OK"); | 851 | return Util.UTF8.GetBytes("OK"); |
850 | } | 852 | } |
851 | 853 | ||
852 | public string Name { get { return "SimStatus"; } } | 854 | public override string ContentType |
853 | public string Description { get { return "Simulator Status"; } } | ||
854 | |||
855 | public string ContentType | ||
856 | { | 855 | { |
857 | get { return "text/plain"; } | 856 | get { return "text/plain"; } |
858 | } | 857 | } |
859 | |||
860 | public string HttpMethod | ||
861 | { | ||
862 | get { return "GET"; } | ||
863 | } | ||
864 | |||
865 | public string Path | ||
866 | { | ||
867 | get { return "/simstatus"; } | ||
868 | } | ||
869 | } | 858 | } |
870 | 859 | ||
871 | /// <summary> | 860 | /// <summary> |
872 | /// Handler to supply the current extended status of this sim | 861 | /// Handler to supply the current extended status of this sim |
873 | /// Sends the statistical data in a json serialization | 862 | /// Sends the statistical data in a json serialization |
874 | /// </summary> | 863 | /// </summary> |
875 | public class XSimStatusHandler : IStreamedRequestHandler | 864 | public class XSimStatusHandler : BaseStreamHandler |
876 | { | 865 | { |
877 | OpenSimBase m_opensim; | 866 | OpenSimBase m_opensim; |
878 | string osXStatsURI = String.Empty; | ||
879 | |||
880 | public string Name { get { return "XSimStatus"; } } | ||
881 | public string Description { get { return "Simulator XStatus"; } } | ||
882 | 867 | ||
883 | public XSimStatusHandler(OpenSimBase sim) | 868 | public XSimStatusHandler(OpenSimBase sim) |
869 | : base("GET", "/" + Util.SHA1Hash(sim.osSecret), "XSimStatus", "Simulator XStatus") | ||
884 | { | 870 | { |
885 | m_opensim = sim; | 871 | m_opensim = sim; |
886 | osXStatsURI = Util.SHA1Hash(sim.osSecret); | ||
887 | } | 872 | } |
888 | 873 | ||
889 | public byte[] Handle(string path, Stream request, | 874 | protected override byte[] ProcessRequest(string path, Stream request, |
890 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 875 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
891 | { | 876 | { |
892 | return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest)); | 877 | return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest)); |
893 | } | 878 | } |
894 | 879 | ||
895 | public string ContentType | 880 | public override string ContentType |
896 | { | 881 | { |
897 | get { return "text/plain"; } | 882 | get { return "text/plain"; } |
898 | } | 883 | } |
899 | |||
900 | public string HttpMethod | ||
901 | { | ||
902 | get { return "GET"; } | ||
903 | } | ||
904 | |||
905 | public string Path | ||
906 | { | ||
907 | // This is for the OpenSimulator instance and is the osSecret hashed | ||
908 | get { return "/" + osXStatsURI; } | ||
909 | } | ||
910 | } | 884 | } |
911 | 885 | ||
912 | /// <summary> | 886 | /// <summary> |
@@ -915,42 +889,26 @@ namespace OpenSim | |||
915 | /// If the request contains a key, "callback" the response will be wrappend in the | 889 | /// If the request contains a key, "callback" the response will be wrappend in the |
916 | /// associated value for jsonp used with ajax/javascript | 890 | /// associated value for jsonp used with ajax/javascript |
917 | /// </summary> | 891 | /// </summary> |
918 | public class UXSimStatusHandler : IStreamedRequestHandler | 892 | protected class UXSimStatusHandler : BaseStreamHandler |
919 | { | 893 | { |
920 | OpenSimBase m_opensim; | 894 | OpenSimBase m_opensim; |
921 | string osUXStatsURI = String.Empty; | ||
922 | |||
923 | public string Name { get { return "UXSimStatus"; } } | ||
924 | public string Description { get { return "Simulator UXStatus"; } } | ||
925 | 895 | ||
926 | public UXSimStatusHandler(OpenSimBase sim) | 896 | public UXSimStatusHandler(OpenSimBase sim) |
897 | : base("GET", "/" + sim.userStatsURI, "UXSimStatus", "Simulator UXStatus") | ||
927 | { | 898 | { |
928 | m_opensim = sim; | 899 | m_opensim = sim; |
929 | osUXStatsURI = sim.userStatsURI; | ||
930 | |||
931 | } | 900 | } |
932 | 901 | ||
933 | public byte[] Handle(string path, Stream request, | 902 | protected override byte[] ProcessRequest(string path, Stream request, |
934 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 903 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
935 | { | 904 | { |
936 | return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest)); | 905 | return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest)); |
937 | } | 906 | } |
938 | 907 | ||
939 | public string ContentType | 908 | public override string ContentType |
940 | { | 909 | { |
941 | get { return "text/plain"; } | 910 | get { return "text/plain"; } |
942 | } | 911 | } |
943 | |||
944 | public string HttpMethod | ||
945 | { | ||
946 | get { return "GET"; } | ||
947 | } | ||
948 | |||
949 | public string Path | ||
950 | { | ||
951 | // This is for the OpenSimulator instance and is the user provided URI | ||
952 | get { return "/" + osUXStatsURI; } | ||
953 | } | ||
954 | } | 912 | } |
955 | 913 | ||
956 | #endregion | 914 | #endregion |
@@ -958,7 +916,7 @@ namespace OpenSim | |||
958 | /// <summary> | 916 | /// <summary> |
959 | /// Performs any last-minute sanity checking and shuts down the region server | 917 | /// Performs any last-minute sanity checking and shuts down the region server |
960 | /// </summary> | 918 | /// </summary> |
961 | public override void ShutdownSpecific() | 919 | protected override void ShutdownSpecific() |
962 | { | 920 | { |
963 | if (proxyUrl.Length > 0) | 921 | if (proxyUrl.Length > 0) |
964 | { | 922 | { |
@@ -978,6 +936,8 @@ namespace OpenSim | |||
978 | { | 936 | { |
979 | m_log.Error("[SHUTDOWN]: Ignoring failure during shutdown - ", e); | 937 | m_log.Error("[SHUTDOWN]: Ignoring failure during shutdown - ", e); |
980 | } | 938 | } |
939 | |||
940 | base.ShutdownSpecific(); | ||
981 | } | 941 | } |
982 | 942 | ||
983 | /// <summary> | 943 | /// <summary> |