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.cs297
1 files changed, 182 insertions, 115 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index a7e7d03..85049c9 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,41 +235,35 @@ 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",
241 ChangeSelectedRegion);
244 242
245 m_console.Commands.AddCommand("Archiving", false, "save xml", 243 m_console.Commands.AddCommand("Archiving", false, "save xml",
246 "save xml", 244 "save xml",
247 "Save a region's data in XML format", SaveXml); 245 "Save a region's data in XML format",
246 SaveXml);
248 247
249 m_console.Commands.AddCommand("Archiving", false, "save xml2", 248 m_console.Commands.AddCommand("Archiving", false, "save xml2",
250 "save xml2", 249 "save xml2",
251 "Save a region's data in XML2 format", SaveXml2); 250 "Save a region's data in XML2 format",
251 SaveXml2);
252 252
253 m_console.Commands.AddCommand("Archiving", false, "load xml", 253 m_console.Commands.AddCommand("Archiving", false, "load xml",
254 "load xml [-newIDs [<x> <y> <z>]]", 254 "load xml [-newIDs [<x> <y> <z>]]",
255 "Load a region's data from XML format", LoadXml); 255 "Load a region's data from XML format",
256 LoadXml);
256 257
257 m_console.Commands.AddCommand("Archiving", false, "load xml2", 258 m_console.Commands.AddCommand("Archiving", false, "load xml2",
258 "load xml2", 259 "load xml2",
259 "Load a region's data from XML2 format", LoadXml2); 260 "Load a region's data from XML2 format",
261 LoadXml2);
260 262
261 m_console.Commands.AddCommand("Archiving", false, "save prims xml2", 263 m_console.Commands.AddCommand("Archiving", false, "save prims xml2",
262 "save prims xml2 [<prim name> <file name>]", 264 "save prims xml2 [<prim name> <file name>]",
263 "Save named prim to XML2", SavePrimsXml2); 265 "Save named prim to XML2",
266 SavePrimsXml2);
264 267
265 m_console.Commands.AddCommand("Archiving", false, "load oar", 268 m_console.Commands.AddCommand("Archiving", false, "load oar",
266 "load oar [--merge] [--skip-assets] [<OAR path>]", 269 "load oar [--merge] [--skip-assets] [<OAR path>]",
@@ -290,7 +293,23 @@ namespace OpenSim
290 293
291 m_console.Commands.AddCommand("Objects", false, "edit scale", 294 m_console.Commands.AddCommand("Objects", false, "edit scale",
292 "edit scale <name> <x> <y> <z>", 295 "edit scale <name> <x> <y> <z>",
293 "Change the scale of a named prim", HandleEditScale); 296 "Change the scale of a named prim",
297 HandleEditScale);
298
299 m_console.Commands.AddCommand("Objects", false, "rotate scene",
300 "rotate scene <degrees> [centerX, centerY]",
301 "Rotates all scene objects around centerX, centerY (defailt 128, 128) (please back up your region before using)",
302 HandleRotateScene);
303
304 m_console.Commands.AddCommand("Objects", false, "scale scene",
305 "scale scene <factor>",
306 "Scales the scene objects (please back up your region before using)",
307 HandleScaleScene);
308
309 m_console.Commands.AddCommand("Objects", false, "translate scene",
310 "translate scene xOffset yOffset zOffset",
311 "translates the scene objects (please back up your region before using)",
312 HandleTranslateScene);
294 313
295 m_console.Commands.AddCommand("Users", false, "kick user", 314 m_console.Commands.AddCommand("Users", false, "kick user",
296 "kick user <first> <last> [--force] [message]", 315 "kick user <first> <last> [--force] [message]",
@@ -308,31 +327,38 @@ namespace OpenSim
308 327
309 m_console.Commands.AddCommand("Comms", false, "show connections", 328 m_console.Commands.AddCommand("Comms", false, "show connections",
310 "show connections", 329 "show connections",
311 "Show connection data", HandleShow); 330 "Show connection data",
331 HandleShow);
312 332
313 m_console.Commands.AddCommand("Comms", false, "show circuits", 333 m_console.Commands.AddCommand("Comms", false, "show circuits",
314 "show circuits", 334 "show circuits",
315 "Show agent circuit data", HandleShow); 335 "Show agent circuit data",
336 HandleShow);
316 337
317 m_console.Commands.AddCommand("Comms", false, "show pending-objects", 338 m_console.Commands.AddCommand("Comms", false, "show pending-objects",
318 "show pending-objects", 339 "show pending-objects",
319 "Show # of objects on the pending queues of all scene viewers", HandleShow); 340 "Show # of objects on the pending queues of all scene viewers",
341 HandleShow);
320 342
321 m_console.Commands.AddCommand("General", false, "show modules", 343 m_console.Commands.AddCommand("General", false, "show modules",
322 "show modules", 344 "show modules",
323 "Show module data", HandleShow); 345 "Show module data",
346 HandleShow);
324 347
325 m_console.Commands.AddCommand("Regions", false, "show regions", 348 m_console.Commands.AddCommand("Regions", false, "show regions",
326 "show regions", 349 "show regions",
327 "Show region data", HandleShow); 350 "Show region data",
351 HandleShow);
328 352
329 m_console.Commands.AddCommand("Regions", false, "show ratings", 353 m_console.Commands.AddCommand("Regions", false, "show ratings",
330 "show ratings", 354 "show ratings",
331 "Show rating data", HandleShow); 355 "Show rating data",
356 HandleShow);
332 357
333 m_console.Commands.AddCommand("Objects", false, "backup", 358 m_console.Commands.AddCommand("Objects", false, "backup",
334 "backup", 359 "backup",
335 "Persist currently unsaved object changes immediately instead of waiting for the normal persistence call.", RunCommand); 360 "Persist currently unsaved object changes immediately instead of waiting for the normal persistence call.",
361 RunCommand);
336 362
337 m_console.Commands.AddCommand("Regions", false, "create region", 363 m_console.Commands.AddCommand("Regions", false, "create region",
338 "create region [\"region name\"] <region_file.ini>", 364 "create region [\"region name\"] <region_file.ini>",
@@ -345,34 +371,26 @@ namespace OpenSim
345 371
346 m_console.Commands.AddCommand("Regions", false, "restart", 372 m_console.Commands.AddCommand("Regions", false, "restart",
347 "restart", 373 "restart",
348 "Restart all sims in this instance", RunCommand); 374 "Restart all sims in this instance",
375 RunCommand);
349 376
350 m_console.Commands.AddCommand("General", false, "command-script", 377 m_console.Commands.AddCommand("General", false, "command-script",
351 "command-script <script>", 378 "command-script <script>",
352 "Run a command script from file", RunCommand); 379 "Run a command script from file",
380 RunCommand);
353 381
354 m_console.Commands.AddCommand("Regions", false, "remove-region", 382 m_console.Commands.AddCommand("Regions", false, "remove-region",
355 "remove-region <name>", 383 "remove-region <name>",
356 "Remove a region from this simulator", RunCommand); 384 "Remove a region from this simulator",
385 RunCommand);
357 386
358 m_console.Commands.AddCommand("Regions", false, "delete-region", 387 m_console.Commands.AddCommand("Regions", false, "delete-region",
359 "delete-region <name>", 388 "delete-region <name>",
360 "Delete a region from disk", RunCommand); 389 "Delete a region from disk",
361 390 RunCommand);
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 } 391 }
374 392
375 public override void ShutdownSpecific() 393 protected override void ShutdownSpecific()
376 { 394 {
377 if (m_shutdownCommandsFile != String.Empty) 395 if (m_shutdownCommandsFile != String.Empty)
378 { 396 {
@@ -435,8 +453,8 @@ namespace OpenSim
435 { 453 {
436 RegionInfo regionInfo = presence.Scene.RegionInfo; 454 RegionInfo regionInfo = presence.Scene.RegionInfo;
437 455
438 if (presence.Firstname.ToLower().Contains(mainParams[2].ToLower()) && 456 if (presence.Firstname.ToLower().Equals(mainParams[2].ToLower()) &&
439 presence.Lastname.ToLower().Contains(mainParams[3].ToLower())) 457 presence.Lastname.ToLower().Equals(mainParams[3].ToLower()))
440 { 458 {
441 MainConsole.Instance.Output( 459 MainConsole.Instance.Output(
442 String.Format( 460 String.Format(
@@ -449,7 +467,8 @@ namespace OpenSim
449 else 467 else
450 presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n"); 468 presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n");
451 469
452 presence.Scene.IncomingCloseAgent(presence.UUID, force); 470 presence.Scene.CloseAgent(presence.UUID, force);
471 break;
453 } 472 }
454 } 473 }
455 474
@@ -501,6 +520,121 @@ namespace OpenSim
501 } 520 }
502 } 521 }
503 522
523 private void HandleRotateScene(string module, string[] args)
524 {
525 string usage = "Usage: rotate scene <angle in degrees> [centerX centerY] (centerX and centerY are optional and default to Constants.RegionSize / 2";
526
527 float centerX = Constants.RegionSize * 0.5f;
528 float centerY = Constants.RegionSize * 0.5f;
529
530 if (args.Length < 3 || args.Length == 4)
531 {
532 MainConsole.Instance.Output(usage);
533 return;
534 }
535
536 float angle = (float)(Convert.ToSingle(args[2]) / 180.0 * Math.PI);
537 OpenMetaverse.Quaternion rot = OpenMetaverse.Quaternion.CreateFromAxisAngle(0, 0, 1, angle);
538
539 if (args.Length > 4)
540 {
541 centerX = Convert.ToSingle(args[3]);
542 centerY = Convert.ToSingle(args[4]);
543 }
544
545 Vector3 center = new Vector3(centerX, centerY, 0.0f);
546
547 SceneManager.ForEachSelectedScene(delegate(Scene scene)
548 {
549 scene.ForEachSOG(delegate(SceneObjectGroup sog)
550 {
551 if (sog.AttachmentPoint == 0)
552 {
553 sog.RootPart.UpdateRotation(rot * sog.GroupRotation);
554 Vector3 offset = sog.AbsolutePosition - center;
555 offset *= rot;
556 sog.UpdateGroupPosition(center + offset);
557 }
558 });
559 });
560 }
561
562 private void HandleScaleScene(string module, string[] args)
563 {
564 string usage = "Usage: scale scene <factor>";
565
566 if (args.Length < 3)
567 {
568 MainConsole.Instance.Output(usage);
569 return;
570 }
571
572 float factor = (float)(Convert.ToSingle(args[2]));
573
574 float minZ = float.MaxValue;
575
576 SceneManager.ForEachSelectedScene(delegate(Scene scene)
577 {
578 scene.ForEachSOG(delegate(SceneObjectGroup sog)
579 {
580 if (sog.AttachmentPoint == 0)
581 {
582 if (sog.RootPart.AbsolutePosition.Z < minZ)
583 minZ = sog.RootPart.AbsolutePosition.Z;
584 }
585 });
586 });
587
588 SceneManager.ForEachSelectedScene(delegate(Scene scene)
589 {
590 scene.ForEachSOG(delegate(SceneObjectGroup sog)
591 {
592 if (sog.AttachmentPoint == 0)
593 {
594 Vector3 tmpRootPos = sog.RootPart.AbsolutePosition;
595 tmpRootPos.Z -= minZ;
596 tmpRootPos *= factor;
597 tmpRootPos.Z += minZ;
598
599 foreach (SceneObjectPart sop in sog.Parts)
600 {
601 if (sop.ParentID != 0)
602 sop.OffsetPosition *= factor;
603 sop.Scale *= factor;
604 }
605
606 sog.UpdateGroupPosition(tmpRootPos);
607 }
608 });
609 });
610 }
611
612 private void HandleTranslateScene(string module, string[] args)
613 {
614 string usage = "Usage: translate scene <xOffset, yOffset, zOffset>";
615
616 if (args.Length < 5)
617 {
618 MainConsole.Instance.Output(usage);
619 return;
620 }
621
622 float xOFfset = (float)Convert.ToSingle(args[2]);
623 float yOffset = (float)Convert.ToSingle(args[3]);
624 float zOffset = (float)Convert.ToSingle(args[4]);
625
626 Vector3 offset = new Vector3(xOFfset, yOffset, zOffset);
627
628 SceneManager.ForEachSelectedScene(delegate(Scene scene)
629 {
630 scene.ForEachSOG(delegate(SceneObjectGroup sog)
631 {
632 if (sog.AttachmentPoint == 0)
633 sog.UpdateGroupPosition(sog.AbsolutePosition + offset);
634 });
635 });
636 }
637
504 /// <summary> 638 /// <summary>
505 /// Creates a new region based on the parameters specified. This will ask the user questions on the console 639 /// Creates a new region based on the parameters specified. This will ask the user questions on the console
506 /// </summary> 640 /// </summary>
@@ -566,34 +700,6 @@ namespace OpenSim
566 } 700 }
567 701
568 /// <summary> 702 /// <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 703 /// Runs commands issued by the server console from the operator
598 /// </summary> 704 /// </summary>
599 /// <param name="command">The first argument of the parameter (the command)</param> 705 /// <param name="command">The first argument of the parameter (the command)</param>
@@ -701,45 +807,6 @@ namespace OpenSim
701 RefreshPrompt(); 807 RefreshPrompt();
702 } 808 }
703 809
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 810 // see BaseOpenSimServer
744 /// <summary> 811 /// <summary>
745 /// Many commands list objects for debugging. Some of the types are listed here 812 /// Many commands list objects for debugging. Some of the types are listed here
@@ -829,7 +896,7 @@ namespace OpenSim
829 foreach (IRegionModuleBase module in sharedModules.OrderBy(m => m.Name)) 896 foreach (IRegionModuleBase module in sharedModules.OrderBy(m => m.Name))
830 MainConsole.Instance.OutputFormat("New Region Module (Shared): {0}", module.Name); 897 MainConsole.Instance.OutputFormat("New Region Module (Shared): {0}", module.Name);
831 898
832 foreach (IRegionModuleBase module in sharedModules.OrderBy(m => m.Name)) 899 foreach (IRegionModuleBase module in nonSharedModules.OrderBy(m => m.Name))
833 MainConsole.Instance.OutputFormat("New Region Module (Non-Shared): {0}", module.Name); 900 MainConsole.Instance.OutputFormat("New Region Module (Non-Shared): {0}", module.Name);
834 } 901 }
835 ); 902 );