diff options
Diffstat (limited to '')
88 files changed, 1401 insertions, 1559 deletions
diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs index b860cf6..d120f03 100644 --- a/OpenSim/Region/Application/Application.cs +++ b/OpenSim/Region/Application/Application.cs | |||
@@ -225,7 +225,7 @@ namespace OpenSim | |||
225 | } | 225 | } |
226 | } | 226 | } |
227 | MainConsole.Instance = null; | 227 | MainConsole.Instance = null; |
228 | } | 228 | } |
229 | */ | 229 | */ |
230 | configSource.Alias.AddAlias("On", true); | 230 | configSource.Alias.AddAlias("On", true); |
231 | configSource.Alias.AddAlias("Off", false); | 231 | configSource.Alias.AddAlias("Off", false); |
diff --git a/OpenSim/Region/Application/ConfigurationLoader.cs b/OpenSim/Region/Application/ConfigurationLoader.cs index e69e3fc..e2e0640 100644 --- a/OpenSim/Region/Application/ConfigurationLoader.cs +++ b/OpenSim/Region/Application/ConfigurationLoader.cs | |||
@@ -345,10 +345,6 @@ namespace OpenSim | |||
345 | 345 | ||
346 | m_configSettings.StorageDll = startupConfig.GetString("storage_plugin"); | 346 | m_configSettings.StorageDll = startupConfig.GetString("storage_plugin"); |
347 | 347 | ||
348 | m_configSettings.StorageConnectionString | ||
349 | = startupConfig.GetString("storage_connection_string"); | ||
350 | m_configSettings.EstateConnectionString | ||
351 | = startupConfig.GetString("estate_connection_string", m_configSettings.StorageConnectionString); | ||
352 | m_configSettings.ClientstackDll | 348 | m_configSettings.ClientstackDll |
353 | = startupConfig.GetString("clientstack_plugin", "OpenSim.Region.ClientStack.LindenUDP.dll"); | 349 | = startupConfig.GetString("clientstack_plugin", "OpenSim.Region.ClientStack.LindenUDP.dll"); |
354 | } | 350 | } |
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 945da7d..6094bad 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -152,7 +152,7 @@ namespace OpenSim | |||
152 | RegisterConsoleCommands(); | 152 | RegisterConsoleCommands(); |
153 | 153 | ||
154 | base.StartupSpecific(); | 154 | base.StartupSpecific(); |
155 | 155 | ||
156 | MainServer.Instance.AddStreamHandler(new OpenSim.SimStatusHandler()); | 156 | MainServer.Instance.AddStreamHandler(new OpenSim.SimStatusHandler()); |
157 | MainServer.Instance.AddStreamHandler(new OpenSim.XSimStatusHandler(this)); | 157 | MainServer.Instance.AddStreamHandler(new OpenSim.XSimStatusHandler(this)); |
158 | if (userStatsURI != String.Empty) | 158 | if (userStatsURI != String.Empty) |
@@ -192,7 +192,7 @@ namespace OpenSim | |||
192 | // Hook up to the watchdog timer | 192 | // Hook up to the watchdog timer |
193 | Watchdog.OnWatchdogTimeout += WatchdogTimeoutHandler; | 193 | Watchdog.OnWatchdogTimeout += WatchdogTimeoutHandler; |
194 | 194 | ||
195 | PrintFileToConsole("startuplogo.txt"); | 195 | PrintFileToConsole("startuplogo.txt"); |
196 | 196 | ||
197 | // For now, start at the 'root' level by default | 197 | // For now, start at the 'root' level by default |
198 | if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it | 198 | if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it |
@@ -218,8 +218,8 @@ namespace OpenSim | |||
218 | 218 | ||
219 | m_console.Commands.AddCommand("region", false, "debug packet", | 219 | m_console.Commands.AddCommand("region", false, "debug packet", |
220 | "debug packet <level>", | 220 | "debug packet <level>", |
221 | "Turn on packet debugging", | 221 | "Turn on packet debugging", |
222 | "If level > 255 then all incoming and outgoing packets are logged.\n" | 222 | "If level > 255 then all incoming and outgoing packets are logged.\n" |
223 | + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n" | 223 | + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n" |
224 | + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n" | 224 | + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n" |
225 | + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n" | 225 | + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n" |
@@ -316,7 +316,7 @@ namespace OpenSim | |||
316 | m_console.Commands.AddCommand("region", false, "create region", | 316 | m_console.Commands.AddCommand("region", false, "create region", |
317 | "create region [\"region name\"] <region_file.ini>", | 317 | "create region [\"region name\"] <region_file.ini>", |
318 | "Create a new region.", | 318 | "Create a new region.", |
319 | "The settings for \"region name\" are read from <region_file.ini>." | 319 | "The settings for \"region name\" are read from <region_file.ini> in your Regions directory." |
320 | + " If \"region name\" does not exist in <region_file.ini>, it will be added." + Environment.NewLine | 320 | + " If \"region name\" does not exist in <region_file.ini>, it will be added." + Environment.NewLine |
321 | + "Without \"region name\", the first region found in <region_file.ini> will be created." + Environment.NewLine | 321 | + "Without \"region name\", the first region found in <region_file.ini> will be created." + Environment.NewLine |
322 | + "If <region_file.ini> does not exist, it will be created.", | 322 | + "If <region_file.ini> does not exist, it will be created.", |
@@ -552,19 +552,20 @@ namespace OpenSim | |||
552 | regionFile = Path.Combine(regionsDir, regionFile); | 552 | regionFile = Path.Combine(regionsDir, regionFile); |
553 | } | 553 | } |
554 | 554 | ||
555 | RegionInfo regInfo; | 555 | RegionInfo regInfo; |
556 | if (isXml) | 556 | if (isXml) |
557 | { | 557 | { |
558 | regInfo = new RegionInfo(regionName, regionFile, false, ConfigSource.Source); | 558 | regInfo = new RegionInfo(regionName, regionFile, false, ConfigSource.Source); |
559 | } | 559 | } |
560 | else | 560 | else |
561 | { | 561 | { |
562 | regInfo = new RegionInfo(regionName, regionFile, false, ConfigSource.Source, regionName); | 562 | regInfo = new RegionInfo(regionName, regionFile, false, ConfigSource.Source, regionName); |
563 | } | 563 | } |
564 | |||
564 | IScene scene; | 565 | IScene scene; |
565 | PopulateRegionEstateInfo(regInfo); | 566 | PopulateRegionEstateInfo(regInfo); |
566 | CreateRegion(regInfo, true, out scene); | 567 | CreateRegion(regInfo, true, out scene); |
567 | regInfo.EstateSettings.Save(); | 568 | regInfo.EstateSettings.Save(); |
568 | } | 569 | } |
569 | 570 | ||
570 | /// <summary> | 571 | /// <summary> |
@@ -942,7 +943,7 @@ namespace OpenSim | |||
942 | delegate(Scene scene) | 943 | delegate(Scene scene) |
943 | { | 944 | { |
944 | MainConsole.Instance.Output(String.Format( | 945 | MainConsole.Instance.Output(String.Format( |
945 | "Region Name: {0}, Region XLoc: {1}, Region YLoc: {2}, Region Port: {3}", | 946 | "Region Name: {0}, Region XLoc: {1}, Region YLoc: {2}, Region Port: {3}", |
946 | scene.RegionInfo.RegionName, | 947 | scene.RegionInfo.RegionName, |
947 | scene.RegionInfo.RegionLocX, | 948 | scene.RegionInfo.RegionLocX, |
948 | scene.RegionInfo.RegionLocY, | 949 | scene.RegionInfo.RegionLocY, |
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index ec3193c..c5ee385 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -45,6 +45,7 @@ using OpenSim.Region.Framework; | |||
45 | using OpenSim.Region.Framework.Interfaces; | 45 | using OpenSim.Region.Framework.Interfaces; |
46 | using OpenSim.Region.Framework.Scenes; | 46 | using OpenSim.Region.Framework.Scenes; |
47 | using OpenSim.Region.Physics.Manager; | 47 | using OpenSim.Region.Physics.Manager; |
48 | using OpenSim.Server.Base; | ||
48 | 49 | ||
49 | namespace OpenSim | 50 | namespace OpenSim |
50 | { | 51 | { |
@@ -195,6 +196,24 @@ namespace OpenSim | |||
195 | m_permsModules = new List<string>(permissionModules.Split(',')); | 196 | m_permsModules = new List<string>(permissionModules.Split(',')); |
196 | } | 197 | } |
197 | 198 | ||
199 | // Load the simulation data service | ||
200 | IConfig simDataConfig = m_config.Source.Configs["SimulationDataStore"]; | ||
201 | if (simDataConfig == null) | ||
202 | throw new Exception("Configuration file is missing the [SimulationDataStore] section"); | ||
203 | string module = simDataConfig.GetString("LocalServiceModule", String.Empty); | ||
204 | if (String.IsNullOrEmpty(module)) | ||
205 | throw new Exception("Configuration file is missing the LocalServiceModule parameter in the [SimulationDataStore] section"); | ||
206 | m_simulationDataService = ServerUtils.LoadPlugin<ISimulationDataService>(module, new object[] { m_config.Source }); | ||
207 | |||
208 | // Load the estate data service | ||
209 | IConfig estateDataConfig = m_config.Source.Configs["EstateDataStore"]; | ||
210 | if (estateDataConfig == null) | ||
211 | throw new Exception("Configuration file is missing the [EstateDataStore] section"); | ||
212 | module = estateDataConfig.GetString("LocalServiceModule", String.Empty); | ||
213 | if (String.IsNullOrEmpty(module)) | ||
214 | throw new Exception("Configuration file is missing the LocalServiceModule parameter in the [EstateDataStore] section"); | ||
215 | m_estateDataService = ServerUtils.LoadPlugin<IEstateDataService>(module, new object[] { m_config.Source }); | ||
216 | |||
198 | base.StartupSpecific(); | 217 | base.StartupSpecific(); |
199 | 218 | ||
200 | m_stats = StatsManager.StartCollectingSimExtraStats(); | 219 | m_stats = StatsManager.StartCollectingSimExtraStats(); |
@@ -612,7 +631,7 @@ namespace OpenSim | |||
612 | 631 | ||
613 | regionInfo.InternalEndPoint.Port = (int) port; | 632 | regionInfo.InternalEndPoint.Port = (int) port; |
614 | 633 | ||
615 | Scene scene = CreateScene(regionInfo, m_storageManager, circuitManager); | 634 | Scene scene = CreateScene(regionInfo, m_simulationDataService, m_estateDataService, circuitManager); |
616 | 635 | ||
617 | if (m_autoCreateClientStack) | 636 | if (m_autoCreateClientStack) |
618 | { | 637 | { |
@@ -628,30 +647,19 @@ namespace OpenSim | |||
628 | return scene; | 647 | return scene; |
629 | } | 648 | } |
630 | 649 | ||
631 | protected override StorageManager CreateStorageManager() | ||
632 | { | ||
633 | return | ||
634 | CreateStorageManager(m_configSettings.StorageConnectionString, m_configSettings.EstateConnectionString); | ||
635 | } | ||
636 | |||
637 | protected StorageManager CreateStorageManager(string connectionstring, string estateconnectionstring) | ||
638 | { | ||
639 | return new StorageManager(m_configSettings.StorageDll, connectionstring, estateconnectionstring); | ||
640 | } | ||
641 | |||
642 | protected override ClientStackManager CreateClientStackManager() | 650 | protected override ClientStackManager CreateClientStackManager() |
643 | { | 651 | { |
644 | return new ClientStackManager(m_configSettings.ClientstackDll); | 652 | return new ClientStackManager(m_configSettings.ClientstackDll); |
645 | } | 653 | } |
646 | 654 | ||
647 | protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, | 655 | protected override Scene CreateScene(RegionInfo regionInfo, ISimulationDataService simDataService, |
648 | AgentCircuitManager circuitManager) | 656 | IEstateDataService estateDataService, AgentCircuitManager circuitManager) |
649 | { | 657 | { |
650 | SceneCommunicationService sceneGridService = new SceneCommunicationService(); | 658 | SceneCommunicationService sceneGridService = new SceneCommunicationService(); |
651 | 659 | ||
652 | return new Scene( | 660 | return new Scene( |
653 | regionInfo, circuitManager, sceneGridService, | 661 | regionInfo, circuitManager, sceneGridService, |
654 | storageManager, m_moduleLoader, false, m_configSettings.PhysicalPrim, | 662 | simDataService, estateDataService, m_moduleLoader, false, m_configSettings.PhysicalPrim, |
655 | m_configSettings.See_into_region_from_neighbor, m_config.Source, m_version); | 663 | m_configSettings.See_into_region_from_neighbor, m_config.Source, m_version); |
656 | } | 664 | } |
657 | 665 | ||
@@ -868,21 +876,23 @@ namespace OpenSim | |||
868 | /// </param> | 876 | /// </param> |
869 | public void PopulateRegionEstateInfo(RegionInfo regInfo) | 877 | public void PopulateRegionEstateInfo(RegionInfo regInfo) |
870 | { | 878 | { |
871 | if (m_storageManager.EstateDataStore != null) | 879 | IEstateDataService estateDataService = EstateDataService; |
880 | |||
881 | if (estateDataService != null) | ||
872 | { | 882 | { |
873 | regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(regInfo.RegionID, false); | 883 | regInfo.EstateSettings = estateDataService.LoadEstateSettings(regInfo.RegionID, false); |
874 | } | 884 | } |
875 | 885 | ||
876 | if (regInfo.EstateSettings.EstateID == 0) // No record at all | 886 | if (regInfo.EstateSettings.EstateID == 0) // No record at all |
877 | { | 887 | { |
878 | MainConsole.Instance.Output("Your region is not part of an estate."); | 888 | MainConsole.Instance.Output("Your region is not part of an estate."); |
879 | while (true) | 889 | while (true) |
880 | { | 890 | { |
881 | string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate?", "no", new List<string>() {"yes", "no"}); | 891 | string response = MainConsole.Instance.CmdPrompt("Do you wish to join an existing estate?", "no", new List<string>() { "yes", "no" }); |
882 | if (response == "no") | 892 | if (response == "no") |
883 | { | 893 | { |
884 | // Create a new estate | 894 | // Create a new estate |
885 | regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(regInfo.RegionID, true); | 895 | regInfo.EstateSettings = estateDataService.LoadEstateSettings(regInfo.RegionID, true); |
886 | 896 | ||
887 | regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName); | 897 | regInfo.EstateSettings.EstateName = MainConsole.Instance.CmdPrompt("New estate name", regInfo.EstateSettings.EstateName); |
888 | //regInfo.EstateSettings.Save(); | 898 | //regInfo.EstateSettings.Save(); |
@@ -894,7 +904,7 @@ namespace OpenSim | |||
894 | if (response == "None") | 904 | if (response == "None") |
895 | continue; | 905 | continue; |
896 | 906 | ||
897 | List<int> estateIDs = m_storageManager.EstateDataStore.GetEstates(response); | 907 | List<int> estateIDs = estateDataService.GetEstates(response); |
898 | if (estateIDs.Count < 1) | 908 | if (estateIDs.Count < 1) |
899 | { | 909 | { |
900 | MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again"); | 910 | MainConsole.Instance.Output("The name you have entered matches no known estate. Please try again"); |
@@ -903,9 +913,9 @@ namespace OpenSim | |||
903 | 913 | ||
904 | int estateID = estateIDs[0]; | 914 | int estateID = estateIDs[0]; |
905 | 915 | ||
906 | regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(estateID); | 916 | regInfo.EstateSettings = estateDataService.LoadEstateSettings(estateID); |
907 | 917 | ||
908 | if (m_storageManager.EstateDataStore.LinkRegion(regInfo.RegionID, estateID)) | 918 | if (estateDataService.LinkRegion(regInfo.RegionID, estateID)) |
909 | break; | 919 | break; |
910 | 920 | ||
911 | MainConsole.Instance.Output("Joining the estate failed. Please try again."); | 921 | MainConsole.Instance.Output("Joining the estate failed. Please try again."); |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 8a96389..0e17496 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -63,7 +63,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
63 | /// Debug packet level. See OpenSim.RegisterConsoleCommands() for more details. | 63 | /// Debug packet level. See OpenSim.RegisterConsoleCommands() for more details. |
64 | /// </value> | 64 | /// </value> |
65 | protected int m_debugPacketLevel = 0; | 65 | protected int m_debugPacketLevel = 0; |
66 | 66 | ||
67 | #region Events | 67 | #region Events |
68 | 68 | ||
69 | public event GenericMessage OnGenericMessage; | 69 | public event GenericMessage OnGenericMessage; |
@@ -288,7 +288,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
288 | public event MuteListEntryRemove OnRemoveMuteListEntry; | 288 | public event MuteListEntryRemove OnRemoveMuteListEntry; |
289 | public event GodlikeMessage onGodlikeMessage; | 289 | public event GodlikeMessage onGodlikeMessage; |
290 | public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate; | 290 | public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdate; |
291 | |||
292 | 291 | ||
293 | #endregion Events | 292 | #endregion Events |
294 | 293 | ||
@@ -330,12 +329,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
330 | /// ownerless phantom. | 329 | /// ownerless phantom. |
331 | /// | 330 | /// |
332 | /// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock | 331 | /// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock |
333 | /// | 332 | /// |
334 | /// </value> | 333 | /// </value> |
335 | protected HashSet<uint> m_killRecord; | 334 | protected HashSet<uint> m_killRecord; |
336 | 335 | ||
337 | // protected HashSet<uint> m_attachmentsSent; | 336 | // protected HashSet<uint> m_attachmentsSent; |
338 | 337 | ||
339 | private int m_moneyBalance; | 338 | private int m_moneyBalance; |
340 | private bool m_deliverPackets = true; | 339 | private bool m_deliverPackets = true; |
341 | private int m_animationSequenceNumber = 1; | 340 | private int m_animationSequenceNumber = 1; |
@@ -395,22 +394,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
395 | public string ActiveGroupName { get { return m_activeGroupName; } } | 394 | public string ActiveGroupName { get { return m_activeGroupName; } } |
396 | public ulong ActiveGroupPowers { get { return m_activeGroupPowers; } } | 395 | public ulong ActiveGroupPowers { get { return m_activeGroupPowers; } } |
397 | public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); } | 396 | public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); } |
398 | 397 | ||
399 | /// <summary> | 398 | /// <summary> |
400 | /// First name of the agent/avatar represented by the client | 399 | /// First name of the agent/avatar represented by the client |
401 | /// </summary> | 400 | /// </summary> |
402 | public string FirstName { get { return m_firstName; } } | 401 | public string FirstName { get { return m_firstName; } } |
403 | 402 | ||
404 | /// <summary> | 403 | /// <summary> |
405 | /// Last name of the agent/avatar represented by the client | 404 | /// Last name of the agent/avatar represented by the client |
406 | /// </summary> | 405 | /// </summary> |
407 | public string LastName { get { return m_lastName; } } | 406 | public string LastName { get { return m_lastName; } } |
408 | 407 | ||
409 | /// <summary> | 408 | /// <summary> |
410 | /// Full name of the client (first name and last name) | 409 | /// Full name of the client (first name and last name) |
411 | /// </summary> | 410 | /// </summary> |
412 | public string Name { get { return FirstName + " " + LastName; } } | 411 | public string Name { get { return FirstName + " " + LastName; } } |
413 | 412 | ||
414 | public uint CircuitCode { get { return m_circuitCode; } } | 413 | public uint CircuitCode { get { return m_circuitCode; } } |
415 | public int MoneyBalance { get { return m_moneyBalance; } } | 414 | public int MoneyBalance { get { return m_moneyBalance; } } |
416 | public int NextAnimationSequenceNumber { get { return m_animationSequenceNumber++; } } | 415 | public int NextAnimationSequenceNumber { get { return m_animationSequenceNumber++; } } |
@@ -453,7 +452,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
453 | m_entityUpdates = new PriorityQueue(m_scene.Entities.Count); | 452 | m_entityUpdates = new PriorityQueue(m_scene.Entities.Count); |
454 | m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>(); | 453 | m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>(); |
455 | m_killRecord = new HashSet<uint>(); | 454 | m_killRecord = new HashSet<uint>(); |
456 | // m_attachmentsSent = new HashSet<uint>(); | 455 | // m_attachmentsSent = new HashSet<uint>(); |
457 | 456 | ||
458 | m_assetService = m_scene.RequestModuleInterface<IAssetService>(); | 457 | m_assetService = m_scene.RequestModuleInterface<IAssetService>(); |
459 | m_GroupsModule = scene.RequestModuleInterface<IGroupsModule>(); | 458 | m_GroupsModule = scene.RequestModuleInterface<IGroupsModule>(); |
@@ -679,7 +678,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
679 | // Make sure that we see any exception caused by the asynchronous operation. | 678 | // Make sure that we see any exception caused by the asynchronous operation. |
680 | m_log.Error( | 679 | m_log.Error( |
681 | string.Format("[LLCLIENTVIEW]: Caught exception while processing {0}", packetObject.Pack), e); | 680 | string.Format("[LLCLIENTVIEW]: Caught exception while processing {0}", packetObject.Pack), e); |
682 | } | 681 | } |
683 | } | 682 | } |
684 | 683 | ||
685 | #endregion Packet Handling | 684 | #endregion Packet Handling |
@@ -890,7 +889,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
890 | foreach (GroupActiveProposals Proposal in Proposals) | 889 | foreach (GroupActiveProposals Proposal in Proposals) |
891 | { | 890 | { |
892 | GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); | 891 | GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); |
893 | 892 | ||
894 | GAPIRP.AgentData.AgentID = AgentId; | 893 | GAPIRP.AgentData.AgentID = AgentId; |
895 | GAPIRP.AgentData.GroupID = groupID; | 894 | GAPIRP.AgentData.GroupID = groupID; |
896 | GAPIRP.TransactionData.TransactionID = transactionID; | 895 | GAPIRP.TransactionData.TransactionID = transactionID; |
@@ -914,7 +913,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
914 | if (Proposals.Length == 0) | 913 | if (Proposals.Length == 0) |
915 | { | 914 | { |
916 | GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); | 915 | GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); |
917 | 916 | ||
918 | GAPIRP.AgentData.AgentID = AgentId; | 917 | GAPIRP.AgentData.AgentID = AgentId; |
919 | GAPIRP.AgentData.GroupID = groupID; | 918 | GAPIRP.AgentData.GroupID = groupID; |
920 | GAPIRP.TransactionData.TransactionID = transactionID; | 919 | GAPIRP.TransactionData.TransactionID = transactionID; |
@@ -969,7 +968,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
969 | if (Votes.Length == 0) | 968 | if (Votes.Length == 0) |
970 | { | 969 | { |
971 | GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket(); | 970 | GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket(); |
972 | 971 | ||
973 | GVHIRP.AgentData.AgentID = AgentId; | 972 | GVHIRP.AgentData.AgentID = AgentId; |
974 | GVHIRP.AgentData.GroupID = groupID; | 973 | GVHIRP.AgentData.GroupID = groupID; |
975 | GVHIRP.TransactionData.TransactionID = transactionID; | 974 | GVHIRP.TransactionData.TransactionID = transactionID; |
@@ -993,7 +992,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
993 | OutPacket(GVHIRP, ThrottleOutPacketType.Task); | 992 | OutPacket(GVHIRP, ThrottleOutPacketType.Task); |
994 | } | 993 | } |
995 | } | 994 | } |
996 | 995 | ||
997 | public void SendGroupAccountingDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt) | 996 | public void SendGroupAccountingDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt) |
998 | { | 997 | { |
999 | GroupAccountDetailsReplyPacket GADRP = new GroupAccountDetailsReplyPacket(); | 998 | GroupAccountDetailsReplyPacket GADRP = new GroupAccountDetailsReplyPacket(); |
@@ -1012,13 +1011,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1012 | GADRP.HistoryData[0] = History; | 1011 | GADRP.HistoryData[0] = History; |
1013 | OutPacket(GADRP, ThrottleOutPacketType.Task); | 1012 | OutPacket(GADRP, ThrottleOutPacketType.Task); |
1014 | } | 1013 | } |
1015 | 1014 | ||
1016 | public void SendGroupAccountingSummary(IClientAPI sender,UUID groupID, uint moneyAmt, int totalTier, int usedTier) | 1015 | public void SendGroupAccountingSummary(IClientAPI sender,UUID groupID, uint moneyAmt, int totalTier, int usedTier) |
1017 | { | 1016 | { |
1018 | GroupAccountSummaryReplyPacket GASRP = | 1017 | GroupAccountSummaryReplyPacket GASRP = |
1019 | (GroupAccountSummaryReplyPacket)PacketPool.Instance.GetPacket( | 1018 | (GroupAccountSummaryReplyPacket)PacketPool.Instance.GetPacket( |
1020 | PacketType.GroupAccountSummaryReply); | 1019 | PacketType.GroupAccountSummaryReply); |
1021 | 1020 | ||
1022 | GASRP.AgentData = new GroupAccountSummaryReplyPacket.AgentDataBlock(); | 1021 | GASRP.AgentData = new GroupAccountSummaryReplyPacket.AgentDataBlock(); |
1023 | GASRP.AgentData.AgentID = sender.AgentId; | 1022 | GASRP.AgentData.AgentID = sender.AgentId; |
1024 | GASRP.AgentData.GroupID = groupID; | 1023 | GASRP.AgentData.GroupID = groupID; |
@@ -1045,13 +1044,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1045 | GASRP.MoneyData.LightTaxEstimate = 0; | 1044 | GASRP.MoneyData.LightTaxEstimate = 0; |
1046 | OutPacket(GASRP, ThrottleOutPacketType.Task); | 1045 | OutPacket(GASRP, ThrottleOutPacketType.Task); |
1047 | } | 1046 | } |
1048 | 1047 | ||
1049 | public void SendGroupTransactionsSummaryDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt) | 1048 | public void SendGroupTransactionsSummaryDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID, int amt) |
1050 | { | 1049 | { |
1051 | GroupAccountTransactionsReplyPacket GATRP = | 1050 | GroupAccountTransactionsReplyPacket GATRP = |
1052 | (GroupAccountTransactionsReplyPacket)PacketPool.Instance.GetPacket( | 1051 | (GroupAccountTransactionsReplyPacket)PacketPool.Instance.GetPacket( |
1053 | PacketType.GroupAccountTransactionsReply); | 1052 | PacketType.GroupAccountTransactionsReply); |
1054 | 1053 | ||
1055 | GATRP.AgentData = new GroupAccountTransactionsReplyPacket.AgentDataBlock(); | 1054 | GATRP.AgentData = new GroupAccountTransactionsReplyPacket.AgentDataBlock(); |
1056 | GATRP.AgentData.AgentID = sender.AgentId; | 1055 | GATRP.AgentData.AgentID = sender.AgentId; |
1057 | GATRP.AgentData.GroupID = groupID; | 1056 | GATRP.AgentData.GroupID = groupID; |
@@ -1520,7 +1519,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1520 | public void SendKillObject(ulong regionHandle, uint localID) | 1519 | public void SendKillObject(ulong regionHandle, uint localID) |
1521 | { | 1520 | { |
1522 | // m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle); | 1521 | // m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle); |
1523 | 1522 | ||
1524 | KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); | 1523 | KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); |
1525 | // TODO: don't create new blocks if recycling an old packet | 1524 | // TODO: don't create new blocks if recycling an old packet |
1526 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; | 1525 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; |
@@ -3488,9 +3487,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3488 | objupdate.ObjectData[0] = CreateAvatarUpdateBlock(presence); | 3487 | objupdate.ObjectData[0] = CreateAvatarUpdateBlock(presence); |
3489 | 3488 | ||
3490 | OutPacket(objupdate, ThrottleOutPacketType.Task); | 3489 | OutPacket(objupdate, ThrottleOutPacketType.Task); |
3491 | 3490 | ||
3492 | // We need to record the avatar local id since the root prim of an attachment points to this. | 3491 | // We need to record the avatar local id since the root prim of an attachment points to this. |
3493 | // m_attachmentsSent.Add(avatar.LocalId); | 3492 | // m_attachmentsSent.Add(avatar.LocalId); |
3494 | } | 3493 | } |
3495 | 3494 | ||
3496 | public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations) | 3495 | public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations) |
@@ -3538,7 +3537,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3538 | #region Primitive Packet/Data Sending Methods | 3537 | #region Primitive Packet/Data Sending Methods |
3539 | 3538 | ||
3540 | /// <summary> | 3539 | /// <summary> |
3541 | /// Generate one of the object update packets based on PrimUpdateFlags | 3540 | /// Generate one of the object update packets based on PrimUpdateFlags |
3542 | /// and broadcast the packet to clients | 3541 | /// and broadcast the packet to clients |
3543 | /// </summary> | 3542 | /// </summary> |
3544 | public void SendPrimUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) | 3543 | public void SendPrimUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) |
@@ -3555,14 +3554,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3555 | double priority = m_prioritizer.GetUpdatePriority(this, entity); | 3554 | double priority = m_prioritizer.GetUpdatePriority(this, entity); |
3556 | 3555 | ||
3557 | lock (m_entityUpdates.SyncRoot) | 3556 | lock (m_entityUpdates.SyncRoot) |
3558 | m_entityUpdates.Enqueue(priority, new EntityUpdate(entity, updateFlags), entity.LocalId); | 3557 | m_entityUpdates.Enqueue(priority, new EntityUpdate(entity, updateFlags), entity.LocalId); |
3559 | } | 3558 | } |
3560 | 3559 | ||
3561 | private void ProcessEntityUpdates(int maxUpdates) | 3560 | private void ProcessEntityUpdates(int maxUpdates) |
3562 | { | 3561 | { |
3563 | Lazy<List<ObjectUpdatePacket.ObjectDataBlock>> objectUpdateBlocks = new Lazy<List<ObjectUpdatePacket.ObjectDataBlock>>(); | 3562 | OpenSim.Framework.Lazy<List<ObjectUpdatePacket.ObjectDataBlock>> objectUpdateBlocks = new OpenSim.Framework.Lazy<List<ObjectUpdatePacket.ObjectDataBlock>>(); |
3564 | Lazy<List<ObjectUpdateCompressedPacket.ObjectDataBlock>> compressedUpdateBlocks = new Lazy<List<ObjectUpdateCompressedPacket.ObjectDataBlock>>(); | 3563 | OpenSim.Framework.Lazy<List<ObjectUpdateCompressedPacket.ObjectDataBlock>> compressedUpdateBlocks = new OpenSim.Framework.Lazy<List<ObjectUpdateCompressedPacket.ObjectDataBlock>>(); |
3565 | Lazy<List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>> terseUpdateBlocks = new Lazy<List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>>(); | 3564 | OpenSim.Framework.Lazy<List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>> terseUpdateBlocks = new OpenSim.Framework.Lazy<List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>>(); |
3566 | 3565 | ||
3567 | if (maxUpdates <= 0) maxUpdates = Int32.MaxValue; | 3566 | if (maxUpdates <= 0) maxUpdates = Int32.MaxValue; |
3568 | int updatesThisCall = 0; | 3567 | int updatesThisCall = 0; |
@@ -3660,28 +3659,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3660 | // string text = sop.Text; | 3659 | // string text = sop.Text; |
3661 | // if (text.IndexOf("\n") >= 0) | 3660 | // if (text.IndexOf("\n") >= 0) |
3662 | // text = text.Remove(text.IndexOf("\n")); | 3661 | // text = text.Remove(text.IndexOf("\n")); |
3663 | // | 3662 | // |
3664 | // if (m_attachmentsSent.Contains(sop.ParentID)) | 3663 | // if (m_attachmentsSent.Contains(sop.ParentID)) |
3665 | // { | 3664 | // { |
3666 | //// m_log.DebugFormat( | 3665 | //// m_log.DebugFormat( |
3667 | //// "[CLIENT]: Sending full info about attached prim {0} text {1}", | 3666 | //// "[CLIENT]: Sending full info about attached prim {0} text {1}", |
3668 | //// sop.LocalId, text); | 3667 | //// sop.LocalId, text); |
3669 | // | 3668 | // |
3670 | // objectUpdateBlocks.Value.Add(CreatePrimUpdateBlock(sop, this.m_agentId)); | 3669 | // objectUpdateBlocks.Value.Add(CreatePrimUpdateBlock(sop, this.m_agentId)); |
3671 | // | 3670 | // |
3672 | // m_attachmentsSent.Add(sop.LocalId); | 3671 | // m_attachmentsSent.Add(sop.LocalId); |
3673 | // } | 3672 | // } |
3674 | // else | 3673 | // else |
3675 | // { | 3674 | // { |
3676 | // m_log.DebugFormat( | 3675 | // m_log.DebugFormat( |
3677 | // "[CLIENT]: Requeueing full update of prim {0} text {1} since we haven't sent its parent {2} yet", | 3676 | // "[CLIENT]: Requeueing full update of prim {0} text {1} since we haven't sent its parent {2} yet", |
3678 | // sop.LocalId, text, sop.ParentID); | 3677 | // sop.LocalId, text, sop.ParentID); |
3679 | // | 3678 | // |
3680 | // m_entityUpdates.Enqueue(double.MaxValue, update, sop.LocalId); | 3679 | // m_entityUpdates.Enqueue(double.MaxValue, update, sop.LocalId); |
3681 | // } | 3680 | // } |
3682 | // } | 3681 | // } |
3683 | // else | 3682 | // else |
3684 | // { | 3683 | // { |
3685 | objectUpdateBlocks.Value.Add(CreatePrimUpdateBlock((SceneObjectPart)update.Entity, this.m_agentId)); | 3684 | objectUpdateBlocks.Value.Add(CreatePrimUpdateBlock((SceneObjectPart)update.Entity, this.m_agentId)); |
3686 | // } | 3685 | // } |
3687 | } | 3686 | } |
@@ -3995,7 +3994,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3995 | m_propertiesPacketTimer.Stop(); | 3994 | m_propertiesPacketTimer.Stop(); |
3996 | return; | 3995 | return; |
3997 | } | 3996 | } |
3998 | 3997 | ||
3999 | m_propertiesPacketTimer.Stop(); | 3998 | m_propertiesPacketTimer.Stop(); |
4000 | m_propertiesPacketTimer.Start(); | 3999 | m_propertiesPacketTimer.Start(); |
4001 | } | 4000 | } |
@@ -4229,7 +4228,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4229 | 4228 | ||
4230 | public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) | 4229 | public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) |
4231 | { | 4230 | { |
4232 | ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage(); | 4231 | ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage(); |
4233 | 4232 | ||
4234 | updateMessage.AABBMax = landData.AABBMax; | 4233 | updateMessage.AABBMax = landData.AABBMax; |
4235 | updateMessage.AABBMin = landData.AABBMin; | 4234 | updateMessage.AABBMin = landData.AABBMin; |
@@ -4273,7 +4272,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4273 | updateMessage.PassHours = landData.PassHours; | 4272 | updateMessage.PassHours = landData.PassHours; |
4274 | updateMessage.PassPrice = landData.PassPrice; | 4273 | updateMessage.PassPrice = landData.PassPrice; |
4275 | updateMessage.PublicCount = 0; //TODO: Unimplemented | 4274 | updateMessage.PublicCount = 0; //TODO: Unimplemented |
4276 | 4275 | ||
4277 | updateMessage.RegionPushOverride = (regionFlags & (uint)RegionFlags.RestrictPushObject) > 0; | 4276 | updateMessage.RegionPushOverride = (regionFlags & (uint)RegionFlags.RestrictPushObject) > 0; |
4278 | updateMessage.RegionDenyAnonymous = (regionFlags & (uint)RegionFlags.DenyAnonymous) > 0; | 4277 | updateMessage.RegionDenyAnonymous = (regionFlags & (uint)RegionFlags.DenyAnonymous) > 0; |
4279 | 4278 | ||
@@ -4303,13 +4302,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4303 | updateMessage.UserLocation = landData.UserLocation; | 4302 | updateMessage.UserLocation = landData.UserLocation; |
4304 | updateMessage.UserLookAt = landData.UserLookAt; | 4303 | updateMessage.UserLookAt = landData.UserLookAt; |
4305 | 4304 | ||
4306 | updateMessage.MediaType = landData.MediaType; | 4305 | updateMessage.MediaType = landData.MediaType; |
4307 | updateMessage.MediaDesc = landData.MediaDescription; | 4306 | updateMessage.MediaDesc = landData.MediaDescription; |
4308 | updateMessage.MediaWidth = landData.MediaWidth; | 4307 | updateMessage.MediaWidth = landData.MediaWidth; |
4309 | updateMessage.MediaHeight = landData.MediaHeight; | 4308 | updateMessage.MediaHeight = landData.MediaHeight; |
4310 | updateMessage.MediaLoop = landData.MediaLoop; | 4309 | updateMessage.MediaLoop = landData.MediaLoop; |
4311 | updateMessage.ObscureMusic = landData.ObscureMusic; | 4310 | updateMessage.ObscureMusic = landData.ObscureMusic; |
4312 | updateMessage.ObscureMedia = landData.ObscureMedia; | 4311 | updateMessage.ObscureMedia = landData.ObscureMedia; |
4313 | 4312 | ||
4314 | try | 4313 | try |
4315 | { | 4314 | { |
@@ -4318,8 +4317,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4318 | { | 4317 | { |
4319 | eq.ParcelProperties(updateMessage, this.AgentId); | 4318 | eq.ParcelProperties(updateMessage, this.AgentId); |
4320 | } else { | 4319 | } else { |
4321 | m_log.Warn("No EQ Interface when sending parcel data."); | 4320 | m_log.Warn("No EQ Interface when sending parcel data."); |
4322 | } | 4321 | } |
4323 | } | 4322 | } |
4324 | catch (Exception ex) | 4323 | catch (Exception ex) |
4325 | { | 4324 | { |
@@ -4692,9 +4691,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4692 | } | 4691 | } |
4693 | 4692 | ||
4694 | // m_log.DebugFormat( | 4693 | // m_log.DebugFormat( |
4695 | // "[LLCLIENTVIEW]: Constructing client update for part {0} {1} with flags {2}, localId {3}", | 4694 | // "[LLCLIENTVIEW]: Constructing client update for part {0} {1} with flags {2}, localId {3}", |
4696 | // data.Name, update.FullID, flags, update.ID); | 4695 | // data.Name, update.FullID, flags, update.ID); |
4697 | 4696 | ||
4698 | update.UpdateFlags = (uint)flags; | 4697 | update.UpdateFlags = (uint)flags; |
4699 | 4698 | ||
4700 | #endregion PrimFlags | 4699 | #endregion PrimFlags |
@@ -4827,11 +4826,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4827 | AddLocalPacketHandler(PacketType.ObjectScale, HandleObjectScale); | 4826 | AddLocalPacketHandler(PacketType.ObjectScale, HandleObjectScale); |
4828 | AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation); | 4827 | AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation); |
4829 | AddLocalPacketHandler(PacketType.ObjectFlagUpdate, HandleObjectFlagUpdate); | 4828 | AddLocalPacketHandler(PacketType.ObjectFlagUpdate, HandleObjectFlagUpdate); |
4830 | 4829 | ||
4831 | // Handle ObjectImage (TextureEntry) updates synchronously, since when updating multiple prim faces at once, | 4830 | // Handle ObjectImage (TextureEntry) updates synchronously, since when updating multiple prim faces at once, |
4832 | // some clients will send out a separate ObjectImage packet for each face | 4831 | // some clients will send out a separate ObjectImage packet for each face |
4833 | AddLocalPacketHandler(PacketType.ObjectImage, HandleObjectImage, false); | 4832 | AddLocalPacketHandler(PacketType.ObjectImage, HandleObjectImage, false); |
4834 | 4833 | ||
4835 | AddLocalPacketHandler(PacketType.ObjectGrab, HandleObjectGrab, false); | 4834 | AddLocalPacketHandler(PacketType.ObjectGrab, HandleObjectGrab, false); |
4836 | AddLocalPacketHandler(PacketType.ObjectGrabUpdate, HandleObjectGrabUpdate, false); | 4835 | AddLocalPacketHandler(PacketType.ObjectGrabUpdate, HandleObjectGrabUpdate, false); |
4837 | AddLocalPacketHandler(PacketType.ObjectDeGrab, HandleObjectDeGrab); | 4836 | AddLocalPacketHandler(PacketType.ObjectDeGrab, HandleObjectDeGrab); |
@@ -5088,12 +5087,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5088 | 5087 | ||
5089 | return false; | 5088 | return false; |
5090 | } | 5089 | } |
5091 | 5090 | ||
5092 | private bool HandleParcelGodMarkAsContent(IClientAPI client, Packet Packet) | 5091 | private bool HandleParcelGodMarkAsContent(IClientAPI client, Packet Packet) |
5093 | { | 5092 | { |
5094 | ParcelGodMarkAsContentPacket ParcelGodMarkAsContent = | 5093 | ParcelGodMarkAsContentPacket ParcelGodMarkAsContent = |
5095 | (ParcelGodMarkAsContentPacket)Packet; | 5094 | (ParcelGodMarkAsContentPacket)Packet; |
5096 | 5095 | ||
5097 | ParcelGodMark ParcelGodMarkAsContentHandler = OnParcelGodMark; | 5096 | ParcelGodMark ParcelGodMarkAsContentHandler = OnParcelGodMark; |
5098 | if (ParcelGodMarkAsContentHandler != null) | 5097 | if (ParcelGodMarkAsContentHandler != null) |
5099 | { | 5098 | { |
@@ -5104,11 +5103,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5104 | } | 5103 | } |
5105 | return false; | 5104 | return false; |
5106 | } | 5105 | } |
5107 | 5106 | ||
5108 | private bool HandleFreezeUser(IClientAPI client, Packet Packet) | 5107 | private bool HandleFreezeUser(IClientAPI client, Packet Packet) |
5109 | { | 5108 | { |
5110 | FreezeUserPacket FreezeUser = (FreezeUserPacket)Packet; | 5109 | FreezeUserPacket FreezeUser = (FreezeUserPacket)Packet; |
5111 | 5110 | ||
5112 | FreezeUserUpdate FreezeUserHandler = OnParcelFreezeUser; | 5111 | FreezeUserUpdate FreezeUserHandler = OnParcelFreezeUser; |
5113 | if (FreezeUserHandler != null) | 5112 | if (FreezeUserHandler != null) |
5114 | { | 5113 | { |
@@ -5120,12 +5119,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5120 | } | 5119 | } |
5121 | return false; | 5120 | return false; |
5122 | } | 5121 | } |
5123 | 5122 | ||
5124 | private bool HandleEjectUser(IClientAPI client, Packet Packet) | 5123 | private bool HandleEjectUser(IClientAPI client, Packet Packet) |
5125 | { | 5124 | { |
5126 | EjectUserPacket EjectUser = | 5125 | EjectUserPacket EjectUser = |
5127 | (EjectUserPacket)Packet; | 5126 | (EjectUserPacket)Packet; |
5128 | 5127 | ||
5129 | EjectUserUpdate EjectUserHandler = OnParcelEjectUser; | 5128 | EjectUserUpdate EjectUserHandler = OnParcelEjectUser; |
5130 | if (EjectUserHandler != null) | 5129 | if (EjectUserHandler != null) |
5131 | { | 5130 | { |
@@ -5137,12 +5136,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5137 | } | 5136 | } |
5138 | return false; | 5137 | return false; |
5139 | } | 5138 | } |
5140 | 5139 | ||
5141 | private bool HandleParcelBuyPass(IClientAPI client, Packet Packet) | 5140 | private bool HandleParcelBuyPass(IClientAPI client, Packet Packet) |
5142 | { | 5141 | { |
5143 | ParcelBuyPassPacket ParcelBuyPass = | 5142 | ParcelBuyPassPacket ParcelBuyPass = |
5144 | (ParcelBuyPassPacket)Packet; | 5143 | (ParcelBuyPassPacket)Packet; |
5145 | 5144 | ||
5146 | ParcelBuyPass ParcelBuyPassHandler = OnParcelBuyPass; | 5145 | ParcelBuyPass ParcelBuyPassHandler = OnParcelBuyPass; |
5147 | if (ParcelBuyPassHandler != null) | 5146 | if (ParcelBuyPassHandler != null) |
5148 | { | 5147 | { |
@@ -5153,7 +5152,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5153 | } | 5152 | } |
5154 | return false; | 5153 | return false; |
5155 | } | 5154 | } |
5156 | 5155 | ||
5157 | private bool HandleParcelBuyRequest(IClientAPI sender, Packet Pack) | 5156 | private bool HandleParcelBuyRequest(IClientAPI sender, Packet Pack) |
5158 | { | 5157 | { |
5159 | ParcelBuyPacket parcel = (ParcelBuyPacket)Pack; | 5158 | ParcelBuyPacket parcel = (ParcelBuyPacket)Pack; |
@@ -5375,7 +5374,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5375 | ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack; | 5374 | ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack; |
5376 | 5375 | ||
5377 | //m_log.DebugFormat("[CLIENT]: Received ScriptDialogReply from {0}", rdialog.Data.ObjectID); | 5376 | //m_log.DebugFormat("[CLIENT]: Received ScriptDialogReply from {0}", rdialog.Data.ObjectID); |
5378 | 5377 | ||
5379 | #region Packet Session and User Check | 5378 | #region Packet Session and User Check |
5380 | if (m_checkPackets) | 5379 | if (m_checkPackets) |
5381 | { | 5380 | { |
@@ -5521,12 +5520,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5521 | } | 5520 | } |
5522 | return true; | 5521 | return true; |
5523 | } | 5522 | } |
5524 | 5523 | ||
5525 | private bool HandleFindAgent(IClientAPI client, Packet Packet) | 5524 | private bool HandleFindAgent(IClientAPI client, Packet Packet) |
5526 | { | 5525 | { |
5527 | FindAgentPacket FindAgent = | 5526 | FindAgentPacket FindAgent = |
5528 | (FindAgentPacket)Packet; | 5527 | (FindAgentPacket)Packet; |
5529 | 5528 | ||
5530 | FindAgentUpdate FindAgentHandler = OnFindAgent; | 5529 | FindAgentUpdate FindAgentHandler = OnFindAgent; |
5531 | if (FindAgentHandler != null) | 5530 | if (FindAgentHandler != null) |
5532 | { | 5531 | { |
@@ -5535,12 +5534,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5535 | } | 5534 | } |
5536 | return false; | 5535 | return false; |
5537 | } | 5536 | } |
5538 | 5537 | ||
5539 | private bool HandleTrackAgent(IClientAPI client, Packet Packet) | 5538 | private bool HandleTrackAgent(IClientAPI client, Packet Packet) |
5540 | { | 5539 | { |
5541 | TrackAgentPacket TrackAgent = | 5540 | TrackAgentPacket TrackAgent = |
5542 | (TrackAgentPacket)Packet; | 5541 | (TrackAgentPacket)Packet; |
5543 | 5542 | ||
5544 | TrackAgentUpdate TrackAgentHandler = OnTrackAgent; | 5543 | TrackAgentUpdate TrackAgentHandler = OnTrackAgent; |
5545 | if (TrackAgentHandler != null) | 5544 | if (TrackAgentHandler != null) |
5546 | { | 5545 | { |
@@ -5551,7 +5550,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5551 | } | 5550 | } |
5552 | return false; | 5551 | return false; |
5553 | } | 5552 | } |
5554 | 5553 | ||
5555 | private bool HandlerRezObject(IClientAPI sender, Packet Pack) | 5554 | private bool HandlerRezObject(IClientAPI sender, Packet Pack) |
5556 | { | 5555 | { |
5557 | RezObjectPacket rezPacket = (RezObjectPacket)Pack; | 5556 | RezObjectPacket rezPacket = (RezObjectPacket)Pack; |
@@ -7207,19 +7206,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7207 | UUID requestID = new UUID(transfer.TransferInfo.Params, 80); | 7206 | UUID requestID = new UUID(transfer.TransferInfo.Params, 80); |
7208 | 7207 | ||
7209 | // m_log.DebugFormat( | 7208 | // m_log.DebugFormat( |
7210 | // "[CLIENT]: Got request for asset {0} from item {1} in prim {2} by {3}", | 7209 | // "[CLIENT]: Got request for asset {0} from item {1} in prim {2} by {3}", |
7211 | // requestID, itemID, taskID, Name); | 7210 | // requestID, itemID, taskID, Name); |
7212 | 7211 | ||
7213 | if (!(((Scene)m_scene).Permissions.BypassPermissions())) | 7212 | if (!(((Scene)m_scene).Permissions.BypassPermissions())) |
7214 | { | 7213 | { |
7215 | if (taskID != UUID.Zero) // Prim | 7214 | if (taskID != UUID.Zero) // Prim |
7216 | { | 7215 | { |
7217 | SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID); | 7216 | SceneObjectPart part = ((Scene)m_scene).GetSceneObjectPart(taskID); |
7218 | 7217 | ||
7219 | if (part == null) | 7218 | if (part == null) |
7220 | { | 7219 | { |
7221 | m_log.WarnFormat( | 7220 | m_log.WarnFormat( |
7222 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but prim does not exist", | 7221 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but prim does not exist", |
7223 | Name, requestID, itemID, taskID); | 7222 | Name, requestID, itemID, taskID); |
7224 | return true; | 7223 | return true; |
7225 | } | 7224 | } |
@@ -7228,11 +7227,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7228 | if (tii == null) | 7227 | if (tii == null) |
7229 | { | 7228 | { |
7230 | m_log.WarnFormat( | 7229 | m_log.WarnFormat( |
7231 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item does not exist", | 7230 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item does not exist", |
7232 | Name, requestID, itemID, taskID); | 7231 | Name, requestID, itemID, taskID); |
7233 | return true; | 7232 | return true; |
7234 | } | 7233 | } |
7235 | 7234 | ||
7236 | if (tii.Type == (int)AssetType.LSLText) | 7235 | if (tii.Type == (int)AssetType.LSLText) |
7237 | { | 7236 | { |
7238 | if (!((Scene)m_scene).Permissions.CanEditScript(itemID, taskID, AgentId)) | 7237 | if (!((Scene)m_scene).Permissions.CanEditScript(itemID, taskID, AgentId)) |
@@ -7251,41 +7250,41 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7251 | { | 7250 | { |
7252 | m_log.WarnFormat( | 7251 | m_log.WarnFormat( |
7253 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the prim is owned by {4}", | 7252 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the prim is owned by {4}", |
7254 | Name, requestID, itemID, taskID, part.OwnerID); | 7253 | Name, requestID, itemID, taskID, part.OwnerID); |
7255 | return true; | 7254 | return true; |
7256 | } | 7255 | } |
7257 | 7256 | ||
7258 | if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) | 7257 | if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0) |
7259 | { | 7258 | { |
7260 | m_log.WarnFormat( | 7259 | m_log.WarnFormat( |
7261 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but modify permissions are not set", | 7260 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but modify permissions are not set", |
7262 | Name, requestID, itemID, taskID); | 7261 | Name, requestID, itemID, taskID); |
7263 | return true; | 7262 | return true; |
7264 | } | 7263 | } |
7265 | 7264 | ||
7266 | if (tii.OwnerID != AgentId) | 7265 | if (tii.OwnerID != AgentId) |
7267 | { | 7266 | { |
7268 | m_log.WarnFormat( | 7267 | m_log.WarnFormat( |
7269 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the item is owned by {4}", | 7268 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but the item is owned by {4}", |
7270 | Name, requestID, itemID, taskID, tii.OwnerID); | 7269 | Name, requestID, itemID, taskID, tii.OwnerID); |
7271 | return true; | 7270 | return true; |
7272 | } | 7271 | } |
7273 | 7272 | ||
7274 | if (( | 7273 | if (( |
7275 | tii.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) | 7274 | tii.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) |
7276 | != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) | 7275 | != ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy | (uint)PermissionMask.Transfer)) |
7277 | { | 7276 | { |
7278 | m_log.WarnFormat( | 7277 | m_log.WarnFormat( |
7279 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item permissions are not modify/copy/transfer", | 7278 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but item permissions are not modify/copy/transfer", |
7280 | Name, requestID, itemID, taskID); | 7279 | Name, requestID, itemID, taskID); |
7281 | return true; | 7280 | return true; |
7282 | } | 7281 | } |
7283 | 7282 | ||
7284 | if (tii.AssetID != requestID) | 7283 | if (tii.AssetID != requestID) |
7285 | { | 7284 | { |
7286 | m_log.WarnFormat( | 7285 | m_log.WarnFormat( |
7287 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but this does not match item's asset {4}", | 7286 | "[CLIENT]: {0} requested asset {1} from item {2} in prim {3} but this does not match item's asset {4}", |
7288 | Name, requestID, itemID, taskID, tii.AssetID); | 7287 | Name, requestID, itemID, taskID, tii.AssetID); |
7289 | return true; | 7288 | return true; |
7290 | } | 7289 | } |
7291 | } | 7290 | } |
@@ -7889,7 +7888,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7889 | newTaskItem, updatetask.UpdateData.LocalID); | 7888 | newTaskItem, updatetask.UpdateData.LocalID); |
7890 | } | 7889 | } |
7891 | } | 7890 | } |
7892 | } | 7891 | } |
7893 | 7892 | ||
7894 | return true; | 7893 | return true; |
7895 | } | 7894 | } |
@@ -8884,7 +8883,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
8884 | 8883 | ||
8885 | // return true; | 8884 | // return true; |
8886 | } | 8885 | } |
8887 | 8886 | ||
8888 | private bool HandleRequestRegionInfo(IClientAPI sender, Packet Pack) | 8887 | private bool HandleRequestRegionInfo(IClientAPI sender, Packet Pack) |
8889 | { | 8888 | { |
8890 | RequestRegionInfoPacket.AgentDataBlock mPacket = ((RequestRegionInfoPacket)Pack).AgentData; | 8889 | RequestRegionInfoPacket.AgentDataBlock mPacket = ((RequestRegionInfoPacket)Pack).AgentData; |
@@ -8905,7 +8904,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
8905 | } | 8904 | } |
8906 | return true; | 8905 | return true; |
8907 | } | 8906 | } |
8908 | 8907 | ||
8909 | private bool HandleEstateCovenantRequest(IClientAPI sender, Packet Pack) | 8908 | private bool HandleEstateCovenantRequest(IClientAPI sender, Packet Pack) |
8910 | { | 8909 | { |
8911 | 8910 | ||
@@ -8942,7 +8941,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
8942 | 8941 | ||
8943 | return true; | 8942 | return true; |
8944 | } | 8943 | } |
8945 | 8944 | ||
8946 | private bool HandleGodUpdateRegionInfoUpdate(IClientAPI client, Packet Packet) | 8945 | private bool HandleGodUpdateRegionInfoUpdate(IClientAPI client, Packet Packet) |
8947 | { | 8946 | { |
8948 | GodUpdateRegionInfoPacket GodUpdateRegionInfo = | 8947 | GodUpdateRegionInfoPacket GodUpdateRegionInfo = |
@@ -8962,7 +8961,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
8962 | } | 8961 | } |
8963 | return false; | 8962 | return false; |
8964 | } | 8963 | } |
8965 | 8964 | ||
8966 | private bool HandleSimWideDeletes(IClientAPI client, Packet Packet) | 8965 | private bool HandleSimWideDeletes(IClientAPI client, Packet Packet) |
8967 | { | 8966 | { |
8968 | SimWideDeletesPacket SimWideDeletesRequest = | 8967 | SimWideDeletesPacket SimWideDeletesRequest = |
@@ -8975,7 +8974,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
8975 | } | 8974 | } |
8976 | return false; | 8975 | return false; |
8977 | } | 8976 | } |
8978 | 8977 | ||
8979 | private bool HandleGodlikeMessage(IClientAPI client, Packet Packet) | 8978 | private bool HandleGodlikeMessage(IClientAPI client, Packet Packet) |
8980 | { | 8979 | { |
8981 | GodlikeMessagePacket GodlikeMessage = | 8980 | GodlikeMessagePacket GodlikeMessage = |
@@ -8992,7 +8991,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
8992 | } | 8991 | } |
8993 | return false; | 8992 | return false; |
8994 | } | 8993 | } |
8995 | 8994 | ||
8996 | private bool HandleSaveStatePacket(IClientAPI client, Packet Packet) | 8995 | private bool HandleSaveStatePacket(IClientAPI client, Packet Packet) |
8997 | { | 8996 | { |
8998 | StateSavePacket SaveStateMessage = | 8997 | StateSavePacket SaveStateMessage = |
@@ -9005,7 +9004,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9005 | } | 9004 | } |
9006 | return false; | 9005 | return false; |
9007 | } | 9006 | } |
9008 | 9007 | ||
9009 | private bool HandleGodKickUser(IClientAPI sender, Packet Pack) | 9008 | private bool HandleGodKickUser(IClientAPI sender, Packet Pack) |
9010 | { | 9009 | { |
9011 | GodKickUserPacket gkupack = (GodKickUserPacket)Pack; | 9010 | GodKickUserPacket gkupack = (GodKickUserPacket)Pack; |
@@ -9143,7 +9142,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9143 | } | 9142 | } |
9144 | return true; | 9143 | return true; |
9145 | } | 9144 | } |
9146 | 9145 | ||
9147 | #endregion Economy/Transaction Packets | 9146 | #endregion Economy/Transaction Packets |
9148 | 9147 | ||
9149 | #region Script Packets | 9148 | #region Script Packets |
@@ -9356,7 +9355,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9356 | } | 9355 | } |
9357 | return true; | 9356 | return true; |
9358 | } | 9357 | } |
9359 | 9358 | ||
9360 | private bool HandleUpdateMuteListEntry(IClientAPI client, Packet Packet) | 9359 | private bool HandleUpdateMuteListEntry(IClientAPI client, Packet Packet) |
9361 | { | 9360 | { |
9362 | UpdateMuteListEntryPacket UpdateMuteListEntry = | 9361 | UpdateMuteListEntryPacket UpdateMuteListEntry = |
@@ -9372,7 +9371,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9372 | } | 9371 | } |
9373 | return false; | 9372 | return false; |
9374 | } | 9373 | } |
9375 | 9374 | ||
9376 | private bool HandleRemoveMuteListEntry(IClientAPI client, Packet Packet) | 9375 | private bool HandleRemoveMuteListEntry(IClientAPI client, Packet Packet) |
9377 | { | 9376 | { |
9378 | RemoveMuteListEntryPacket RemoveMuteListEntry = | 9377 | RemoveMuteListEntryPacket RemoveMuteListEntry = |
@@ -9388,7 +9387,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9388 | } | 9387 | } |
9389 | return false; | 9388 | return false; |
9390 | } | 9389 | } |
9391 | 9390 | ||
9392 | private bool HandleUserReport(IClientAPI client, Packet Packet) | 9391 | private bool HandleUserReport(IClientAPI client, Packet Packet) |
9393 | { | 9392 | { |
9394 | UserReportPacket UserReport = | 9393 | UserReportPacket UserReport = |
@@ -9413,7 +9412,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9413 | } | 9412 | } |
9414 | return false; | 9413 | return false; |
9415 | } | 9414 | } |
9416 | 9415 | ||
9417 | private bool HandleSendPostcard(IClientAPI client, Packet packet) | 9416 | private bool HandleSendPostcard(IClientAPI client, Packet packet) |
9418 | { | 9417 | { |
9419 | // SendPostcardPacket SendPostcard = | 9418 | // SendPostcardPacket SendPostcard = |
@@ -9726,7 +9725,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9726 | return true; | 9725 | return true; |
9727 | 9726 | ||
9728 | } | 9727 | } |
9729 | 9728 | ||
9730 | private bool HandleGroupVoteHistoryRequest(IClientAPI client, Packet Packet) | 9729 | private bool HandleGroupVoteHistoryRequest(IClientAPI client, Packet Packet) |
9731 | { | 9730 | { |
9732 | GroupVoteHistoryRequestPacket GroupVoteHistoryRequest = | 9731 | GroupVoteHistoryRequestPacket GroupVoteHistoryRequest = |
@@ -9739,7 +9738,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9739 | } | 9738 | } |
9740 | return false; | 9739 | return false; |
9741 | } | 9740 | } |
9742 | 9741 | ||
9743 | private bool HandleGroupActiveProposalsRequest(IClientAPI client, Packet Packet) | 9742 | private bool HandleGroupActiveProposalsRequest(IClientAPI client, Packet Packet) |
9744 | { | 9743 | { |
9745 | GroupActiveProposalsRequestPacket GroupActiveProposalsRequest = | 9744 | GroupActiveProposalsRequestPacket GroupActiveProposalsRequest = |
@@ -9752,7 +9751,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9752 | } | 9751 | } |
9753 | return false; | 9752 | return false; |
9754 | } | 9753 | } |
9755 | 9754 | ||
9756 | private bool HandleGroupAccountDetailsRequest(IClientAPI client, Packet Packet) | 9755 | private bool HandleGroupAccountDetailsRequest(IClientAPI client, Packet Packet) |
9757 | { | 9756 | { |
9758 | GroupAccountDetailsRequestPacket GroupAccountDetailsRequest = | 9757 | GroupAccountDetailsRequestPacket GroupAccountDetailsRequest = |
@@ -9765,7 +9764,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9765 | } | 9764 | } |
9766 | return false; | 9765 | return false; |
9767 | } | 9766 | } |
9768 | 9767 | ||
9769 | private bool HandleGroupAccountSummaryRequest(IClientAPI client, Packet Packet) | 9768 | private bool HandleGroupAccountSummaryRequest(IClientAPI client, Packet Packet) |
9770 | { | 9769 | { |
9771 | GroupAccountSummaryRequestPacket GroupAccountSummaryRequest = | 9770 | GroupAccountSummaryRequestPacket GroupAccountSummaryRequest = |
@@ -9778,7 +9777,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9778 | } | 9777 | } |
9779 | return false; | 9778 | return false; |
9780 | } | 9779 | } |
9781 | 9780 | ||
9782 | private bool HandleGroupTransactionsDetailsRequest(IClientAPI client, Packet Packet) | 9781 | private bool HandleGroupTransactionsDetailsRequest(IClientAPI client, Packet Packet) |
9783 | { | 9782 | { |
9784 | GroupAccountTransactionsRequestPacket GroupAccountTransactionsRequest = | 9783 | GroupAccountTransactionsRequestPacket GroupAccountTransactionsRequest = |
@@ -9791,7 +9790,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9791 | } | 9790 | } |
9792 | return false; | 9791 | return false; |
9793 | } | 9792 | } |
9794 | 9793 | ||
9795 | private bool HandleGroupTitlesRequest(IClientAPI sender, Packet Pack) | 9794 | private bool HandleGroupTitlesRequest(IClientAPI sender, Packet Pack) |
9796 | { | 9795 | { |
9797 | GroupTitlesRequestPacket groupTitlesRequest = | 9796 | GroupTitlesRequestPacket groupTitlesRequest = |
@@ -11239,26 +11238,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11239 | if (m_debugPacketLevel > 0) | 11238 | if (m_debugPacketLevel > 0) |
11240 | { | 11239 | { |
11241 | bool outputPacket = true; | 11240 | bool outputPacket = true; |
11242 | 11241 | ||
11243 | if (m_debugPacketLevel <= 255 | 11242 | if (m_debugPacketLevel <= 255 |
11244 | && (packet.Type == PacketType.SimStats || packet.Type == PacketType.SimulatorViewerTimeMessage)) | 11243 | && (packet.Type == PacketType.SimStats || packet.Type == PacketType.SimulatorViewerTimeMessage)) |
11245 | outputPacket = false; | 11244 | outputPacket = false; |
11246 | 11245 | ||
11247 | if (m_debugPacketLevel <= 200 | 11246 | if (m_debugPacketLevel <= 200 |
11248 | && | 11247 | && (packet.Type == PacketType.ImagePacket |
11249 | (packet.Type == PacketType.ImagePacket | ||
11250 | || packet.Type == PacketType.ImageData | 11248 | || packet.Type == PacketType.ImageData |
11251 | || packet.Type == PacketType.LayerData | 11249 | || packet.Type == PacketType.LayerData |
11252 | || packet.Type == PacketType.CoarseLocationUpdate)) | 11250 | || packet.Type == PacketType.CoarseLocationUpdate)) |
11253 | outputPacket = false; | 11251 | outputPacket = false; |
11254 | 11252 | ||
11255 | if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.AvatarAnimation || packet.Type == PacketType.ViewerEffect)) | 11253 | if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.AvatarAnimation || packet.Type == PacketType.ViewerEffect)) |
11256 | outputPacket = false; | 11254 | outputPacket = false; |
11257 | 11255 | ||
11258 | if (outputPacket) | 11256 | if (outputPacket) |
11259 | m_log.DebugFormat("[CLIENT]: Packet OUT {0}", packet.Type); | 11257 | m_log.DebugFormat("[CLIENT]: Packet OUT {0}", packet.Type); |
11260 | } | 11258 | } |
11261 | 11259 | ||
11262 | m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting); | 11260 | m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting); |
11263 | } | 11261 | } |
11264 | 11262 | ||
@@ -11348,16 +11346,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11348 | if (m_debugPacketLevel > 0) | 11346 | if (m_debugPacketLevel > 0) |
11349 | { | 11347 | { |
11350 | bool outputPacket = true; | 11348 | bool outputPacket = true; |
11351 | 11349 | ||
11352 | if (m_debugPacketLevel <= 255 && packet.Type == PacketType.AgentUpdate) | 11350 | if (m_debugPacketLevel <= 255 && packet.Type == PacketType.AgentUpdate) |
11353 | outputPacket = false; | 11351 | outputPacket = false; |
11354 | 11352 | ||
11355 | if (m_debugPacketLevel <= 200 && packet.Type == PacketType.RequestImage) | 11353 | if (m_debugPacketLevel <= 200 && packet.Type == PacketType.RequestImage) |
11356 | outputPacket = false; | 11354 | outputPacket = false; |
11357 | 11355 | ||
11358 | if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation)) | 11356 | if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation)) |
11359 | outputPacket = false; | 11357 | outputPacket = false; |
11360 | 11358 | ||
11361 | if (outputPacket) | 11359 | if (outputPacket) |
11362 | m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type); | 11360 | m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type); |
11363 | } | 11361 | } |
@@ -11623,12 +11621,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11623 | 11621 | ||
11624 | UUID requestID = UUID.Zero; | 11622 | UUID requestID = UUID.Zero; |
11625 | byte source = (byte)SourceType.Asset; | 11623 | byte source = (byte)SourceType.Asset; |
11626 | 11624 | ||
11627 | if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset) | 11625 | if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset) |
11628 | { | 11626 | { |
11629 | requestID = new UUID(transferRequest.TransferInfo.Params, 0); | 11627 | requestID = new UUID(transferRequest.TransferInfo.Params, 0); |
11630 | } | 11628 | } |
11631 | else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem) | 11629 | else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem) |
11632 | { | 11630 | { |
11633 | requestID = new UUID(transferRequest.TransferInfo.Params, 80); | 11631 | requestID = new UUID(transferRequest.TransferInfo.Params, 80); |
11634 | source = (byte)SourceType.SimInventoryItem; | 11632 | source = (byte)SourceType.SimInventoryItem; |
@@ -11874,7 +11872,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11874 | public PacketMethod method; | 11872 | public PacketMethod method; |
11875 | public bool Async; | 11873 | public bool Async; |
11876 | } | 11874 | } |
11877 | 11875 | ||
11878 | public class AsyncPacketProcess | 11876 | public class AsyncPacketProcess |
11879 | { | 11877 | { |
11880 | public bool result = false; | 11878 | public bool result = false; |
@@ -11943,8 +11941,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11943 | dialog.Data.FirstName = Util.StringToBytes256(ownerFirstName); | 11941 | dialog.Data.FirstName = Util.StringToBytes256(ownerFirstName); |
11944 | dialog.Data.LastName = Util.StringToBytes256(ownerLastName); | 11942 | dialog.Data.LastName = Util.StringToBytes256(ownerLastName); |
11945 | dialog.Data.Message = Util.StringToBytes256(message); | 11943 | dialog.Data.Message = Util.StringToBytes256(message); |
11946 | 11944 | ||
11947 | |||
11948 | ScriptDialogPacket.ButtonsBlock[] buttons = new ScriptDialogPacket.ButtonsBlock[1]; | 11945 | ScriptDialogPacket.ButtonsBlock[] buttons = new ScriptDialogPacket.ButtonsBlock[1]; |
11949 | buttons[0] = new ScriptDialogPacket.ButtonsBlock(); | 11946 | buttons[0] = new ScriptDialogPacket.ButtonsBlock(); |
11950 | buttons[0].ButtonLabel = Util.StringToBytes256("!!llTextBox!!"); | 11947 | buttons[0].ButtonLabel = Util.StringToBytes256("!!llTextBox!!"); |
@@ -11958,7 +11955,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11958 | { | 11955 | { |
11959 | ScenePresence presence = p as ScenePresence; | 11956 | ScenePresence presence = p as ScenePresence; |
11960 | // It turns out to get the agent to stop flying, you have to feed it stop flying velocities | 11957 | // It turns out to get the agent to stop flying, you have to feed it stop flying velocities |
11961 | // There's no explicit message to send the client to tell it to stop flying.. it relies on the | 11958 | // There's no explicit message to send the client to tell it to stop flying.. it relies on the |
11962 | // velocity, collision plane and avatar height | 11959 | // velocity, collision plane and avatar height |
11963 | 11960 | ||
11964 | // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air | 11961 | // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air |
@@ -11975,7 +11972,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11975 | 11972 | ||
11976 | // attach a suitable collision plane regardless of the actual situation to force the LLClient to land. | 11973 | // attach a suitable collision plane regardless of the actual situation to force the LLClient to land. |
11977 | // Collision plane below the avatar's position a 6th of the avatar's height is suitable. | 11974 | // Collision plane below the avatar's position a 6th of the avatar's height is suitable. |
11978 | // Mind you, that this method doesn't get called if the avatar's velocity magnitude is greater then a | 11975 | // Mind you, that this method doesn't get called if the avatar's velocity magnitude is greater then a |
11979 | // certain amount.. because the LLClient wouldn't land in that situation anyway. | 11976 | // certain amount.. because the LLClient wouldn't land in that situation anyway. |
11980 | 11977 | ||
11981 | // why are we still testing for this really old height value default??? | 11978 | // why are we still testing for this really old height value default??? |
diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs index 46b68ec..ea1317a 100644 --- a/OpenSim/Region/ClientStack/RegionApplicationBase.cs +++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs | |||
@@ -36,6 +36,7 @@ using OpenSim.Framework.Communications; | |||
36 | using OpenSim.Framework.Servers; | 36 | using OpenSim.Framework.Servers; |
37 | using OpenSim.Framework.Servers.HttpServer; | 37 | using OpenSim.Framework.Servers.HttpServer; |
38 | using OpenSim.Region.Framework; | 38 | using OpenSim.Region.Framework; |
39 | using OpenSim.Region.Framework.Interfaces; | ||
39 | using OpenSim.Region.Framework.Scenes; | 40 | using OpenSim.Region.Framework.Scenes; |
40 | using OpenSim.Region.Physics.Manager; | 41 | using OpenSim.Region.Physics.Manager; |
41 | 42 | ||
@@ -48,28 +49,16 @@ namespace OpenSim.Region.ClientStack | |||
48 | 49 | ||
49 | protected Dictionary<EndPoint, uint> m_clientCircuits = new Dictionary<EndPoint, uint>(); | 50 | protected Dictionary<EndPoint, uint> m_clientCircuits = new Dictionary<EndPoint, uint>(); |
50 | protected NetworkServersInfo m_networkServersInfo; | 51 | protected NetworkServersInfo m_networkServersInfo; |
51 | |||
52 | public NetworkServersInfo NetServersInfo | ||
53 | { | ||
54 | get { return m_networkServersInfo; } | ||
55 | } | ||
56 | |||
57 | protected uint m_httpServerPort; | 52 | protected uint m_httpServerPort; |
58 | 53 | protected ISimulationDataService m_simulationDataService; | |
59 | protected StorageManager m_storageManager; | 54 | protected IEstateDataService m_estateDataService; |
60 | |||
61 | public StorageManager StorageManager | ||
62 | { | ||
63 | get { return m_storageManager; } | ||
64 | } | ||
65 | |||
66 | protected ClientStackManager m_clientStackManager; | 55 | protected ClientStackManager m_clientStackManager; |
67 | |||
68 | public SceneManager SceneManager | ||
69 | { | ||
70 | get { return m_sceneManager; } | ||
71 | } | ||
72 | protected SceneManager m_sceneManager = new SceneManager(); | 56 | protected SceneManager m_sceneManager = new SceneManager(); |
57 | |||
58 | public SceneManager SceneManager { get { return m_sceneManager; } } | ||
59 | public NetworkServersInfo NetServersInfo { get { return m_networkServersInfo; } } | ||
60 | public ISimulationDataService SimulationDataService { get { return m_simulationDataService; } } | ||
61 | public IEstateDataService EstateDataService { get { return m_estateDataService; } } | ||
73 | 62 | ||
74 | protected abstract void Initialize(); | 63 | protected abstract void Initialize(); |
75 | 64 | ||
@@ -83,15 +72,11 @@ namespace OpenSim.Region.ClientStack | |||
83 | /// <returns></returns> | 72 | /// <returns></returns> |
84 | protected abstract PhysicsScene GetPhysicsScene(string osSceneIdentifier); | 73 | protected abstract PhysicsScene GetPhysicsScene(string osSceneIdentifier); |
85 | 74 | ||
86 | protected abstract StorageManager CreateStorageManager(); | ||
87 | protected abstract ClientStackManager CreateClientStackManager(); | 75 | protected abstract ClientStackManager CreateClientStackManager(); |
88 | protected abstract Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, | 76 | protected abstract Scene CreateScene(RegionInfo regionInfo, ISimulationDataService simDataService, IEstateDataService estateDataService, AgentCircuitManager circuitManager); |
89 | AgentCircuitManager circuitManager); | ||
90 | 77 | ||
91 | protected override void StartupSpecific() | 78 | protected override void StartupSpecific() |
92 | { | 79 | { |
93 | m_storageManager = CreateStorageManager(); | ||
94 | |||
95 | m_clientStackManager = CreateClientStackManager(); | 80 | m_clientStackManager = CreateClientStackManager(); |
96 | 81 | ||
97 | Initialize(); | 82 | Initialize(); |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 100b55c..e1c0949 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -49,8 +49,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
49 | 49 | ||
50 | protected Scene m_scene = null; | 50 | protected Scene m_scene = null; |
51 | 51 | ||
52 | public string Name { get { return "Attachments Module"; } } | 52 | public string Name { get { return "Attachments Module"; } } |
53 | public Type ReplaceableInterface { get { return null; } } | 53 | public Type ReplaceableInterface { get { return null; } } |
54 | 54 | ||
55 | public void Initialise(IConfigSource source) {} | 55 | public void Initialise(IConfigSource source) {} |
56 | 56 | ||
@@ -81,7 +81,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
81 | client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachmentsFromInventory; | 81 | client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachmentsFromInventory; |
82 | client.OnObjectAttach += AttachObject; | 82 | client.OnObjectAttach += AttachObject; |
83 | client.OnObjectDetach += DetachObject; | 83 | client.OnObjectDetach += DetachObject; |
84 | client.OnDetachAttachmentIntoInv += ShowDetachInUserInventory; | 84 | client.OnDetachAttachmentIntoInv += ShowDetachInUserInventory; |
85 | } | 85 | } |
86 | 86 | ||
87 | public void UnsubscribeFromClientEvents(IClientAPI client) | 87 | public void UnsubscribeFromClientEvents(IClientAPI client) |
@@ -90,7 +90,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
90 | client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachmentsFromInventory; | 90 | client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachmentsFromInventory; |
91 | client.OnObjectAttach -= AttachObject; | 91 | client.OnObjectAttach -= AttachObject; |
92 | client.OnObjectDetach -= DetachObject; | 92 | client.OnObjectDetach -= DetachObject; |
93 | client.OnDetachAttachmentIntoInv -= ShowDetachInUserInventory; | 93 | client.OnDetachAttachmentIntoInv -= ShowDetachInUserInventory; |
94 | } | 94 | } |
95 | 95 | ||
96 | /// <summary> | 96 | /// <summary> |
@@ -174,12 +174,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
174 | UUID itemID = UUID.Zero; | 174 | UUID itemID = UUID.Zero; |
175 | if (sp != null) | 175 | if (sp != null) |
176 | { | 176 | { |
177 | foreach(SceneObjectGroup grp in sp.GetAttachments(AttachmentPt)) | 177 | foreach (SceneObjectGroup grp in sp.GetAttachments(AttachmentPt)) |
178 | { | 178 | { |
179 | itemID = grp.GetFromItemID(); | 179 | itemID = grp.GetFromItemID(); |
180 | if (itemID != UUID.Zero) | 180 | if (itemID != UUID.Zero) |
181 | DetachSingleAttachmentToInv(itemID, remoteClient); | 181 | DetachSingleAttachmentToInv(itemID, remoteClient); |
182 | } | 182 | } |
183 | } | 183 | } |
184 | 184 | ||
185 | if (group.GetFromItemID() == UUID.Zero) | 185 | if (group.GetFromItemID() == UUID.Zero) |
@@ -232,7 +232,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
232 | 232 | ||
233 | public UUID RezSingleAttachmentFromInventory( | 233 | public UUID RezSingleAttachmentFromInventory( |
234 | IClientAPI remoteClient, UUID itemID, uint AttachmentPt, bool updateInventoryStatus, XmlDocument doc) | 234 | IClientAPI remoteClient, UUID itemID, uint AttachmentPt, bool updateInventoryStatus, XmlDocument doc) |
235 | { | 235 | { |
236 | SceneObjectGroup att = RezSingleAttachmentFromInventoryInternal(remoteClient, itemID, AttachmentPt, doc); | 236 | SceneObjectGroup att = RezSingleAttachmentFromInventoryInternal(remoteClient, itemID, AttachmentPt, doc); |
237 | 237 | ||
238 | if (updateInventoryStatus) | 238 | if (updateInventoryStatus) |
@@ -248,8 +248,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
248 | if (null == att) | 248 | if (null == att) |
249 | return UUID.Zero; | 249 | return UUID.Zero; |
250 | else | 250 | else |
251 | return att.UUID; | 251 | return att.UUID; |
252 | } | 252 | } |
253 | 253 | ||
254 | protected SceneObjectGroup RezSingleAttachmentFromInventoryInternal( | 254 | protected SceneObjectGroup RezSingleAttachmentFromInventoryInternal( |
255 | IClientAPI remoteClient, UUID itemID, uint AttachmentPt, XmlDocument doc) | 255 | IClientAPI remoteClient, UUID itemID, uint AttachmentPt, XmlDocument doc) |
@@ -311,7 +311,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
311 | } | 311 | } |
312 | 312 | ||
313 | return null; | 313 | return null; |
314 | } | 314 | } |
315 | 315 | ||
316 | public UUID SetAttachmentInventoryStatus( | 316 | public UUID SetAttachmentInventoryStatus( |
317 | SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt) | 317 | SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt) |
@@ -456,7 +456,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
456 | 456 | ||
457 | // We can NOT use the dictionries here, as we are looking | 457 | // We can NOT use the dictionries here, as we are looking |
458 | // for an entity by the fromAssetID, which is NOT the prim UUID | 458 | // for an entity by the fromAssetID, which is NOT the prim UUID |
459 | List<EntityBase> detachEntities = m_scene.GetEntities(); | 459 | EntityBase[] detachEntities = m_scene.GetEntities(); |
460 | SceneObjectGroup group; | 460 | SceneObjectGroup group; |
461 | 461 | ||
462 | foreach (EntityBase entity in detachEntities) | 462 | foreach (EntityBase entity in detachEntities) |
@@ -495,7 +495,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
495 | sog.RootPart.IsAttachment = false; | 495 | sog.RootPart.IsAttachment = false; |
496 | sog.AbsolutePosition = sog.RootPart.AttachedPos; | 496 | sog.AbsolutePosition = sog.RootPart.AttachedPos; |
497 | UpdateKnownItem(client, sog, sog.GetFromItemID(), sog.OwnerID); | 497 | UpdateKnownItem(client, sog, sog.GetFromItemID(), sog.OwnerID); |
498 | sog.SetAttachmentPoint(attachmentPoint); | 498 | sog.SetAttachmentPoint(attachmentPoint); |
499 | } | 499 | } |
500 | 500 | ||
501 | /// <summary> | 501 | /// <summary> |
@@ -622,7 +622,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
622 | // In case it is later dropped again, don't let | 622 | // In case it is later dropped again, don't let |
623 | // it get cleaned up | 623 | // it get cleaned up |
624 | so.RootPart.RemFlag(PrimFlags.TemporaryOnRez); | 624 | so.RootPart.RemFlag(PrimFlags.TemporaryOnRez); |
625 | so.HasGroupChanged = false; | 625 | so.HasGroupChanged = false; |
626 | } | 626 | } |
627 | } | 627 | } |
628 | } | 628 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs index 032e55a..25322a1 100644 --- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs | |||
@@ -132,7 +132,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule | |||
132 | try | 132 | try |
133 | { | 133 | { |
134 | deadAvatar.ControllingClient.SendAgentAlertMessage(deadAvatarMessage, true); | 134 | deadAvatar.ControllingClient.SendAgentAlertMessage(deadAvatarMessage, true); |
135 | if(killingAvatar != null) | 135 | if (killingAvatar != null) |
136 | killingAvatar.ControllingClient.SendAlertMessage("You fragged " + deadAvatar.Firstname + " " + deadAvatar.Lastname); | 136 | killingAvatar.ControllingClient.SendAlertMessage("You fragged " + deadAvatar.Firstname + " " + deadAvatar.Lastname); |
137 | } | 137 | } |
138 | catch (InvalidOperationException) | 138 | catch (InvalidOperationException) |
@@ -143,7 +143,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule | |||
143 | } | 143 | } |
144 | 144 | ||
145 | private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) | 145 | private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) |
146 | { | 146 | { |
147 | try | 147 | try |
148 | { | 148 | { |
149 | ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); | 149 | ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); |
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index ca0b7ad..a49e71e 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | |||
@@ -54,7 +54,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
54 | public UUID PrincipalID; | 54 | public UUID PrincipalID; |
55 | public FriendInfo[] Friends; | 55 | public FriendInfo[] Friends; |
56 | public int Refcount; | 56 | public int Refcount; |
57 | public UUID RegionID; | ||
58 | 57 | ||
59 | public bool IsFriend(string friend) | 58 | public bool IsFriend(string friend) |
60 | { | 59 | { |
@@ -68,6 +67,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
68 | } | 67 | } |
69 | } | 68 | } |
70 | 69 | ||
70 | private static readonly FriendInfo[] EMPTY_FRIENDS = new FriendInfo[0]; | ||
71 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 71 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
72 | 72 | ||
73 | protected List<Scene> m_Scenes = new List<Scene>(); | 73 | protected List<Scene> m_Scenes = new List<Scene>(); |
@@ -79,7 +79,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
79 | protected Dictionary<UUID, UserFriendData> m_Friends = | 79 | protected Dictionary<UUID, UserFriendData> m_Friends = |
80 | new Dictionary<UUID, UserFriendData>(); | 80 | new Dictionary<UUID, UserFriendData>(); |
81 | 81 | ||
82 | protected List<UUID> m_NeedsListOfFriends = new List<UUID>(); | 82 | protected HashSet<UUID> m_NeedsListOfFriends = new HashSet<UUID>(); |
83 | 83 | ||
84 | protected IPresenceService PresenceService | 84 | protected IPresenceService PresenceService |
85 | { | 85 | { |
@@ -146,7 +146,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
146 | // Instantiate the request handler | 146 | // Instantiate the request handler |
147 | IHttpServer server = MainServer.GetHttpServer((uint)mPort); | 147 | IHttpServer server = MainServer.GetHttpServer((uint)mPort); |
148 | server.AddStreamHandler(new FriendsRequestHandler(this)); | 148 | server.AddStreamHandler(new FriendsRequestHandler(this)); |
149 | |||
150 | } | 149 | } |
151 | 150 | ||
152 | if (m_FriendsService == null) | 151 | if (m_FriendsService == null) |
@@ -173,7 +172,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
173 | scene.EventManager.OnNewClient += OnNewClient; | 172 | scene.EventManager.OnNewClient += OnNewClient; |
174 | scene.EventManager.OnClientClosed += OnClientClosed; | 173 | scene.EventManager.OnClientClosed += OnClientClosed; |
175 | scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; | 174 | scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; |
176 | scene.EventManager.OnMakeChildAgent += OnMakeChildAgent; | ||
177 | scene.EventManager.OnClientLogin += OnClientLogin; | 175 | scene.EventManager.OnClientLogin += OnClientLogin; |
178 | } | 176 | } |
179 | 177 | ||
@@ -198,17 +196,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
198 | 196 | ||
199 | public uint GetFriendPerms(UUID principalID, UUID friendID) | 197 | public uint GetFriendPerms(UUID principalID, UUID friendID) |
200 | { | 198 | { |
201 | if (!m_Friends.ContainsKey(principalID)) | 199 | FriendInfo[] friends = GetFriends(principalID); |
202 | return 0; | 200 | foreach (FriendInfo fi in friends) |
203 | |||
204 | UserFriendData data = m_Friends[principalID]; | ||
205 | |||
206 | string searchFor = friendID.ToString(); | ||
207 | foreach (FriendInfo fi in data.Friends) | ||
208 | { | 201 | { |
209 | if (fi.Friend == searchFor) | 202 | if (fi.Friend == friendID.ToString()) |
210 | return (uint)fi.TheirFlags; | 203 | return (uint)fi.TheirFlags; |
211 | } | 204 | } |
205 | |||
212 | return 0; | 206 | return 0; |
213 | } | 207 | } |
214 | 208 | ||
@@ -218,73 +212,59 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
218 | client.OnApproveFriendRequest += OnApproveFriendRequest; | 212 | client.OnApproveFriendRequest += OnApproveFriendRequest; |
219 | client.OnDenyFriendRequest += OnDenyFriendRequest; | 213 | client.OnDenyFriendRequest += OnDenyFriendRequest; |
220 | client.OnTerminateFriendship += OnTerminateFriendship; | 214 | client.OnTerminateFriendship += OnTerminateFriendship; |
221 | |||
222 | client.OnGrantUserRights += OnGrantUserRights; | 215 | client.OnGrantUserRights += OnGrantUserRights; |
223 | 216 | ||
224 | lock (m_Friends) | 217 | // Asynchronously fetch the friends list or increment the refcount for the existing |
225 | { | 218 | // friends list |
226 | if (m_Friends.ContainsKey(client.AgentId)) | 219 | Util.FireAndForget( |
220 | delegate(object o) | ||
227 | { | 221 | { |
228 | m_Friends[client.AgentId].Refcount++; | 222 | lock (m_Friends) |
229 | return; | 223 | { |
230 | } | 224 | UserFriendData friendsData; |
231 | 225 | if (m_Friends.TryGetValue(client.AgentId, out friendsData)) | |
232 | UserFriendData newFriends = new UserFriendData(); | 226 | { |
233 | 227 | friendsData.Refcount++; | |
234 | newFriends.PrincipalID = client.AgentId; | 228 | } |
235 | newFriends.Friends = m_FriendsService.GetFriends(client.AgentId); | 229 | else |
236 | newFriends.Refcount = 1; | 230 | { |
237 | newFriends.RegionID = UUID.Zero; | 231 | friendsData = new UserFriendData(); |
232 | friendsData.PrincipalID = client.AgentId; | ||
233 | friendsData.Friends = FriendsService.GetFriends(client.AgentId); | ||
234 | friendsData.Refcount = 1; | ||
238 | 235 | ||
239 | m_Friends.Add(client.AgentId, newFriends); | 236 | m_Friends[client.AgentId] = friendsData; |
240 | } | 237 | } |
241 | 238 | } | |
239 | } | ||
240 | ); | ||
242 | } | 241 | } |
243 | 242 | ||
244 | private void OnClientClosed(UUID agentID, Scene scene) | 243 | private void OnClientClosed(UUID agentID, Scene scene) |
245 | { | 244 | { |
246 | ScenePresence sp = scene.GetScenePresence(agentID); | 245 | ScenePresence sp = scene.GetScenePresence(agentID); |
247 | if (sp != null && !sp.IsChildAgent) | 246 | if (sp != null && !sp.IsChildAgent) |
247 | { | ||
248 | // do this for root agents closing out | 248 | // do this for root agents closing out |
249 | StatusChange(agentID, false); | 249 | StatusChange(agentID, false); |
250 | } | ||
250 | 251 | ||
251 | lock (m_Friends) | 252 | lock (m_Friends) |
252 | if (m_Friends.ContainsKey(agentID)) | 253 | { |
254 | UserFriendData friendsData; | ||
255 | if (m_Friends.TryGetValue(agentID, out friendsData)) | ||
253 | { | 256 | { |
254 | if (m_Friends[agentID].Refcount == 1) | 257 | friendsData.Refcount--; |
258 | if (friendsData.Refcount <= 0) | ||
255 | m_Friends.Remove(agentID); | 259 | m_Friends.Remove(agentID); |
256 | else | ||
257 | m_Friends[agentID].Refcount--; | ||
258 | } | 260 | } |
259 | } | ||
260 | |||
261 | private void OnMakeRootAgent(ScenePresence sp) | ||
262 | { | ||
263 | UUID agentID = sp.ControllingClient.AgentId; | ||
264 | |||
265 | if (m_Friends.ContainsKey(agentID)) | ||
266 | { | ||
267 | // This is probably an overkill, but just | ||
268 | // to make sure we have the latest and greatest | ||
269 | // friends list -- always pull OnMakeRoot | ||
270 | m_Friends[agentID].Friends = | ||
271 | m_FriendsService.GetFriends(agentID); | ||
272 | |||
273 | m_Friends[agentID].RegionID = | ||
274 | sp.ControllingClient.Scene.RegionInfo.RegionID; | ||
275 | } | 261 | } |
276 | } | 262 | } |
277 | 263 | ||
278 | 264 | private void OnMakeRootAgent(ScenePresence sp) | |
279 | private void OnMakeChildAgent(ScenePresence sp) | ||
280 | { | 265 | { |
281 | UUID agentID = sp.ControllingClient.AgentId; | 266 | UUID agentID = sp.ControllingClient.AgentId; |
282 | 267 | UpdateFriendsCache(agentID); | |
283 | if (m_Friends.ContainsKey(agentID)) | ||
284 | { | ||
285 | if (m_Friends[agentID].RegionID == sp.ControllingClient.Scene.RegionInfo.RegionID) | ||
286 | m_Friends[agentID].RegionID = UUID.Zero; | ||
287 | } | ||
288 | } | 268 | } |
289 | 269 | ||
290 | private void OnClientLogin(IClientAPI client) | 270 | private void OnClientLogin(IClientAPI client) |
@@ -296,75 +276,56 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
296 | 276 | ||
297 | // Register that we need to send the list of online friends to this user | 277 | // Register that we need to send the list of online friends to this user |
298 | lock (m_NeedsListOfFriends) | 278 | lock (m_NeedsListOfFriends) |
299 | if (!m_NeedsListOfFriends.Contains(agentID)) | 279 | m_NeedsListOfFriends.Add(agentID); |
300 | { | ||
301 | m_NeedsListOfFriends.Add(agentID); | ||
302 | } | ||
303 | } | 280 | } |
304 | 281 | ||
305 | public void SendFriendsOnlineIfNeeded(IClientAPI client) | 282 | public void SendFriendsOnlineIfNeeded(IClientAPI client) |
306 | { | 283 | { |
307 | UUID agentID = client.AgentId; | 284 | UUID agentID = client.AgentId; |
308 | if (m_NeedsListOfFriends.Contains(agentID)) | 285 | |
286 | // Check if the online friends list is needed | ||
287 | lock (m_NeedsListOfFriends) | ||
309 | { | 288 | { |
310 | if (!m_Friends.ContainsKey(agentID)) | 289 | if (!m_NeedsListOfFriends.Remove(agentID)) |
311 | { | ||
312 | m_log.DebugFormat("[FRIENDS MODULE]: agent {0} not found in local cache", agentID); | ||
313 | return; | 290 | return; |
314 | } | 291 | } |
315 | |||
316 | // | ||
317 | // Send the friends online | ||
318 | // | ||
319 | List<UUID> online = GetOnlineFriends(agentID); | ||
320 | if (online.Count > 0) | ||
321 | { | ||
322 | m_log.DebugFormat("[FRIENDS MODULE]: User {0} in region {1} has {2} friends online", client.AgentId, client.Scene.RegionInfo.RegionName, online.Count); | ||
323 | client.SendAgentOnline(online.ToArray()); | ||
324 | } | ||
325 | |||
326 | // | ||
327 | // Send outstanding friendship offers | ||
328 | // | ||
329 | if (m_Friends.ContainsKey(agentID)) | ||
330 | { | ||
331 | List<string> outstanding = new List<string>(); | ||
332 | 292 | ||
333 | foreach (FriendInfo fi in m_Friends[agentID].Friends) | 293 | // Send the friends online |
334 | if (fi.TheirFlags == -1) | 294 | List<UUID> online = GetOnlineFriends(agentID); |
335 | outstanding.Add(fi.Friend); | 295 | if (online.Count > 0) |
296 | { | ||
297 | m_log.DebugFormat("[FRIENDS MODULE]: User {0} in region {1} has {2} friends online", client.AgentId, client.Scene.RegionInfo.RegionName, online.Count); | ||
298 | client.SendAgentOnline(online.ToArray()); | ||
299 | } | ||
336 | 300 | ||
337 | GridInstantMessage im = new GridInstantMessage(client.Scene, UUID.Zero, "", agentID, (byte)InstantMessageDialog.FriendshipOffered, "Will you be my friend?", true, Vector3.Zero); | 301 | // Send outstanding friendship offers |
338 | foreach (string fid in outstanding) | 302 | List<string> outstanding = new List<string>(); |
339 | { | 303 | FriendInfo[] friends = GetFriends(agentID); |
340 | try | 304 | foreach (FriendInfo fi in friends) |
341 | { | 305 | { |
342 | im.fromAgentID = new Guid(fid); | 306 | if (fi.TheirFlags == -1) |
343 | } | 307 | outstanding.Add(fi.Friend); |
344 | catch | 308 | } |
345 | { | ||
346 | continue; | ||
347 | } | ||
348 | 309 | ||
349 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, new UUID(im.fromAgentID)); | 310 | GridInstantMessage im = new GridInstantMessage(client.Scene, UUID.Zero, String.Empty, agentID, (byte)InstantMessageDialog.FriendshipOffered, |
350 | im.fromAgentName = account.FirstName + " " + account.LastName; | 311 | "Will you be my friend?", true, Vector3.Zero); |
351 | 312 | ||
352 | PresenceInfo presence = null; | 313 | foreach (string fid in outstanding) |
353 | PresenceInfo[] presences = PresenceService.GetAgents(new string[] { fid }); | 314 | { |
354 | if (presences != null && presences.Length > 0) | 315 | UUID fromAgentID; |
355 | presence = presences[0]; | 316 | if (!UUID.TryParse(fid, out fromAgentID)) |
356 | if (presence != null) | 317 | continue; |
357 | im.offline = 0; | ||
358 | 318 | ||
359 | im.imSessionID = im.fromAgentID; | 319 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, fromAgentID); |
320 | PresenceInfo presence = PresenceService.GetAgent(fromAgentID); | ||
360 | 321 | ||
361 | // Finally | 322 | im.fromAgentID = fromAgentID.Guid; |
362 | LocalFriendshipOffered(agentID, im); | 323 | im.fromAgentName = account.FirstName + " " + account.LastName; |
363 | } | 324 | im.offline = (byte)((presence == null) ? 1 : 0); |
364 | } | 325 | im.imSessionID = im.fromAgentID; |
365 | 326 | ||
366 | lock (m_NeedsListOfFriends) | 327 | // Finally |
367 | m_NeedsListOfFriends.Remove(agentID); | 328 | LocalFriendshipOffered(agentID, im); |
368 | } | 329 | } |
369 | } | 330 | } |
370 | 331 | ||
@@ -373,44 +334,46 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
373 | List<string> friendList = new List<string>(); | 334 | List<string> friendList = new List<string>(); |
374 | List<UUID> online = new List<UUID>(); | 335 | List<UUID> online = new List<UUID>(); |
375 | 336 | ||
376 | foreach (FriendInfo fi in m_Friends[userID].Friends) | 337 | FriendInfo[] friends = GetFriends(userID); |
338 | foreach (FriendInfo fi in friends) | ||
377 | { | 339 | { |
378 | if (((fi.TheirFlags & 1) != 0) && (fi.TheirFlags != -1)) | 340 | if (((fi.TheirFlags & 1) != 0) && (fi.TheirFlags != -1)) |
379 | friendList.Add(fi.Friend); | 341 | friendList.Add(fi.Friend); |
380 | } | 342 | } |
381 | 343 | ||
382 | if (friendList.Count == 0) | 344 | if (friendList.Count > 0) |
383 | // no friends whatsoever | 345 | { |
384 | return online; | 346 | PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray()); |
385 | 347 | foreach (PresenceInfo pi in presence) | |
386 | PresenceInfo[] presence = PresenceService.GetAgents(friendList.ToArray()); | 348 | { |
387 | 349 | UUID presenceID; | |
388 | foreach (PresenceInfo pi in presence) | 350 | if (UUID.TryParse(pi.UserID, out presenceID)) |
389 | online.Add(new UUID(pi.UserID)); | 351 | online.Add(presenceID); |
390 | //m_log.DebugFormat("[XXX] {0} friend online {1}", userID, pi.UserID); | 352 | } |
353 | } | ||
391 | 354 | ||
392 | return online; | 355 | return online; |
393 | } | 356 | } |
394 | 357 | ||
395 | // | 358 | /// <summary> |
396 | // Find the client for a ID | 359 | /// Find the client for a ID |
397 | // | 360 | /// </summary> |
398 | public IClientAPI LocateClientObject(UUID agentID) | 361 | public IClientAPI LocateClientObject(UUID agentID) |
399 | { | 362 | { |
400 | Scene scene = GetClientScene(agentID); | 363 | Scene scene = GetClientScene(agentID); |
401 | if (scene == null) | 364 | if (scene != null) |
402 | return null; | 365 | { |
403 | 366 | ScenePresence presence = scene.GetScenePresence(agentID); | |
404 | ScenePresence presence = scene.GetScenePresence(agentID); | 367 | if (presence != null) |
405 | if (presence == null) | 368 | return presence.ControllingClient; |
406 | return null; | 369 | } |
407 | 370 | ||
408 | return presence.ControllingClient; | 371 | return null; |
409 | } | 372 | } |
410 | 373 | ||
411 | // | 374 | /// <summary> |
412 | // Find the scene for an agent | 375 | /// Find the scene for an agent |
413 | // | 376 | /// </summary> |
414 | private Scene GetClientScene(UUID agentId) | 377 | private Scene GetClientScene(UUID agentId) |
415 | { | 378 | { |
416 | lock (m_Scenes) | 379 | lock (m_Scenes) |
@@ -418,13 +381,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
418 | foreach (Scene scene in m_Scenes) | 381 | foreach (Scene scene in m_Scenes) |
419 | { | 382 | { |
420 | ScenePresence presence = scene.GetScenePresence(agentId); | 383 | ScenePresence presence = scene.GetScenePresence(agentId); |
421 | if (presence != null) | 384 | if (presence != null && !presence.IsChildAgent) |
422 | { | 385 | return scene; |
423 | if (!presence.IsChildAgent) | ||
424 | return scene; | ||
425 | } | ||
426 | } | 386 | } |
427 | } | 387 | } |
388 | |||
428 | return null; | 389 | return null; |
429 | } | 390 | } |
430 | 391 | ||
@@ -435,35 +396,33 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
435 | /// <param name="online"></param> | 396 | /// <param name="online"></param> |
436 | private void StatusChange(UUID agentID, bool online) | 397 | private void StatusChange(UUID agentID, bool online) |
437 | { | 398 | { |
438 | //m_log.DebugFormat("[FRIENDS]: StatusChange {0}", online); | 399 | FriendInfo[] friends = GetFriends(agentID); |
439 | if (m_Friends.ContainsKey(agentID)) | 400 | if (friends.Length > 0) |
440 | { | 401 | { |
441 | //m_log.DebugFormat("[FRIENDS]: # of friends: {0}", m_Friends[agentID].Friends.Length); | ||
442 | List<FriendInfo> friendList = new List<FriendInfo>(); | 402 | List<FriendInfo> friendList = new List<FriendInfo>(); |
443 | foreach (FriendInfo fi in m_Friends[agentID].Friends) | 403 | foreach (FriendInfo fi in friends) |
444 | { | 404 | { |
445 | if (((fi.MyFlags & 1) != 0) && (fi.TheirFlags != -1)) | 405 | if (((fi.MyFlags & 1) != 0) && (fi.TheirFlags != -1)) |
446 | friendList.Add(fi); | 406 | friendList.Add(fi); |
447 | } | 407 | } |
448 | 408 | ||
449 | Util.FireAndForget(delegate | 409 | Util.FireAndForget( |
450 | { | 410 | delegate |
451 | foreach (FriendInfo fi in friendList) | ||
452 | { | 411 | { |
453 | //m_log.DebugFormat("[FRIENDS]: Notifying {0}", fi.PrincipalID); | 412 | foreach (FriendInfo fi in friendList) |
454 | // Notify about this user status | 413 | { |
455 | StatusNotify(fi, agentID, online); | 414 | //m_log.DebugFormat("[FRIENDS]: Notifying {0}", fi.PrincipalID); |
415 | // Notify about this user status | ||
416 | StatusNotify(fi, agentID, online); | ||
417 | } | ||
456 | } | 418 | } |
457 | }); | 419 | ); |
458 | } | 420 | } |
459 | else | ||
460 | m_log.WarnFormat("[FRIENDS]: {0} not found in cache", agentID); | ||
461 | } | 421 | } |
462 | 422 | ||
463 | private void StatusNotify(FriendInfo friend, UUID userID, bool online) | 423 | private void StatusNotify(FriendInfo friend, UUID userID, bool online) |
464 | { | 424 | { |
465 | UUID friendID = UUID.Zero; | 425 | UUID friendID; |
466 | |||
467 | if (UUID.TryParse(friend.Friend, out friendID)) | 426 | if (UUID.TryParse(friend.Friend, out friendID)) |
468 | { | 427 | { |
469 | // Try local | 428 | // Try local |
@@ -471,35 +430,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
471 | return; | 430 | return; |
472 | 431 | ||
473 | // The friend is not here [as root]. Let's forward. | 432 | // The friend is not here [as root]. Let's forward. |
474 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 433 | PresenceInfo friendSession = PresenceService.GetAgent(friendID); |
475 | if (friendSessions != null && friendSessions.Length > 0) | 434 | if (friendSession != null && friendSession.RegionID != UUID.Zero) // let's guard against sessions-gone-bad with the RegionID check |
476 | { | 435 | { |
477 | PresenceInfo friendSession = null; | 436 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); |
478 | foreach (PresenceInfo pinfo in friendSessions) | 437 | //m_log.DebugFormat("[FRIENDS]: Remote Notify to region {0}", region.RegionName); |
479 | if (pinfo.RegionID != UUID.Zero) // let's guard against sessions-gone-bad | 438 | m_FriendsSimConnector.StatusNotify(region, userID, friendID, online); |
480 | { | ||
481 | friendSession = pinfo; | ||
482 | break; | ||
483 | } | ||
484 | |||
485 | if (friendSession != null) | ||
486 | { | ||
487 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
488 | //m_log.DebugFormat("[FRIENDS]: Remote Notify to region {0}", region.RegionName); | ||
489 | m_FriendsSimConnector.StatusNotify(region, userID, friendID, online); | ||
490 | } | ||
491 | } | 439 | } |
492 | |||
493 | // Friend is not online. Ignore. | ||
494 | } | 440 | } |
495 | else | 441 | else |
442 | { | ||
496 | m_log.WarnFormat("[FRIENDS]: Error parsing friend ID {0}", friend.Friend); | 443 | m_log.WarnFormat("[FRIENDS]: Error parsing friend ID {0}", friend.Friend); |
444 | } | ||
497 | } | 445 | } |
498 | 446 | ||
499 | private void OnInstantMessage(IClientAPI client, GridInstantMessage im) | 447 | private void OnInstantMessage(IClientAPI client, GridInstantMessage im) |
500 | { | 448 | { |
501 | if (im.dialog == (byte)OpenMetaverse.InstantMessageDialog.FriendshipOffered) | 449 | if ((InstantMessageDialog)im.dialog == InstantMessageDialog.FriendshipOffered) |
502 | { | 450 | { |
503 | // we got a friendship offer | 451 | // we got a friendship offer |
504 | UUID principalID = new UUID(im.fromAgentID); | 452 | UUID principalID = new UUID(im.fromAgentID); |
505 | UUID friendID = new UUID(im.toAgentID); | 453 | UUID friendID = new UUID(im.toAgentID); |
@@ -529,15 +477,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
529 | return; | 477 | return; |
530 | 478 | ||
531 | // The prospective friend is not here [as root]. Let's forward. | 479 | // The prospective friend is not here [as root]. Let's forward. |
532 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 480 | PresenceInfo friendSession = PresenceService.GetAgent(friendID); |
533 | if (friendSessions != null && friendSessions.Length > 0) | 481 | if (friendSession != null) |
534 | { | 482 | { |
535 | PresenceInfo friendSession = friendSessions[0]; | 483 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); |
536 | if (friendSession != null) | 484 | m_FriendsSimConnector.FriendshipOffered(region, agentID, friendID, im.message); |
537 | { | ||
538 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
539 | m_FriendsSimConnector.FriendshipOffered(region, agentID, friendID, im.message); | ||
540 | } | ||
541 | } | 485 | } |
542 | // If the prospective friend is not online, he'll get the message upon login. | 486 | // If the prospective friend is not online, he'll get the message upon login. |
543 | } | 487 | } |
@@ -548,9 +492,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
548 | 492 | ||
549 | FriendsService.StoreFriend(agentID, friendID.ToString(), 1); | 493 | FriendsService.StoreFriend(agentID, friendID.ToString(), 1); |
550 | FriendsService.StoreFriend(friendID, agentID.ToString(), 1); | 494 | FriendsService.StoreFriend(friendID, agentID.ToString(), 1); |
551 | // update the local cache | ||
552 | m_Friends[agentID].Friends = FriendsService.GetFriends(agentID); | ||
553 | 495 | ||
496 | // Update the local cache | ||
497 | UpdateFriendsCache(agentID); | ||
554 | 498 | ||
555 | // | 499 | // |
556 | // Notify the friend | 500 | // Notify the friend |
@@ -564,16 +508,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
564 | } | 508 | } |
565 | 509 | ||
566 | // The friend is not here | 510 | // The friend is not here |
567 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 511 | PresenceInfo friendSession = PresenceService.GetAgent(friendID); |
568 | if (friendSessions != null && friendSessions.Length > 0) | 512 | if (friendSession != null) |
569 | { | 513 | { |
570 | PresenceInfo friendSession = friendSessions[0]; | 514 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); |
571 | if (friendSession != null) | 515 | m_FriendsSimConnector.FriendshipApproved(region, agentID, client.Name, friendID); |
572 | { | 516 | client.SendAgentOnline(new UUID[] { friendID }); |
573 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
574 | m_FriendsSimConnector.FriendshipApproved(region, agentID, client.Name, friendID); | ||
575 | client.SendAgentOnline(new UUID[] { friendID }); | ||
576 | } | ||
577 | } | 517 | } |
578 | } | 518 | } |
579 | 519 | ||
@@ -592,18 +532,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
592 | if (LocalFriendshipDenied(agentID, client.Name, friendID)) | 532 | if (LocalFriendshipDenied(agentID, client.Name, friendID)) |
593 | return; | 533 | return; |
594 | 534 | ||
595 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 535 | PresenceInfo friendSession = PresenceService.GetAgent(friendID); |
596 | if (friendSessions != null && friendSessions.Length > 0) | 536 | if (friendSession != null) |
597 | { | 537 | { |
598 | PresenceInfo friendSession = friendSessions[0]; | 538 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); |
599 | if (friendSession != null) | 539 | if (region != null) |
600 | { | 540 | m_FriendsSimConnector.FriendshipDenied(region, agentID, client.Name, friendID); |
601 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | 541 | else |
602 | if (region != null) | 542 | m_log.WarnFormat("[FRIENDS]: Could not find region {0} in locating {1}", friendSession.RegionID, friendID); |
603 | m_FriendsSimConnector.FriendshipDenied(region, agentID, client.Name, friendID); | ||
604 | else | ||
605 | m_log.WarnFormat("[FRIENDS]: Could not find region {0} in locating {1}", friendSession.RegionID, friendID); | ||
606 | } | ||
607 | } | 543 | } |
608 | } | 544 | } |
609 | 545 | ||
@@ -613,7 +549,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
613 | FriendsService.Delete(exfriendID, agentID.ToString()); | 549 | FriendsService.Delete(exfriendID, agentID.ToString()); |
614 | 550 | ||
615 | // Update local cache | 551 | // Update local cache |
616 | m_Friends[agentID].Friends = FriendsService.GetFriends(agentID); | 552 | UpdateFriendsCache(agentID); |
617 | 553 | ||
618 | client.SendTerminateFriend(exfriendID); | 554 | client.SendTerminateFriend(exfriendID); |
619 | 555 | ||
@@ -625,30 +561,28 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
625 | if (LocalFriendshipTerminated(exfriendID)) | 561 | if (LocalFriendshipTerminated(exfriendID)) |
626 | return; | 562 | return; |
627 | 563 | ||
628 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { exfriendID.ToString() }); | 564 | PresenceInfo friendSession = PresenceService.GetAgent(exfriendID); |
629 | if (friendSessions != null && friendSessions.Length > 0) | 565 | if (friendSession != null) |
630 | { | 566 | { |
631 | PresenceInfo friendSession = friendSessions[0]; | 567 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); |
632 | if (friendSession != null) | 568 | m_FriendsSimConnector.FriendshipTerminated(region, agentID, exfriendID); |
633 | { | ||
634 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
635 | m_FriendsSimConnector.FriendshipTerminated(region, agentID, exfriendID); | ||
636 | } | ||
637 | } | 569 | } |
638 | } | 570 | } |
639 | 571 | ||
640 | private void OnGrantUserRights(IClientAPI remoteClient, UUID requester, UUID target, int rights) | 572 | private void OnGrantUserRights(IClientAPI remoteClient, UUID requester, UUID target, int rights) |
641 | { | 573 | { |
642 | if (!m_Friends.ContainsKey(remoteClient.AgentId)) | 574 | FriendInfo[] friends = GetFriends(remoteClient.AgentId); |
575 | if (friends.Length == 0) | ||
643 | return; | 576 | return; |
644 | 577 | ||
645 | m_log.DebugFormat("[FRIENDS MODULE]: User {0} changing rights to {1} for friend {2}", requester, rights, target); | 578 | m_log.DebugFormat("[FRIENDS MODULE]: User {0} changing rights to {1} for friend {2}", requester, rights, target); |
646 | // Let's find the friend in this user's friend list | 579 | // Let's find the friend in this user's friend list |
647 | UserFriendData fd = m_Friends[remoteClient.AgentId]; | ||
648 | FriendInfo friend = null; | 580 | FriendInfo friend = null; |
649 | foreach (FriendInfo fi in fd.Friends) | 581 | foreach (FriendInfo fi in friends) |
582 | { | ||
650 | if (fi.Friend == target.ToString()) | 583 | if (fi.Friend == target.ToString()) |
651 | friend = fi; | 584 | friend = fi; |
585 | } | ||
652 | 586 | ||
653 | if (friend != null) // Found it | 587 | if (friend != null) // Found it |
654 | { | 588 | { |
@@ -670,17 +604,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
670 | if (LocalGrantRights(requester, target, myFlags, rights)) | 604 | if (LocalGrantRights(requester, target, myFlags, rights)) |
671 | return; | 605 | return; |
672 | 606 | ||
673 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { target.ToString() }); | 607 | PresenceInfo friendSession = PresenceService.GetAgent(target); |
674 | if (friendSessions != null && friendSessions.Length > 0) | 608 | if (friendSession != null) |
675 | { | 609 | { |
676 | PresenceInfo friendSession = friendSessions[0]; | 610 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); |
677 | if (friendSession != null) | 611 | // TODO: You might want to send the delta to save the lookup |
678 | { | 612 | // on the other end!! |
679 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | 613 | m_FriendsSimConnector.GrantRights(region, requester, target, myFlags, rights); |
680 | // TODO: You might want to send the delta to save the lookup | ||
681 | // on the other end!! | ||
682 | m_FriendsSimConnector.GrantRights(region, requester, target, myFlags, rights); | ||
683 | } | ||
684 | } | 614 | } |
685 | } | 615 | } |
686 | } | 616 | } |
@@ -709,8 +639,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
709 | GridInstantMessage im = new GridInstantMessage(Scene, userID, userName, friendID, | 639 | GridInstantMessage im = new GridInstantMessage(Scene, userID, userName, friendID, |
710 | (byte)OpenMetaverse.InstantMessageDialog.FriendshipAccepted, userID.ToString(), false, Vector3.Zero); | 640 | (byte)OpenMetaverse.InstantMessageDialog.FriendshipAccepted, userID.ToString(), false, Vector3.Zero); |
711 | friendClient.SendInstantMessage(im); | 641 | friendClient.SendInstantMessage(im); |
712 | // update the local cache | 642 | |
713 | m_Friends[friendID].Friends = FriendsService.GetFriends(friendID); | 643 | // Update the local cache |
644 | UpdateFriendsCache(friendID); | ||
645 | |||
714 | // we're done | 646 | // we're done |
715 | return true; | 647 | return true; |
716 | } | 648 | } |
@@ -724,7 +656,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
724 | if (friendClient != null) | 656 | if (friendClient != null) |
725 | { | 657 | { |
726 | // the prospective friend in this sim as root agent | 658 | // the prospective friend in this sim as root agent |
727 | |||
728 | GridInstantMessage im = new GridInstantMessage(Scene, userID, userName, friendID, | 659 | GridInstantMessage im = new GridInstantMessage(Scene, userID, userName, friendID, |
729 | (byte)OpenMetaverse.InstantMessageDialog.FriendshipDeclined, userID.ToString(), false, Vector3.Zero); | 660 | (byte)OpenMetaverse.InstantMessageDialog.FriendshipDeclined, userID.ToString(), false, Vector3.Zero); |
730 | friendClient.SendInstantMessage(im); | 661 | friendClient.SendInstantMessage(im); |
@@ -743,7 +674,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
743 | // the friend in this sim as root agent | 674 | // the friend in this sim as root agent |
744 | friendClient.SendTerminateFriend(exfriendID); | 675 | friendClient.SendTerminateFriend(exfriendID); |
745 | // update local cache | 676 | // update local cache |
746 | m_Friends[exfriendID].Friends = FriendsService.GetFriends(exfriendID); | 677 | UpdateFriendsCache(exfriendID); |
747 | // we're done | 678 | // we're done |
748 | return true; | 679 | return true; |
749 | } | 680 | } |
@@ -772,11 +703,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
772 | 703 | ||
773 | } | 704 | } |
774 | 705 | ||
775 | // update local cache | 706 | // Update local cache |
776 | //m_Friends[friendID].Friends = m_FriendsService.GetFriends(friendID); | 707 | lock (m_Friends) |
777 | foreach (FriendInfo finfo in m_Friends[friendID].Friends) | 708 | { |
778 | if (finfo.Friend == userID.ToString()) | 709 | FriendInfo[] friends = GetFriends(friendID); |
779 | finfo.TheirFlags = rights; | 710 | foreach (FriendInfo finfo in friends) |
711 | { | ||
712 | if (finfo.Friend == userID.ToString()) | ||
713 | finfo.TheirFlags = rights; | ||
714 | } | ||
715 | } | ||
780 | 716 | ||
781 | return true; | 717 | return true; |
782 | } | 718 | } |
@@ -802,7 +738,30 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
802 | 738 | ||
803 | return false; | 739 | return false; |
804 | } | 740 | } |
741 | |||
805 | #endregion | 742 | #endregion |
806 | 743 | ||
744 | private FriendInfo[] GetFriends(UUID agentID) | ||
745 | { | ||
746 | UserFriendData friendsData; | ||
747 | |||
748 | lock (m_Friends) | ||
749 | { | ||
750 | if (m_Friends.TryGetValue(agentID, out friendsData)) | ||
751 | return friendsData.Friends; | ||
752 | } | ||
753 | |||
754 | return EMPTY_FRIENDS; | ||
755 | } | ||
756 | |||
757 | private void UpdateFriendsCache(UUID agentID) | ||
758 | { | ||
759 | lock (m_Friends) | ||
760 | { | ||
761 | UserFriendData friendsData; | ||
762 | if (m_Friends.TryGetValue(agentID, out friendsData)) | ||
763 | friendsData.Friends = FriendsService.GetFriends(agentID); | ||
764 | } | ||
765 | } | ||
807 | } | 766 | } |
808 | } | 767 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs index 4b30b0d..5ec64d5 100644 --- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs | |||
@@ -58,13 +58,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods | |||
58 | public void SubscribeToClientEvents(IClientAPI client) | 58 | public void SubscribeToClientEvents(IClientAPI client) |
59 | { | 59 | { |
60 | client.OnGodKickUser += KickUser; | 60 | client.OnGodKickUser += KickUser; |
61 | client.OnRequestGodlikePowers += RequestGodlikePowers; | 61 | client.OnRequestGodlikePowers += RequestGodlikePowers; |
62 | } | 62 | } |
63 | 63 | ||
64 | public void UnsubscribeFromClientEvents(IClientAPI client) | 64 | public void UnsubscribeFromClientEvents(IClientAPI client) |
65 | { | 65 | { |
66 | client.OnGodKickUser -= KickUser; | 66 | client.OnGodKickUser -= KickUser; |
67 | client.OnRequestGodlikePowers -= RequestGodlikePowers; | 67 | client.OnRequestGodlikePowers -= RequestGodlikePowers; |
68 | } | 68 | } |
69 | 69 | ||
70 | public void RequestGodlikePowers( | 70 | public void RequestGodlikePowers( |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs index a49faec..a6894ff 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs | |||
@@ -138,8 +138,10 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
138 | if (scene.Entities.ContainsKey(toAgentID) && | 138 | if (scene.Entities.ContainsKey(toAgentID) && |
139 | scene.Entities[toAgentID] is ScenePresence) | 139 | scene.Entities[toAgentID] is ScenePresence) |
140 | { | 140 | { |
141 | // m_log.DebugFormat("[INSTANT MESSAGE]: Looking for {0} in {1}", toAgentID.ToString(), scene.RegionInfo.RegionName); | 141 | // m_log.DebugFormat( |
142 | // Local message | 142 | // "[INSTANT MESSAGE]: Looking for root agent {0} in {1}", |
143 | // toAgentID.ToString(), scene.RegionInfo.RegionName); | ||
144 | |||
143 | ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; | 145 | ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; |
144 | if (!user.IsChildAgent) | 146 | if (!user.IsChildAgent) |
145 | { | 147 | { |
@@ -495,9 +497,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
495 | if (lookupAgent) | 497 | if (lookupAgent) |
496 | { | 498 | { |
497 | // Non-cached user agent lookup. | 499 | // Non-cached user agent lookup. |
498 | PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() }); | 500 | upd = PresenceService.GetAgent(toAgentID); |
499 | if (presences != null && presences.Length > 0) | ||
500 | upd = presences[0]; | ||
501 | 501 | ||
502 | if (upd != null) | 502 | if (upd != null) |
503 | { | 503 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 52342ec..c1df827 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | |||
@@ -179,14 +179,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
179 | m_log.DebugFormat( | 179 | m_log.DebugFormat( |
180 | "[INVENTORY ARCHIVER]: Successfully loaded {0} assets with {1} failures", | 180 | "[INVENTORY ARCHIVER]: Successfully loaded {0} assets with {1} failures", |
181 | successfulAssetRestores, failedAssetRestores); | 181 | successfulAssetRestores, failedAssetRestores); |
182 | m_log.InfoFormat("[INVENTORY ARCHIVER]: Successfully loaded {0} items", successfulItemRestores); | 182 | m_log.InfoFormat("[INVENTORY ARCHIVER]: Successfully loaded {0} items", successfulItemRestores); |
183 | 183 | ||
184 | return loadedNodes; | 184 | return loadedNodes; |
185 | } | 185 | } |
186 | finally | 186 | finally |
187 | { | 187 | { |
188 | m_loadStream.Close(); | 188 | m_loadStream.Close(); |
189 | } | 189 | } |
190 | } | 190 | } |
191 | 191 | ||
192 | public void Close() | 192 | public void Close() |
@@ -201,7 +201,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
201 | /// <param name="iarPath">The item archive path to replicate</param> | 201 | /// <param name="iarPath">The item archive path to replicate</param> |
202 | /// <param name="rootDestinationFolder">The root folder for the inventory load</param> | 202 | /// <param name="rootDestinationFolder">The root folder for the inventory load</param> |
203 | /// <param name="resolvedFolders"> | 203 | /// <param name="resolvedFolders"> |
204 | /// The folders that we have resolved so far for a given archive path. | 204 | /// The folders that we have resolved so far for a given archive path. |
205 | /// This method will add more folders if necessary | 205 | /// This method will add more folders if necessary |
206 | /// </param> | 206 | /// </param> |
207 | /// <param name="loadedNodes"> | 207 | /// <param name="loadedNodes"> |
@@ -246,17 +246,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
246 | /// The root folder for the inventory load | 246 | /// The root folder for the inventory load |
247 | /// </param> | 247 | /// </param> |
248 | /// <param name="resolvedFolders"> | 248 | /// <param name="resolvedFolders"> |
249 | /// The folders that we have resolved so far for a given archive path. | 249 | /// The folders that we have resolved so far for a given archive path. |
250 | /// </param> | 250 | /// </param> |
251 | /// <returns> | 251 | /// <returns> |
252 | /// The folder in the user's inventory that matches best the archive path given. If no such folder was found | 252 | /// The folder in the user's inventory that matches best the archive path given. If no such folder was found |
253 | /// then the passed in root destination folder is returned. | 253 | /// then the passed in root destination folder is returned. |
254 | /// </returns> | 254 | /// </returns> |
255 | protected InventoryFolderBase ResolveDestinationFolder( | 255 | protected InventoryFolderBase ResolveDestinationFolder( |
256 | InventoryFolderBase rootDestFolder, | 256 | InventoryFolderBase rootDestFolder, |
257 | ref string archivePath, | 257 | ref string archivePath, |
258 | Dictionary <string, InventoryFolderBase> resolvedFolders) | 258 | Dictionary <string, InventoryFolderBase> resolvedFolders) |
259 | { | 259 | { |
260 | // string originalArchivePath = archivePath; | 260 | // string originalArchivePath = archivePath; |
261 | 261 | ||
262 | while (archivePath.Length > 0) | 262 | while (archivePath.Length > 0) |
@@ -370,7 +370,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
370 | 370 | ||
371 | if (0 == i) | 371 | if (0 == i) |
372 | loadedNodes.Add(destFolder); | 372 | loadedNodes.Add(destFolder); |
373 | } | 373 | } |
374 | } | 374 | } |
375 | 375 | ||
376 | /// <summary> | 376 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index 9908018..bae5a7a 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | |||
@@ -119,7 +119,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
119 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) | 119 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) |
120 | { | 120 | { |
121 | Exception reportedException = null; | 121 | Exception reportedException = null; |
122 | bool succeeded = true; | 122 | bool succeeded = true; |
123 | 123 | ||
124 | try | 124 | try |
125 | { | 125 | { |
@@ -136,7 +136,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
136 | finally | 136 | finally |
137 | { | 137 | { |
138 | m_saveStream.Close(); | 138 | m_saveStream.Close(); |
139 | } | 139 | } |
140 | 140 | ||
141 | m_module.TriggerInventoryArchiveSaved( | 141 | m_module.TriggerInventoryArchiveSaved( |
142 | m_id, succeeded, m_userInfo, m_invPath, m_saveStream, reportedException); | 142 | m_id, succeeded, m_userInfo, m_invPath, m_saveStream, reportedException); |
@@ -270,7 +270,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
270 | { | 270 | { |
271 | // We couldn't find the path indicated | 271 | // We couldn't find the path indicated |
272 | string errorMessage = string.Format("Aborted save. Could not find inventory path {0}", m_invPath); | 272 | string errorMessage = string.Format("Aborted save. Could not find inventory path {0}", m_invPath); |
273 | Exception e = new InventoryArchiverException(errorMessage); | 273 | Exception e = new InventoryArchiverException(errorMessage); |
274 | m_module.TriggerInventoryArchiveSaved(m_id, false, m_userInfo, m_invPath, m_saveStream, e); | 274 | m_module.TriggerInventoryArchiveSaved(m_id, false, m_userInfo, m_invPath, m_saveStream, e); |
275 | throw e; | 275 | throw e; |
276 | } | 276 | } |
@@ -283,7 +283,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
283 | "[INVENTORY ARCHIVER]: Found folder {0} {1} at {2}", | 283 | "[INVENTORY ARCHIVER]: Found folder {0} {1} at {2}", |
284 | inventoryFolder.Name, | 284 | inventoryFolder.Name, |
285 | inventoryFolder.ID, | 285 | inventoryFolder.ID, |
286 | m_invPath == String.Empty ? InventoryFolderImpl.PATH_DELIMITER : m_invPath ); | 286 | m_invPath == String.Empty ? InventoryFolderImpl.PATH_DELIMITER : m_invPath); |
287 | 287 | ||
288 | //recurse through all dirs getting dirs and files | 288 | //recurse through all dirs getting dirs and files |
289 | SaveInvFolder(inventoryFolder, ArchiveConstants.INVENTORY_PATH, !saveFolderContentsOnly); | 289 | SaveInvFolder(inventoryFolder, ArchiveConstants.INVENTORY_PATH, !saveFolderContentsOnly); |
@@ -301,7 +301,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
301 | //SaveUsers(); | 301 | //SaveUsers(); |
302 | 302 | ||
303 | new AssetsRequest( | 303 | new AssetsRequest( |
304 | new AssetsArchiver(m_archiveWriter), m_assetUuids, m_scene.AssetService, ReceivedAllAssets).Execute(); | 304 | new AssetsArchiver(m_archiveWriter), m_assetUuids, m_scene.AssetService, ReceivedAllAssets).Execute(); |
305 | } | 305 | } |
306 | catch (Exception) | 306 | catch (Exception) |
307 | { | 307 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs index e07e2ca..5fd1a7e 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverException.cs | |||
@@ -33,7 +33,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
33 | /// Signals an inventory archiving problem | 33 | /// Signals an inventory archiving problem |
34 | /// </summary> | 34 | /// </summary> |
35 | public class InventoryArchiverException : Exception | 35 | public class InventoryArchiverException : Exception |
36 | { | 36 | { |
37 | public InventoryArchiverException(string message) : base(message) {} | 37 | public InventoryArchiverException(string message) : base(message) {} |
38 | public InventoryArchiverException(string message, Exception e) : base(message, e) {} | 38 | public InventoryArchiverException(string message, Exception e) : base(message, e) {} |
39 | } | 39 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index f03f2a1..2eaca49 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs | |||
@@ -91,12 +91,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
91 | 91 | ||
92 | scene.AddCommand( | 92 | scene.AddCommand( |
93 | this, "load iar", | 93 | this, "load iar", |
94 | "load iar <first> <last> <inventory path> <password> [<IAR path>]", | 94 | "load iar <first> <last> <inventory path> <password> [<IAR path>]", |
95 | //"load iar [--merge] <first> <last> <inventory path> <password> [<IAR path>]", | 95 | //"load iar [--merge] <first> <last> <inventory path> <password> [<IAR path>]", |
96 | "Load user inventory archive (IAR).", | 96 | "Load user inventory archive (IAR).", |
97 | //"--merge is an option which merges the loaded IAR with existing inventory folders where possible, rather than always creating new ones" | 97 | //"--merge is an option which merges the loaded IAR with existing inventory folders where possible, rather than always creating new ones" |
98 | //+ "<first> is user's first name." + Environment.NewLine | 98 | //+ "<first> is user's first name." + Environment.NewLine |
99 | "<first> is user's first name." + Environment.NewLine | 99 | "<first> is user's first name." + Environment.NewLine |
100 | + "<last> is user's last name." + Environment.NewLine | 100 | + "<last> is user's last name." + Environment.NewLine |
101 | + "<inventory path> is the path inside the user's inventory where the IAR should be loaded." + Environment.NewLine | 101 | + "<inventory path> is the path inside the user's inventory where the IAR should be loaded." + Environment.NewLine |
102 | + "<password> is the user's password." + Environment.NewLine | 102 | + "<password> is the user's password." + Environment.NewLine |
@@ -241,7 +241,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
241 | if (CheckPresence(userInfo.PrincipalID)) | 241 | if (CheckPresence(userInfo.PrincipalID)) |
242 | { | 242 | { |
243 | InventoryArchiveReadRequest request; | 243 | InventoryArchiveReadRequest request; |
244 | bool merge = (options.ContainsKey("merge") ? (bool)options["merge"] : false); | 244 | bool merge = (options.ContainsKey("merge") ? (bool)options["merge"] : false); |
245 | 245 | ||
246 | try | 246 | try |
247 | { | 247 | { |
@@ -286,10 +286,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
286 | if (CheckPresence(userInfo.PrincipalID)) | 286 | if (CheckPresence(userInfo.PrincipalID)) |
287 | { | 287 | { |
288 | InventoryArchiveReadRequest request; | 288 | InventoryArchiveReadRequest request; |
289 | bool merge = (options.ContainsKey("merge") ? (bool)options["merge"] : false); | 289 | bool merge = (options.ContainsKey("merge") ? (bool)options["merge"] : false); |
290 | 290 | ||
291 | try | 291 | try |
292 | { | 292 | { |
293 | request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath, merge); | 293 | request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath, merge); |
294 | } | 294 | } |
295 | catch (EntryPointNotFoundException e) | 295 | catch (EntryPointNotFoundException e) |
@@ -325,20 +325,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
325 | protected void HandleLoadInvConsoleCommand(string module, string[] cmdparams) | 325 | protected void HandleLoadInvConsoleCommand(string module, string[] cmdparams) |
326 | { | 326 | { |
327 | try | 327 | try |
328 | { | 328 | { |
329 | m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME."); | 329 | m_log.Info("[INVENTORY ARCHIVER]: PLEASE NOTE THAT THIS FACILITY IS EXPERIMENTAL. BUG REPORTS WELCOME."); |
330 | 330 | ||
331 | Dictionary<string, object> options = new Dictionary<string, object>(); | 331 | Dictionary<string, object> options = new Dictionary<string, object>(); |
332 | OptionSet optionSet = new OptionSet().Add("m|merge", delegate (string v) { options["merge"] = v != null; }); | 332 | OptionSet optionSet = new OptionSet().Add("m|merge", delegate (string v) { options["merge"] = v != null; }); |
333 | 333 | ||
334 | List<string> mainParams = optionSet.Parse(cmdparams); | 334 | List<string> mainParams = optionSet.Parse(cmdparams); |
335 | 335 | ||
336 | if (mainParams.Count < 6) | 336 | if (mainParams.Count < 6) |
337 | { | 337 | { |
338 | m_log.Error( | 338 | m_log.Error( |
339 | "[INVENTORY ARCHIVER]: usage is load iar [--merge] <first name> <last name> <inventory path> <user password> [<load file path>]"); | 339 | "[INVENTORY ARCHIVER]: usage is load iar [--merge] <first name> <last name> <inventory path> <user password> [<load file path>]"); |
340 | return; | 340 | return; |
341 | } | 341 | } |
342 | 342 | ||
343 | string firstName = mainParams[2]; | 343 | string firstName = mainParams[2]; |
344 | string lastName = mainParams[3]; | 344 | string lastName = mainParams[3]; |
@@ -353,7 +353,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
353 | if (DearchiveInventory(firstName, lastName, invPath, pass, loadPath, options)) | 353 | if (DearchiveInventory(firstName, lastName, invPath, pass, loadPath, options)) |
354 | m_log.InfoFormat( | 354 | m_log.InfoFormat( |
355 | "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}", | 355 | "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}", |
356 | loadPath, firstName, lastName); | 356 | loadPath, firstName, lastName); |
357 | } | 357 | } |
358 | catch (InventoryArchiverException e) | 358 | catch (InventoryArchiverException e) |
359 | { | 359 | { |
@@ -390,7 +390,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
390 | "[INVENTORY ARCHIVER]: Saving archive {0} using inventory path {1} for {2} {3}", | 390 | "[INVENTORY ARCHIVER]: Saving archive {0} using inventory path {1} for {2} {3}", |
391 | savePath, invPath, firstName, lastName); | 391 | savePath, invPath, firstName, lastName); |
392 | 392 | ||
393 | ArchiveInventory(id, firstName, lastName, invPath, pass, savePath, new Dictionary<string, object>()); | 393 | ArchiveInventory(id, firstName, lastName, invPath, pass, savePath, new Dictionary<string, object>()); |
394 | } | 394 | } |
395 | catch (InventoryArchiverException e) | 395 | catch (InventoryArchiverException e) |
396 | { | 396 | { |
@@ -398,7 +398,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
398 | } | 398 | } |
399 | 399 | ||
400 | lock (m_pendingConsoleSaves) | 400 | lock (m_pendingConsoleSaves) |
401 | m_pendingConsoleSaves.Add(id); | 401 | m_pendingConsoleSaves.Add(id); |
402 | } | 402 | } |
403 | 403 | ||
404 | private void SaveInvConsoleCommandCompleted( | 404 | private void SaveInvConsoleCommandCompleted( |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs index d66a1d0..938886b2 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs | |||
@@ -58,18 +58,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
58 | /// <summary> | 58 | /// <summary> |
59 | /// Stream of data representing a common IAR that can be reused in load tests. | 59 | /// Stream of data representing a common IAR that can be reused in load tests. |
60 | /// </summary> | 60 | /// </summary> |
61 | protected MemoryStream m_iarStream; | 61 | protected MemoryStream m_iarStream; |
62 | 62 | ||
63 | protected UserAccount m_ua1 | 63 | protected UserAccount m_ua1 |
64 | = new UserAccount { | 64 | = new UserAccount { |
65 | PrincipalID = UUID.Parse("00000000-0000-0000-0000-000000000555"), | 65 | PrincipalID = UUID.Parse("00000000-0000-0000-0000-000000000555"), |
66 | FirstName = "Mr", | 66 | FirstName = "Mr", |
67 | LastName = "Tiddles" }; | 67 | LastName = "Tiddles" }; |
68 | protected UserAccount m_ua2 | 68 | protected UserAccount m_ua2 |
69 | = new UserAccount { | 69 | = new UserAccount { |
70 | PrincipalID = UUID.Parse("00000000-0000-0000-0000-000000000666"), | 70 | PrincipalID = UUID.Parse("00000000-0000-0000-0000-000000000666"), |
71 | FirstName = "Lord", | 71 | FirstName = "Lord", |
72 | LastName = "Lucan" }; | 72 | LastName = "Lucan" }; |
73 | string m_item1Name = "b.lsl"; | 73 | string m_item1Name = "b.lsl"; |
74 | 74 | ||
75 | private void SaveCompleted( | 75 | private void SaveCompleted( |
@@ -86,7 +86,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
86 | } | 86 | } |
87 | 87 | ||
88 | protected void ConstructDefaultIarForTestLoad() | 88 | protected void ConstructDefaultIarForTestLoad() |
89 | { | 89 | { |
90 | string archiveItemName = InventoryArchiveWriteRequest.CreateArchiveItemName(m_item1Name, UUID.Random()); | 90 | string archiveItemName = InventoryArchiveWriteRequest.CreateArchiveItemName(m_item1Name, UUID.Random()); |
91 | 91 | ||
92 | MemoryStream archiveWriteStream = new MemoryStream(); | 92 | MemoryStream archiveWriteStream = new MemoryStream(); |
@@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
104 | string item1FileName | 104 | string item1FileName |
105 | = string.Format("{0}{1}", ArchiveConstants.INVENTORY_PATH, archiveItemName); | 105 | = string.Format("{0}{1}", ArchiveConstants.INVENTORY_PATH, archiveItemName); |
106 | tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); | 106 | tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); |
107 | tar.Close(); | 107 | tar.Close(); |
108 | m_iarStream = new MemoryStream(archiveWriteStream.ToArray()); | 108 | m_iarStream = new MemoryStream(archiveWriteStream.ToArray()); |
109 | } | 109 | } |
110 | 110 | ||
@@ -341,7 +341,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
341 | // Assert.That(gotObject2File, Is.True, "No object2 file in archive"); | 341 | // Assert.That(gotObject2File, Is.True, "No object2 file in archive"); |
342 | 342 | ||
343 | // TODO: Test presence of more files and contents of files. | 343 | // TODO: Test presence of more files and contents of files. |
344 | } | 344 | } |
345 | 345 | ||
346 | /// <summary> | 346 | /// <summary> |
347 | /// Test that things work when the load path specified starts with a slash | 347 | /// Test that things work when the load path specified starts with a slash |
@@ -349,22 +349,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
349 | [Test] | 349 | [Test] |
350 | public void TestLoadIarPathStartsWithSlash() | 350 | public void TestLoadIarPathStartsWithSlash() |
351 | { | 351 | { |
352 | TestHelper.InMethod(); | 352 | TestHelper.InMethod(); |
353 | // log4net.Config.XmlConfigurator.Configure(); | 353 | // log4net.Config.XmlConfigurator.Configure(); |
354 | 354 | ||
355 | SerialiserModule serialiserModule = new SerialiserModule(); | 355 | SerialiserModule serialiserModule = new SerialiserModule(); |
356 | InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); | 356 | InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); |
357 | Scene scene = SceneSetupHelpers.SetupScene("inventory"); | 357 | Scene scene = SceneSetupHelpers.SetupScene("inventory"); |
358 | SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); | 358 | SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); |
359 | 359 | ||
360 | UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "password"); | 360 | UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "password"); |
361 | archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/Objects", "password", m_iarStream); | 361 | archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/Objects", "password", m_iarStream); |
362 | 362 | ||
363 | InventoryItemBase foundItem1 | 363 | InventoryItemBase foundItem1 |
364 | = InventoryArchiveUtils.FindItemByPath( | 364 | = InventoryArchiveUtils.FindItemByPath( |
365 | scene.InventoryService, m_ua1.PrincipalID, "/Objects/" + m_item1Name); | 365 | scene.InventoryService, m_ua1.PrincipalID, "/Objects/" + m_item1Name); |
366 | 366 | ||
367 | Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1 in TestLoadIarFolderStartsWithSlash()"); | 367 | Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1 in TestLoadIarFolderStartsWithSlash()"); |
368 | } | 368 | } |
369 | 369 | ||
370 | /// <summary> | 370 | /// <summary> |
@@ -376,7 +376,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
376 | [Test] | 376 | [Test] |
377 | public void TestLoadIarV0_1ExistingUsers() | 377 | public void TestLoadIarV0_1ExistingUsers() |
378 | { | 378 | { |
379 | TestHelper.InMethod(); | 379 | TestHelper.InMethod(); |
380 | //log4net.Config.XmlConfigurator.Configure(); | 380 | //log4net.Config.XmlConfigurator.Configure(); |
381 | 381 | ||
382 | SerialiserModule serialiserModule = new SerialiserModule(); | 382 | SerialiserModule serialiserModule = new SerialiserModule(); |
@@ -386,9 +386,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
386 | Scene scene = SceneSetupHelpers.SetupScene("inventory"); | 386 | Scene scene = SceneSetupHelpers.SetupScene("inventory"); |
387 | 387 | ||
388 | SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); | 388 | SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); |
389 | 389 | ||
390 | UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "meowfood"); | 390 | UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "meowfood"); |
391 | UserProfileTestUtils.CreateUserWithInventory(scene, m_ua2, "hampshire"); | 391 | UserProfileTestUtils.CreateUserWithInventory(scene, m_ua2, "hampshire"); |
392 | 392 | ||
393 | archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/", "meowfood", m_iarStream); | 393 | archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/", "meowfood", m_iarStream); |
394 | 394 | ||
@@ -450,7 +450,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
450 | string userFirstName = "Jock"; | 450 | string userFirstName = "Jock"; |
451 | string userLastName = "Stirrup"; | 451 | string userLastName = "Stirrup"; |
452 | UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020"); | 452 | UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020"); |
453 | UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, "meowfood"); | 453 | UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, "meowfood"); |
454 | 454 | ||
455 | // Create asset | 455 | // Create asset |
456 | SceneObjectGroup object1; | 456 | SceneObjectGroup object1; |
@@ -524,7 +524,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
524 | [Test] | 524 | [Test] |
525 | public void TestLoadIarV0_1AbsentUsers() | 525 | public void TestLoadIarV0_1AbsentUsers() |
526 | { | 526 | { |
527 | TestHelper.InMethod(); | 527 | TestHelper.InMethod(); |
528 | //log4net.Config.XmlConfigurator.Configure(); | 528 | //log4net.Config.XmlConfigurator.Configure(); |
529 | 529 | ||
530 | string userFirstName = "Charlie"; | 530 | string userFirstName = "Charlie"; |
@@ -562,7 +562,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
562 | Scene scene = SceneSetupHelpers.SetupScene("inventory"); | 562 | Scene scene = SceneSetupHelpers.SetupScene("inventory"); |
563 | 563 | ||
564 | SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); | 564 | SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule); |
565 | UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userUuid, "meowfood"); | 565 | UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userUuid, "meowfood"); |
566 | 566 | ||
567 | archiverModule.DearchiveInventory(userFirstName, userLastName, "/", "meowfood", archiveReadStream); | 567 | archiverModule.DearchiveInventory(userFirstName, userLastName, "/", "meowfood", archiveReadStream); |
568 | 568 | ||
@@ -680,8 +680,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
680 | string folder2aArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2aName, UUID.Random()); | 680 | string folder2aArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2aName, UUID.Random()); |
681 | string folder2bArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2bName, UUID.Random()); | 681 | string folder2bArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2bName, UUID.Random()); |
682 | 682 | ||
683 | string iarPath1 = string.Join("", new string[] { folder1ArchiveName, folder2aArchiveName }); | 683 | string iarPath1 = string.Join("", new string[] { folder1ArchiveName, folder2aArchiveName }); |
684 | string iarPath2 = string.Join("", new string[] { folder1ArchiveName, folder2bArchiveName }); | 684 | string iarPath2 = string.Join("", new string[] { folder1ArchiveName, folder2bArchiveName }); |
685 | 685 | ||
686 | { | 686 | { |
687 | // Test replication of path1 | 687 | // Test replication of path1 |
@@ -694,7 +694,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
694 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1Name); | 694 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1Name); |
695 | Assert.That(folder1Candidates.Count, Is.EqualTo(1)); | 695 | Assert.That(folder1Candidates.Count, Is.EqualTo(1)); |
696 | 696 | ||
697 | InventoryFolderBase folder1 = folder1Candidates[0]; | 697 | InventoryFolderBase folder1 = folder1Candidates[0]; |
698 | List<InventoryFolderBase> folder2aCandidates | 698 | List<InventoryFolderBase> folder2aCandidates |
699 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName); | 699 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName); |
700 | Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); | 700 | Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); |
@@ -715,11 +715,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
715 | 715 | ||
716 | List<InventoryFolderBase> folder2aCandidates | 716 | List<InventoryFolderBase> folder2aCandidates |
717 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName); | 717 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName); |
718 | Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); | 718 | Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); |
719 | 719 | ||
720 | List<InventoryFolderBase> folder2bCandidates | 720 | List<InventoryFolderBase> folder2bCandidates |
721 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2bName); | 721 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2bName); |
722 | Assert.That(folder2bCandidates.Count, Is.EqualTo(1)); | 722 | Assert.That(folder2bCandidates.Count, Is.EqualTo(1)); |
723 | } | 723 | } |
724 | } | 724 | } |
725 | 725 | ||
@@ -741,7 +741,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
741 | 741 | ||
742 | InventoryFolderBase folder1 | 742 | InventoryFolderBase folder1 |
743 | = UserInventoryTestUtils.CreateInventoryFolder( | 743 | = UserInventoryTestUtils.CreateInventoryFolder( |
744 | scene.InventoryService, ua1.PrincipalID, folder1ExistingName); | 744 | scene.InventoryService, ua1.PrincipalID, folder1ExistingName); |
745 | 745 | ||
746 | string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); | 746 | string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); |
747 | string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); | 747 | string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); |
@@ -772,7 +772,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
772 | List<InventoryFolderBase> folder2PostCandidates | 772 | List<InventoryFolderBase> folder2PostCandidates |
773 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b"); | 773 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b"); |
774 | Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); | 774 | Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); |
775 | } | 775 | } |
776 | 776 | ||
777 | /// <summary> | 777 | /// <summary> |
778 | /// Test replication of a partly existing archive path to the user's inventory. This should create | 778 | /// Test replication of a partly existing archive path to the user's inventory. This should create |
@@ -792,7 +792,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
792 | 792 | ||
793 | InventoryFolderBase folder1 | 793 | InventoryFolderBase folder1 |
794 | = UserInventoryTestUtils.CreateInventoryFolder( | 794 | = UserInventoryTestUtils.CreateInventoryFolder( |
795 | scene.InventoryService, ua1.PrincipalID, folder1ExistingName); | 795 | scene.InventoryService, ua1.PrincipalID, folder1ExistingName); |
796 | 796 | ||
797 | string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); | 797 | string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); |
798 | string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); | 798 | string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); |
@@ -812,6 +812,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
812 | List<InventoryFolderBase> folder2PostCandidates | 812 | List<InventoryFolderBase> folder2PostCandidates |
813 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1PostCandidates[0], "b"); | 813 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1PostCandidates[0], "b"); |
814 | Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); | 814 | Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); |
815 | } | 815 | } |
816 | } | 816 | } |
817 | } \ No newline at end of file | 817 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs index 35b70de..05fe3ee 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs | |||
@@ -138,7 +138,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
138 | { | 138 | { |
139 | if (!queues.ContainsKey(agentId)) | 139 | if (!queues.ContainsKey(agentId)) |
140 | { | 140 | { |
141 | /* | 141 | /* |
142 | m_log.DebugFormat( | 142 | m_log.DebugFormat( |
143 | "[EVENTQUEUE]: Adding new queue for agent {0} in region {1}", | 143 | "[EVENTQUEUE]: Adding new queue for agent {0} in region {1}", |
144 | agentId, m_scene.RegionInfo.RegionName); | 144 | agentId, m_scene.RegionInfo.RegionName); |
@@ -701,7 +701,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
701 | 701 | ||
702 | public void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID) | 702 | public void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID) |
703 | { | 703 | { |
704 | OSD item = EventQueueHelper.ParcelProperties(parcelPropertiesMessage); | 704 | OSD item = EventQueueHelper.ParcelProperties(parcelPropertiesMessage); |
705 | Enqueue(item, avatarID); | 705 | Enqueue(item, avatarID); |
706 | } | 706 | } |
707 | 707 | ||
diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs index b62df18..0d7d16a 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs | |||
@@ -55,7 +55,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
55 | } | 55 | } |
56 | 56 | ||
57 | // private static byte[] uintToByteArray(uint uIntValue) | 57 | // private static byte[] uintToByteArray(uint uIntValue) |
58 | // { | 58 | // { |
59 | // byte[] result = new byte[4]; | 59 | // byte[] result = new byte[4]; |
60 | // Utils.UIntToBytesBig(uIntValue, result, 0); | 60 | // Utils.UIntToBytesBig(uIntValue, result, 0); |
61 | // return result; | 61 | // return result; |
@@ -386,14 +386,14 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
386 | return placesReply; | 386 | return placesReply; |
387 | } | 387 | } |
388 | 388 | ||
389 | public static OSD ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage) | 389 | public static OSD ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage) |
390 | { | 390 | { |
391 | OSDMap message = new OSDMap(); | 391 | OSDMap message = new OSDMap(); |
392 | message.Add("message", OSD.FromString("ParcelProperties")); | 392 | message.Add("message", OSD.FromString("ParcelProperties")); |
393 | OSD message_body = parcelPropertiesMessage.Serialize(); | 393 | OSD message_body = parcelPropertiesMessage.Serialize(); |
394 | message.Add("body", message_body); | 394 | message.Add("body", message_body); |
395 | return message; | 395 | return message; |
396 | } | 396 | } |
397 | 397 | ||
398 | } | 398 | } |
399 | } | 399 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 37f6ea0..a2ba498 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -629,7 +629,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
629 | rootPart.Name = item.Name; | 629 | rootPart.Name = item.Name; |
630 | rootPart.Description = item.Description; | 630 | rootPart.Description = item.Description; |
631 | 631 | ||
632 | List<SceneObjectPart> partList = null; | 632 | List<SceneObjectPart> partList = null; |
633 | lock (group.Children) | 633 | lock (group.Children) |
634 | partList = new List<SceneObjectPart>(group.Children.Values); | 634 | partList = new List<SceneObjectPart>(group.Children.Values); |
635 | 635 | ||
diff --git a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs index b75a700..a75ff62 100644 --- a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs +++ b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs | |||
@@ -49,8 +49,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
49 | protected bool m_collectStats; | 49 | protected bool m_collectStats; |
50 | protected Scene m_scene = null; | 50 | protected Scene m_scene = null; |
51 | 51 | ||
52 | public string Name { get { return "Binary Statistics Logging Module"; } } | 52 | public string Name { get { return "Binary Statistics Logging Module"; } } |
53 | public Type ReplaceableInterface { get { return null; } } | 53 | public Type ReplaceableInterface { get { return null; } } |
54 | 54 | ||
55 | public void Initialise(IConfigSource source) | 55 | public void Initialise(IConfigSource source) |
56 | { | 56 | { |
@@ -79,7 +79,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
79 | catch | 79 | catch |
80 | { | 80 | { |
81 | // if it doesn't work, we don't collect anything | 81 | // if it doesn't work, we don't collect anything |
82 | } | 82 | } |
83 | } | 83 | } |
84 | 84 | ||
85 | public void AddRegion(Scene scene) | 85 | public void AddRegion(Scene scene) |
@@ -94,12 +94,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
94 | public void RegionLoaded(Scene scene) | 94 | public void RegionLoaded(Scene scene) |
95 | { | 95 | { |
96 | if (m_collectStats) | 96 | if (m_collectStats) |
97 | m_scene.StatsReporter.OnSendStatsResult += LogSimStats; | 97 | m_scene.StatsReporter.OnSendStatsResult += LogSimStats; |
98 | } | 98 | } |
99 | 99 | ||
100 | public void Close() | 100 | public void Close() |
101 | { | 101 | { |
102 | } | 102 | } |
103 | 103 | ||
104 | public class StatLogger | 104 | public class StatLogger |
105 | { | 105 | { |
@@ -164,6 +164,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
164 | } | 164 | } |
165 | } | 165 | } |
166 | return; | 166 | return; |
167 | } | 167 | } |
168 | } | 168 | } |
169 | } | 169 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs index 235914a..2f96bcb 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Hypergrid/HypergridServiceInConnectorModule.cs | |||
@@ -115,6 +115,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Hypergrid | |||
115 | m_HypergridHandler = new GatekeeperServiceInConnector(m_Config, MainServer.Instance, simService); | 115 | m_HypergridHandler = new GatekeeperServiceInConnector(m_Config, MainServer.Instance, simService); |
116 | 116 | ||
117 | new UserAgentServerConnector(m_Config, MainServer.Instance); | 117 | new UserAgentServerConnector(m_Config, MainServer.Instance); |
118 | new HeloServiceInConnector(m_Config, MainServer.Instance, "HeloService"); | ||
118 | } | 119 | } |
119 | scene.RegisterModuleInterface<IGatekeeperService>(m_HypergridHandler.GateKeeper); | 120 | scene.RegisterModuleInterface<IGatekeeperService>(m_HypergridHandler.GateKeeper); |
120 | } | 121 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index 5b4fecb..39410b5 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | |||
@@ -37,6 +37,7 @@ using OpenSim.Region.Framework.Interfaces; | |||
37 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
38 | using OpenSim.Services.Interfaces; | 38 | using OpenSim.Services.Interfaces; |
39 | using OpenSim.Services.Connectors; | 39 | using OpenSim.Services.Connectors; |
40 | using OpenSim.Services.Connectors.SimianGrid; | ||
40 | using OpenMetaverse; | 41 | using OpenMetaverse; |
41 | 42 | ||
42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | 43 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory |
@@ -538,12 +539,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
538 | } | 539 | } |
539 | else | 540 | else |
540 | { | 541 | { |
541 | // We're instantiating this class explicitly, but this won't | 542 | // Still not as flexible as I would like this to be, |
542 | // work in general, because the remote grid may be running | 543 | // but good enough for now |
543 | // an inventory server that has a different protocol. | 544 | string connectorType = new HeloServicesConnector(url).Helo(); |
544 | // Eventually we will want a piece of protocol asking | 545 | m_log.DebugFormat("[HG INVENTORY SERVICE]: HELO returned {0}", connectorType); |
545 | // the remote server about its kind. Definitely cool thing to do! | 546 | if (connectorType == "opensim-simian") |
546 | connector = new RemoteXInventoryServicesConnector(url); | 547 | connector = new SimianInventoryServiceConnector(url); |
548 | else | ||
549 | connector = new RemoteXInventoryServicesConnector(url); | ||
547 | m_connectors.Add(url, connector); | 550 | m_connectors.Add(url, connector); |
548 | } | 551 | } |
549 | } | 552 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs index 4e2f602..2322d7c 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs | |||
@@ -185,7 +185,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
185 | return folders[type]; | 185 | return folders[type]; |
186 | } | 186 | } |
187 | 187 | ||
188 | m_log.WarnFormat("[INVENTORY CACHE]: Could not find folder for system type {0} for {1}", type, userID); | 188 | m_log.WarnFormat("[INVENTORY CACHE]: Could not find folder for system type {0} for {1}", type, userID); |
189 | 189 | ||
190 | return null; | 190 | return null; |
191 | } | 191 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index cbd9e05..ab6be50 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs | |||
@@ -220,7 +220,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
220 | { | 220 | { |
221 | // m_log.DebugFormat( | 221 | // m_log.DebugFormat( |
222 | // "[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}", | 222 | // "[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}", |
223 | // item.Name, item.Owner, item.Folder); | 223 | // item.Name, item.Owner, item.Folder); |
224 | 224 | ||
225 | return m_InventoryService.AddItem(item); | 225 | return m_InventoryService.AddItem(item); |
226 | } | 226 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs index 4ab6947..34205e3 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs | |||
@@ -227,7 +227,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
227 | public bool AddItem(InventoryItemBase item) | 227 | public bool AddItem(InventoryItemBase item) |
228 | { | 228 | { |
229 | if (item == null) | 229 | if (item == null) |
230 | return false; | 230 | return false; |
231 | 231 | ||
232 | return m_RemoteConnector.AddItem(item); | 232 | return m_RemoteConnector.AddItem(item); |
233 | } | 233 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs index fb2edb9..64788db 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/UserAccountCache.cs | |||
@@ -36,6 +36,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts | |||
36 | { | 36 | { |
37 | public class UserAccountCache | 37 | public class UserAccountCache |
38 | { | 38 | { |
39 | private const double CACHE_EXPIRATION_SECONDS = 120.0; | ||
40 | |||
39 | private static readonly ILog m_log = | 41 | private static readonly ILog m_log = |
40 | LogManager.GetLogger( | 42 | LogManager.GetLogger( |
41 | MethodBase.GetCurrentMethod().DeclaringType); | 43 | MethodBase.GetCurrentMethod().DeclaringType); |
@@ -51,9 +53,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts | |||
51 | public void Cache(UUID userID, UserAccount account) | 53 | public void Cache(UUID userID, UserAccount account) |
52 | { | 54 | { |
53 | // Cache even null accounts | 55 | // Cache even null accounts |
54 | m_UUIDCache.AddOrUpdate(userID, account, DateTime.Now + TimeSpan.FromMinutes(2.0d)); | 56 | m_UUIDCache.AddOrUpdate(userID, account, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS)); |
55 | if (account != null) | 57 | if (account != null) |
56 | m_NameCache.AddOrUpdate(account.Name, account.PrincipalID, DateTime.Now + TimeSpan.FromMinutes(2.0d)); | 58 | m_NameCache.AddOrUpdate(account.Name, account.PrincipalID, DateTime.Now + TimeSpan.FromSeconds(CACHE_EXPIRATION_SECONDS)); |
57 | 59 | ||
58 | // m_log.DebugFormat("[USER CACHE]: cached user {0}", userID); | 60 | // m_log.DebugFormat("[USER CACHE]: cached user {0}", userID); |
59 | } | 61 | } |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs index ddc3dd7..c72acc3 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs | |||
@@ -33,7 +33,7 @@ using OpenSim.Framework.Serialization; | |||
33 | using OpenSim.Region.Framework.Scenes; | 33 | using OpenSim.Region.Framework.Scenes; |
34 | 34 | ||
35 | namespace OpenSim.Region.CoreModules.World.Archiver | 35 | namespace OpenSim.Region.CoreModules.World.Archiver |
36 | { | 36 | { |
37 | /// <summary> | 37 | /// <summary> |
38 | /// Helper methods for archive manipulation | 38 | /// Helper methods for archive manipulation |
39 | /// </summary> | 39 | /// </summary> |
@@ -50,7 +50,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
50 | public static string CreateObjectFilename(SceneObjectGroup sog) | 50 | public static string CreateObjectFilename(SceneObjectGroup sog) |
51 | { | 51 | { |
52 | return ArchiveConstants.CreateOarObjectFilename(sog.Name, sog.UUID, sog.AbsolutePosition); | 52 | return ArchiveConstants.CreateOarObjectFilename(sog.Name, sog.UUID, sog.AbsolutePosition); |
53 | } | 53 | } |
54 | 54 | ||
55 | /// <summary> | 55 | /// <summary> |
56 | /// Create the path used to store an object in an OpenSim Archive. | 56 | /// Create the path used to store an object in an OpenSim Archive. |
@@ -62,7 +62,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
62 | public static string CreateObjectPath(SceneObjectGroup sog) | 62 | public static string CreateObjectPath(SceneObjectGroup sog) |
63 | { | 63 | { |
64 | return ArchiveConstants.CreateOarObjectPath(sog.Name, sog.UUID, sog.AbsolutePosition); | 64 | return ArchiveConstants.CreateOarObjectPath(sog.Name, sog.UUID, sog.AbsolutePosition); |
65 | } | 65 | } |
66 | 66 | ||
67 | /// <summary> | 67 | /// <summary> |
68 | /// Resolve path to a working FileStream | 68 | /// Resolve path to a working FileStream |
@@ -123,6 +123,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
123 | 123 | ||
124 | // return new BufferedStream(file, (int) response.ContentLength); | 124 | // return new BufferedStream(file, (int) response.ContentLength); |
125 | return new BufferedStream(file, 1000000); | 125 | return new BufferedStream(file, 1000000); |
126 | } | 126 | } |
127 | } | 127 | } |
128 | } \ No newline at end of file | 128 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs index b25636f..283b33b 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs | |||
@@ -102,7 +102,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
102 | { | 102 | { |
103 | Dictionary<UUID, AssetType> assetUuids = new Dictionary<UUID, AssetType>(); | 103 | Dictionary<UUID, AssetType> assetUuids = new Dictionary<UUID, AssetType>(); |
104 | 104 | ||
105 | List<EntityBase> entities = m_scene.GetEntities(); | 105 | EntityBase[] entities = m_scene.GetEntities(); |
106 | List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); | 106 | List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); |
107 | 107 | ||
108 | /* | 108 | /* |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs index 58698ee..3342164 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs | |||
@@ -48,6 +48,7 @@ using OpenSim.Tests.Common.Setup; | |||
48 | using ArchiveConstants = OpenSim.Framework.Serialization.ArchiveConstants; | 48 | using ArchiveConstants = OpenSim.Framework.Serialization.ArchiveConstants; |
49 | using TarArchiveReader = OpenSim.Framework.Serialization.TarArchiveReader; | 49 | using TarArchiveReader = OpenSim.Framework.Serialization.TarArchiveReader; |
50 | using TarArchiveWriter = OpenSim.Framework.Serialization.TarArchiveWriter; | 50 | using TarArchiveWriter = OpenSim.Framework.Serialization.TarArchiveWriter; |
51 | using RegionSettings = OpenSim.Framework.RegionSettings; | ||
51 | 52 | ||
52 | namespace OpenSim.Region.CoreModules.World.Archiver.Tests | 53 | namespace OpenSim.Region.CoreModules.World.Archiver.Tests |
53 | { | 54 | { |
@@ -135,7 +136,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
135 | 136 | ||
136 | SceneObjectPart part2 = CreateSceneObjectPart2(); | 137 | SceneObjectPart part2 = CreateSceneObjectPart2(); |
137 | 138 | ||
138 | AssetNotecard nc = new AssetNotecard("Hello World!"); | 139 | AssetNotecard nc = new AssetNotecard(); |
140 | nc.BodyText = "Hello World!"; | ||
141 | nc.Encode(); | ||
139 | UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); | 142 | UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); |
140 | UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); | 143 | UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); |
141 | AssetBase ncAsset | 144 | AssetBase ncAsset |
@@ -215,7 +218,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
215 | public void TestLoadOarV0_2() | 218 | public void TestLoadOarV0_2() |
216 | { | 219 | { |
217 | TestHelper.InMethod(); | 220 | TestHelper.InMethod(); |
218 | //log4net.Config.XmlConfigurator.Configure(); | 221 | // log4net.Config.XmlConfigurator.Configure(); |
219 | 222 | ||
220 | MemoryStream archiveWriteStream = new MemoryStream(); | 223 | MemoryStream archiveWriteStream = new MemoryStream(); |
221 | TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); | 224 | TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream); |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index f62ec1b..5bd72ee 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -72,12 +72,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
72 | #pragma warning restore 0429 | 72 | #pragma warning restore 0429 |
73 | 73 | ||
74 | /// <value> | 74 | /// <value> |
75 | /// Local land ids at specified region co-ordinates (region size / 4) | 75 | /// Local land ids at specified region co-ordinates (region size / 4) |
76 | /// </value> | 76 | /// </value> |
77 | private readonly int[,] m_landIDList = new int[landArrayMax, landArrayMax]; | 77 | private readonly int[,] m_landIDList = new int[landArrayMax, landArrayMax]; |
78 | 78 | ||
79 | /// <value> | 79 | /// <value> |
80 | /// Land objects keyed by local id | 80 | /// Land objects keyed by local id |
81 | /// </value> | 81 | /// </value> |
82 | private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>(); | 82 | private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>(); |
83 | 83 | ||
@@ -94,8 +94,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
94 | 94 | ||
95 | #region INonSharedRegionModule Members | 95 | #region INonSharedRegionModule Members |
96 | 96 | ||
97 | public Type ReplaceableInterface | 97 | public Type ReplaceableInterface |
98 | { | 98 | { |
99 | get { return null; } | 99 | get { return null; } |
100 | } | 100 | } |
101 | 101 | ||
@@ -200,7 +200,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
200 | Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); | 200 | Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); |
201 | forcedPosition = null; | 201 | forcedPosition = null; |
202 | } | 202 | } |
203 | //if we are far away, teleport | 203 | //if we are far away, teleport |
204 | else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition.Value) > 3) | 204 | else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition.Value) > 3) |
205 | { | 205 | { |
206 | Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); | 206 | Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); |
@@ -329,8 +329,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
329 | } | 329 | } |
330 | } | 330 | } |
331 | 331 | ||
332 | |||
333 | |||
334 | private void ForceAvatarToPosition(ScenePresence avatar, Vector3? position) | 332 | private void ForceAvatarToPosition(ScenePresence avatar, Vector3? position) |
335 | { | 333 | { |
336 | if (m_scene.Permissions.IsGod(avatar.UUID)) return; | 334 | if (m_scene.Permissions.IsGod(avatar.UUID)) return; |
@@ -344,7 +342,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
344 | { | 342 | { |
345 | avatar.ControllingClient.SendAlertMessage( | 343 | avatar.ControllingClient.SendAlertMessage( |
346 | "You are not allowed on this parcel because the land owner has restricted access."); | 344 | "You are not allowed on this parcel because the land owner has restricted access."); |
347 | |||
348 | } | 345 | } |
349 | 346 | ||
350 | public void EventManagerOnAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID) | 347 | public void EventManagerOnAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID) |
@@ -456,7 +453,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
456 | if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && | 453 | if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && |
457 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) | 454 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) |
458 | { | 455 | { |
459 | EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID, | 456 | EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID, |
460 | m_scene.RegionInfo.RegionID); | 457 | m_scene.RegionInfo.RegionID); |
461 | //They are going under the safety line! | 458 | //They are going under the safety line! |
462 | if (!parcel.IsBannedFromLand(clientAvatar.UUID)) | 459 | if (!parcel.IsBannedFromLand(clientAvatar.UUID)) |
@@ -660,7 +657,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
660 | 657 | ||
661 | if (x_float > Constants.RegionSize || x_float < 0 || y_float > Constants.RegionSize || y_float < 0) | 658 | if (x_float > Constants.RegionSize || x_float < 0 || y_float > Constants.RegionSize || y_float < 0) |
662 | return null; | 659 | return null; |
663 | 660 | ||
664 | try | 661 | try |
665 | { | 662 | { |
666 | x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / 4.0)); | 663 | x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / 4.0)); |
@@ -675,7 +672,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
675 | { | 672 | { |
676 | return null; | 673 | return null; |
677 | } | 674 | } |
678 | 675 | ||
679 | lock (m_landList) | 676 | lock (m_landList) |
680 | { | 677 | { |
681 | // Corner case. If an autoreturn happens during sim startup | 678 | // Corner case. If an autoreturn happens during sim startup |
@@ -695,7 +692,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
695 | // they happen every time at border crossings | 692 | // they happen every time at border crossings |
696 | throw new Exception("Error: Parcel not found at point " + x + ", " + y); | 693 | throw new Exception("Error: Parcel not found at point " + x + ", " + y); |
697 | } | 694 | } |
698 | 695 | ||
699 | lock (m_landIDList) | 696 | lock (m_landIDList) |
700 | { | 697 | { |
701 | try | 698 | try |
@@ -749,7 +746,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
749 | 746 | ||
750 | public void EventManagerOnObjectBeingRemovedFromScene(SceneObjectGroup obj) | 747 | public void EventManagerOnObjectBeingRemovedFromScene(SceneObjectGroup obj) |
751 | { | 748 | { |
752 | |||
753 | lock (m_landList) | 749 | lock (m_landList) |
754 | { | 750 | { |
755 | foreach (LandObject p in m_landList.Values) | 751 | foreach (LandObject p in m_landList.Values) |
@@ -802,7 +798,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
802 | public void EventManagerOnParcelPrimCountUpdate() | 798 | public void EventManagerOnParcelPrimCountUpdate() |
803 | { | 799 | { |
804 | ResetAllLandPrimCounts(); | 800 | ResetAllLandPrimCounts(); |
805 | foreach (EntityBase obj in m_scene.Entities) | 801 | EntityBase[] entities = m_scene.Entities.GetEntities(); |
802 | foreach (EntityBase obj in entities) | ||
806 | { | 803 | { |
807 | if (obj != null) | 804 | if (obj != null) |
808 | { | 805 | { |
@@ -943,7 +940,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
943 | return; | 940 | return; |
944 | } | 941 | } |
945 | } | 942 | } |
946 | 943 | ||
947 | lock (m_landList) | 944 | lock (m_landList) |
948 | { | 945 | { |
949 | foreach (ILandObject slaveLandObject in selectedLandObjects) | 946 | foreach (ILandObject slaveLandObject in selectedLandObjects) |
@@ -1089,7 +1086,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1089 | temp.Add(currentParcel); | 1086 | temp.Add(currentParcel); |
1090 | } | 1087 | } |
1091 | } | 1088 | } |
1092 | |||
1093 | } | 1089 | } |
1094 | } | 1090 | } |
1095 | 1091 | ||
@@ -1132,7 +1128,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1132 | join(west, south, east, north, remote_client.AgentId); | 1128 | join(west, south, east, north, remote_client.AgentId); |
1133 | } | 1129 | } |
1134 | 1130 | ||
1135 | public void ClientOnParcelSelectObjects(int local_id, int request_type, | 1131 | public void ClientOnParcelSelectObjects(int local_id, int request_type, |
1136 | List<UUID> returnIDs, IClientAPI remote_client) | 1132 | List<UUID> returnIDs, IClientAPI remote_client) |
1137 | { | 1133 | { |
1138 | m_landList[local_id].SendForceObjectSelect(local_id, request_type, returnIDs, remote_client); | 1134 | m_landList[local_id].SendForceObjectSelect(local_id, request_type, returnIDs, remote_client); |
@@ -1382,31 +1378,31 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1382 | { | 1378 | { |
1383 | return RemoteParcelRequest(request, path, param, agentID, caps); | 1379 | return RemoteParcelRequest(request, path, param, agentID, caps); |
1384 | })); | 1380 | })); |
1385 | UUID parcelCapID = UUID.Random(); | 1381 | UUID parcelCapID = UUID.Random(); |
1386 | caps.RegisterHandler("ParcelPropertiesUpdate", | 1382 | caps.RegisterHandler("ParcelPropertiesUpdate", |
1387 | new RestStreamHandler("POST", "/CAPS/" + parcelCapID, | 1383 | new RestStreamHandler("POST", "/CAPS/" + parcelCapID, |
1388 | delegate(string request, string path, string param, | 1384 | delegate(string request, string path, string param, |
1389 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) | 1385 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) |
1390 | { | 1386 | { |
1391 | return ProcessPropertiesUpdate(request, path, param, agentID, caps); | 1387 | return ProcessPropertiesUpdate(request, path, param, agentID, caps); |
1392 | })); | 1388 | })); |
1393 | } | 1389 | } |
1394 | private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps) | 1390 | private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps) |
1395 | { | 1391 | { |
1396 | IClientAPI client; | 1392 | IClientAPI client; |
1397 | if ( ! m_scene.TryGetClient(agentID, out client) ) { | 1393 | if (! m_scene.TryGetClient(agentID, out client)) { |
1398 | m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString() ); | 1394 | m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString()); |
1399 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); | 1395 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); |
1400 | } | 1396 | } |
1401 | 1397 | ||
1402 | ParcelPropertiesUpdateMessage properties = new ParcelPropertiesUpdateMessage(); | 1398 | ParcelPropertiesUpdateMessage properties = new ParcelPropertiesUpdateMessage(); |
1403 | OpenMetaverse.StructuredData.OSDMap args = (OpenMetaverse.StructuredData.OSDMap) OSDParser.DeserializeLLSDXml(request); | 1399 | OpenMetaverse.StructuredData.OSDMap args = (OpenMetaverse.StructuredData.OSDMap) OSDParser.DeserializeLLSDXml(request); |
1404 | 1400 | ||
1405 | properties.Deserialize(args); | 1401 | properties.Deserialize(args); |
1406 | 1402 | ||
1407 | LandUpdateArgs land_update = new LandUpdateArgs(); | 1403 | LandUpdateArgs land_update = new LandUpdateArgs(); |
1408 | int parcelID = properties.LocalID; | 1404 | int parcelID = properties.LocalID; |
1409 | land_update.AuthBuyerID = properties.AuthBuyerID; | 1405 | land_update.AuthBuyerID = properties.AuthBuyerID; |
1410 | land_update.Category = properties.Category; | 1406 | land_update.Category = properties.Category; |
1411 | land_update.Desc = properties.Desc; | 1407 | land_update.Desc = properties.Desc; |
1412 | land_update.GroupID = properties.GroupID; | 1408 | land_update.GroupID = properties.GroupID; |
@@ -1423,15 +1419,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1423 | land_update.SnapshotID = properties.SnapshotID; | 1419 | land_update.SnapshotID = properties.SnapshotID; |
1424 | land_update.UserLocation = properties.UserLocation; | 1420 | land_update.UserLocation = properties.UserLocation; |
1425 | land_update.UserLookAt = properties.UserLookAt; | 1421 | land_update.UserLookAt = properties.UserLookAt; |
1426 | land_update.MediaDescription = properties.MediaDesc; | 1422 | land_update.MediaDescription = properties.MediaDesc; |
1427 | land_update.MediaType = properties.MediaType; | 1423 | land_update.MediaType = properties.MediaType; |
1428 | land_update.MediaWidth = properties.MediaWidth; | 1424 | land_update.MediaWidth = properties.MediaWidth; |
1429 | land_update.MediaHeight = properties.MediaHeight; | 1425 | land_update.MediaHeight = properties.MediaHeight; |
1430 | land_update.MediaLoop = properties.MediaLoop; | 1426 | land_update.MediaLoop = properties.MediaLoop; |
1431 | land_update.ObscureMusic = properties.ObscureMusic; | 1427 | land_update.ObscureMusic = properties.ObscureMusic; |
1432 | land_update.ObscureMedia = properties.ObscureMedia; | 1428 | land_update.ObscureMedia = properties.ObscureMedia; |
1433 | 1429 | ||
1434 | ILandObject land; | 1430 | ILandObject land; |
1435 | lock (m_landList) | 1431 | lock (m_landList) |
1436 | { | 1432 | { |
1437 | m_landList.TryGetValue(parcelID, out land); | 1433 | m_landList.TryGetValue(parcelID, out land); |
@@ -1439,15 +1435,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1439 | 1435 | ||
1440 | if (land != null) | 1436 | if (land != null) |
1441 | { | 1437 | { |
1442 | land.UpdateLandProperties(land_update, client); | 1438 | land.UpdateLandProperties(land_update, client); |
1443 | m_scene.EventManager.TriggerOnParcelPropertiesUpdateRequest(land_update, parcelID, client); | 1439 | m_scene.EventManager.TriggerOnParcelPropertiesUpdateRequest(land_update, parcelID, client); |
1444 | } | 1440 | } |
1445 | else | 1441 | else |
1446 | { | 1442 | { |
1447 | m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID); | 1443 | m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID); |
1448 | } | 1444 | } |
1449 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); | 1445 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); |
1450 | } | 1446 | } |
1451 | // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the | 1447 | // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the |
1452 | // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to. | 1448 | // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to. |
1453 | // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x | 1449 | // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x |
@@ -1524,19 +1520,19 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1524 | if (parcelID == UUID.Zero) | 1520 | if (parcelID == UUID.Zero) |
1525 | return; | 1521 | return; |
1526 | 1522 | ||
1527 | ExtendedLandData data = | 1523 | ExtendedLandData data = |
1528 | (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), | 1524 | (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), |
1529 | delegate(string id) | 1525 | delegate(string id) |
1530 | { | 1526 | { |
1531 | UUID parcel = UUID.Zero; | 1527 | UUID parcel = UUID.Zero; |
1532 | UUID.TryParse(id, out parcel); | 1528 | UUID.TryParse(id, out parcel); |
1533 | // assume we've got the parcelID we just computed in RemoteParcelRequest | 1529 | // assume we've got the parcelID we just computed in RemoteParcelRequest |
1534 | ExtendedLandData extLandData = new ExtendedLandData(); | 1530 | ExtendedLandData extLandData = new ExtendedLandData(); |
1535 | Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle, | 1531 | Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle, |
1536 | out extLandData.X, out extLandData.Y); | 1532 | out extLandData.X, out extLandData.Y); |
1537 | m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", | 1533 | m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", |
1538 | extLandData.RegionHandle, extLandData.X, extLandData.Y); | 1534 | extLandData.RegionHandle, extLandData.X, extLandData.Y); |
1539 | 1535 | ||
1540 | // for this region or for somewhere else? | 1536 | // for this region or for somewhere else? |
1541 | if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) | 1537 | if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) |
1542 | { | 1538 | { |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 1b2cabb..bd1dd66 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs | |||
@@ -229,13 +229,13 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
229 | newData.SnapshotID = args.SnapshotID; | 229 | newData.SnapshotID = args.SnapshotID; |
230 | newData.UserLocation = args.UserLocation; | 230 | newData.UserLocation = args.UserLocation; |
231 | newData.UserLookAt = args.UserLookAt; | 231 | newData.UserLookAt = args.UserLookAt; |
232 | newData.MediaType = args.MediaType; | 232 | newData.MediaType = args.MediaType; |
233 | newData.MediaDescription = args.MediaDescription; | 233 | newData.MediaDescription = args.MediaDescription; |
234 | newData.MediaWidth = args.MediaWidth; | 234 | newData.MediaWidth = args.MediaWidth; |
235 | newData.MediaHeight = args.MediaHeight; | 235 | newData.MediaHeight = args.MediaHeight; |
236 | newData.MediaLoop = args.MediaLoop; | 236 | newData.MediaLoop = args.MediaLoop; |
237 | newData.ObscureMusic = args.ObscureMusic; | 237 | newData.ObscureMusic = args.ObscureMusic; |
238 | newData.ObscureMedia = args.ObscureMedia; | 238 | newData.ObscureMedia = args.ObscureMedia; |
239 | 239 | ||
240 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); | 240 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
241 | 241 | ||
diff --git a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs index 82ad109..7c5d044 100644 --- a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs +++ b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs | |||
@@ -54,11 +54,11 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
54 | { | 54 | { |
55 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MoapModule")] | 55 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MoapModule")] |
56 | public class MoapModule : INonSharedRegionModule, IMoapModule | 56 | public class MoapModule : INonSharedRegionModule, IMoapModule |
57 | { | 57 | { |
58 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 58 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
59 | 59 | ||
60 | public string Name { get { return "MoapModule"; } } | 60 | public string Name { get { return "MoapModule"; } } |
61 | public Type ReplaceableInterface { get { return null; } } | 61 | public Type ReplaceableInterface { get { return null; } } |
62 | 62 | ||
63 | /// <summary> | 63 | /// <summary> |
64 | /// Is this module enabled? | 64 | /// Is this module enabled? |
@@ -78,17 +78,17 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
78 | /// <summary> | 78 | /// <summary> |
79 | /// Track the ObjectMedia capabilities given to users keyed by agent. Lock m_omCapUsers to manipulate. | 79 | /// Track the ObjectMedia capabilities given to users keyed by agent. Lock m_omCapUsers to manipulate. |
80 | /// </summary> | 80 | /// </summary> |
81 | protected Dictionary<UUID, string> m_omCapUrls = new Dictionary<UUID, string>(); | 81 | protected Dictionary<UUID, string> m_omCapUrls = new Dictionary<UUID, string>(); |
82 | 82 | ||
83 | /// <summary> | 83 | /// <summary> |
84 | /// Track the ObjectMediaUpdate capabilities given to users keyed by path | 84 | /// Track the ObjectMediaUpdate capabilities given to users keyed by path |
85 | /// </summary> | 85 | /// </summary> |
86 | protected Dictionary<string, UUID> m_omuCapUsers = new Dictionary<string, UUID>(); | 86 | protected Dictionary<string, UUID> m_omuCapUsers = new Dictionary<string, UUID>(); |
87 | 87 | ||
88 | /// <summary> | 88 | /// <summary> |
89 | /// Track the ObjectMediaUpdate capabilities given to users keyed by agent. Lock m_omuCapUsers to manipulate | 89 | /// Track the ObjectMediaUpdate capabilities given to users keyed by agent. Lock m_omuCapUsers to manipulate |
90 | /// </summary> | 90 | /// </summary> |
91 | protected Dictionary<UUID, string> m_omuCapUrls = new Dictionary<UUID, string>(); | 91 | protected Dictionary<UUID, string> m_omuCapUrls = new Dictionary<UUID, string>(); |
92 | 92 | ||
93 | public void Initialise(IConfigSource configSource) | 93 | public void Initialise(IConfigSource configSource) |
94 | { | 94 | { |
@@ -129,7 +129,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
129 | m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps; | 129 | m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps; |
130 | m_scene.EventManager.OnDeregisterCaps -= OnDeregisterCaps; | 130 | m_scene.EventManager.OnDeregisterCaps -= OnDeregisterCaps; |
131 | m_scene.EventManager.OnSceneObjectPartCopy -= OnSceneObjectPartCopy; | 131 | m_scene.EventManager.OnSceneObjectPartCopy -= OnSceneObjectPartCopy; |
132 | } | 132 | } |
133 | 133 | ||
134 | public void OnRegisterCaps(UUID agentID, Caps caps) | 134 | public void OnRegisterCaps(UUID agentID, Caps caps) |
135 | { | 135 | { |
@@ -159,7 +159,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
159 | caps.RegisterHandler( | 159 | caps.RegisterHandler( |
160 | "ObjectMediaNavigate", new RestStreamHandler("POST", omuCapUrl, HandleObjectMediaNavigateMessage)); | 160 | "ObjectMediaNavigate", new RestStreamHandler("POST", omuCapUrl, HandleObjectMediaNavigateMessage)); |
161 | } | 161 | } |
162 | } | 162 | } |
163 | 163 | ||
164 | public void OnDeregisterCaps(UUID agentID, Caps caps) | 164 | public void OnDeregisterCaps(UUID agentID, Caps caps) |
165 | { | 165 | { |
@@ -179,7 +179,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
179 | } | 179 | } |
180 | 180 | ||
181 | protected void OnSceneObjectPartCopy(SceneObjectPart copy, SceneObjectPart original, bool userExposed) | 181 | protected void OnSceneObjectPartCopy(SceneObjectPart copy, SceneObjectPart original, bool userExposed) |
182 | { | 182 | { |
183 | if (original.Shape.Media != null) | 183 | if (original.Shape.Media != null) |
184 | { | 184 | { |
185 | PrimitiveBaseShape.MediaList dupeMedia = new PrimitiveBaseShape.MediaList(); | 185 | PrimitiveBaseShape.MediaList dupeMedia = new PrimitiveBaseShape.MediaList(); |
@@ -195,7 +195,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
195 | } | 195 | } |
196 | 196 | ||
197 | copy.Shape.Media = dupeMedia; | 197 | copy.Shape.Media = dupeMedia; |
198 | } | 198 | } |
199 | } | 199 | } |
200 | 200 | ||
201 | public MediaEntry GetMediaEntry(SceneObjectPart part, int face) | 201 | public MediaEntry GetMediaEntry(SceneObjectPart part, int face) |
@@ -211,9 +211,9 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
211 | me = null; | 211 | me = null; |
212 | } | 212 | } |
213 | else | 213 | else |
214 | { | 214 | { |
215 | lock (media) | 215 | lock (media) |
216 | me = media[face]; | 216 | me = media[face]; |
217 | 217 | ||
218 | // TODO: Really need a proper copy constructor down in libopenmetaverse | 218 | // TODO: Really need a proper copy constructor down in libopenmetaverse |
219 | if (me != null) | 219 | if (me != null) |
@@ -227,17 +227,17 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
227 | 227 | ||
228 | public void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me) | 228 | public void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me) |
229 | { | 229 | { |
230 | CheckFaceParam(part, face); | 230 | CheckFaceParam(part, face); |
231 | 231 | ||
232 | if (null == part.Shape.Media) | 232 | if (null == part.Shape.Media) |
233 | part.Shape.Media = new PrimitiveBaseShape.MediaList(new MediaEntry[part.GetNumberOfSides()]); | 233 | part.Shape.Media = new PrimitiveBaseShape.MediaList(new MediaEntry[part.GetNumberOfSides()]); |
234 | 234 | ||
235 | lock (part.Shape.Media) | 235 | lock (part.Shape.Media) |
236 | part.Shape.Media[face] = me; | 236 | part.Shape.Media[face] = me; |
237 | 237 | ||
238 | UpdateMediaUrl(part, UUID.Zero); | 238 | UpdateMediaUrl(part, UUID.Zero); |
239 | part.ScheduleFullUpdate(); | 239 | part.ScheduleFullUpdate(); |
240 | part.TriggerScriptChangedEvent(Changed.MEDIA); | 240 | part.TriggerScriptChangedEvent(Changed.MEDIA); |
241 | } | 241 | } |
242 | 242 | ||
243 | public void ClearMediaEntry(SceneObjectPart part, int face) | 243 | public void ClearMediaEntry(SceneObjectPart part, int face) |
@@ -256,7 +256,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
256 | /// <returns></returns> | 256 | /// <returns></returns> |
257 | protected string HandleObjectMediaMessage( | 257 | protected string HandleObjectMediaMessage( |
258 | string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse) | 258 | string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse) |
259 | { | 259 | { |
260 | // m_log.DebugFormat("[MOAP]: Got ObjectMedia path [{0}], raw request [{1}]", path, request); | 260 | // m_log.DebugFormat("[MOAP]: Got ObjectMedia path [{0}], raw request [{1}]", path, request); |
261 | 261 | ||
262 | OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request); | 262 | OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request); |
@@ -266,12 +266,12 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
266 | if (omm.Request is ObjectMediaRequest) | 266 | if (omm.Request is ObjectMediaRequest) |
267 | return HandleObjectMediaRequest(omm.Request as ObjectMediaRequest); | 267 | return HandleObjectMediaRequest(omm.Request as ObjectMediaRequest); |
268 | else if (omm.Request is ObjectMediaUpdate) | 268 | else if (omm.Request is ObjectMediaUpdate) |
269 | return HandleObjectMediaUpdate(path, omm.Request as ObjectMediaUpdate); | 269 | return HandleObjectMediaUpdate(path, omm.Request as ObjectMediaUpdate); |
270 | 270 | ||
271 | throw new Exception( | 271 | throw new Exception( |
272 | string.Format( | 272 | string.Format( |
273 | "[MOAP]: ObjectMediaMessage has unrecognized ObjectMediaBlock of {0}", | 273 | "[MOAP]: ObjectMediaMessage has unrecognized ObjectMediaBlock of {0}", |
274 | omm.Request.GetType())); | 274 | omm.Request.GetType())); |
275 | } | 275 | } |
276 | 276 | ||
277 | /// <summary> | 277 | /// <summary> |
@@ -279,7 +279,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
279 | /// </summary> | 279 | /// </summary> |
280 | /// <param name="omr"></param> | 280 | /// <param name="omr"></param> |
281 | /// <returns></returns> | 281 | /// <returns></returns> |
282 | protected string HandleObjectMediaRequest(ObjectMediaRequest omr) | 282 | protected string HandleObjectMediaRequest(ObjectMediaRequest omr) |
283 | { | 283 | { |
284 | UUID primId = omr.PrimID; | 284 | UUID primId = omr.PrimID; |
285 | 285 | ||
@@ -318,7 +318,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
318 | /// <param name="path">Path on which this request was made</param> | 318 | /// <param name="path">Path on which this request was made</param> |
319 | /// <param name="omu">/param> | 319 | /// <param name="omu">/param> |
320 | /// <returns></returns> | 320 | /// <returns></returns> |
321 | protected string HandleObjectMediaUpdate(string path, ObjectMediaUpdate omu) | 321 | protected string HandleObjectMediaUpdate(string path, ObjectMediaUpdate omu) |
322 | { | 322 | { |
323 | UUID primId = omu.PrimID; | 323 | UUID primId = omu.PrimID; |
324 | 324 | ||
@@ -330,9 +330,9 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
330 | "[MOAP]: Received an UPDATE ObjectMediaRequest for prim {0} but this doesn't exist in region {1}", | 330 | "[MOAP]: Received an UPDATE ObjectMediaRequest for prim {0} but this doesn't exist in region {1}", |
331 | primId, m_scene.RegionInfo.RegionName); | 331 | primId, m_scene.RegionInfo.RegionName); |
332 | return string.Empty; | 332 | return string.Empty; |
333 | } | 333 | } |
334 | 334 | ||
335 | // m_log.DebugFormat("[MOAP]: Received {0} media entries for prim {1}", omu.FaceMedia.Length, primId); | 335 | // m_log.DebugFormat("[MOAP]: Received {0} media entries for prim {1}", omu.FaceMedia.Length, primId); |
336 | 336 | ||
337 | // for (int i = 0; i < omu.FaceMedia.Length; i++) | 337 | // for (int i = 0; i < omu.FaceMedia.Length; i++) |
338 | // { | 338 | // { |
@@ -374,14 +374,14 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
374 | part.Shape.Textures = te; | 374 | part.Shape.Textures = te; |
375 | // m_log.DebugFormat( | 375 | // m_log.DebugFormat( |
376 | // "[MOAP]: Media flags for face {0} is {1}", | 376 | // "[MOAP]: Media flags for face {0} is {1}", |
377 | // i, part.Shape.Textures.FaceTextures[i].MediaFlags); | 377 | // i, part.Shape.Textures.FaceTextures[i].MediaFlags); |
378 | } | 378 | } |
379 | } | 379 | } |
380 | } | 380 | } |
381 | else | 381 | else |
382 | { | 382 | { |
383 | // We need to go through the media textures one at a time to make sure that we have permission | 383 | // We need to go through the media textures one at a time to make sure that we have permission |
384 | // to change them | 384 | // to change them |
385 | 385 | ||
386 | // FIXME: Race condition here since some other texture entry manipulator may overwrite/get | 386 | // FIXME: Race condition here since some other texture entry manipulator may overwrite/get |
387 | // overwritten. Unfortunately, PrimitiveBaseShape does not allow us to change texture entry | 387 | // overwritten. Unfortunately, PrimitiveBaseShape does not allow us to change texture entry |
@@ -391,18 +391,18 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
391 | lock (media) | 391 | lock (media) |
392 | { | 392 | { |
393 | for (int i = 0; i < media.Count; i++) | 393 | for (int i = 0; i < media.Count; i++) |
394 | { | 394 | { |
395 | if (m_scene.Permissions.CanControlPrimMedia(agentId, part.UUID, i)) | 395 | if (m_scene.Permissions.CanControlPrimMedia(agentId, part.UUID, i)) |
396 | { | 396 | { |
397 | media[i] = omu.FaceMedia[i]; | 397 | media[i] = omu.FaceMedia[i]; |
398 | 398 | ||
399 | // When a face is cleared this is done by setting the MediaFlags in the TextureEntry via a normal | 399 | // When a face is cleared this is done by setting the MediaFlags in the TextureEntry via a normal |
400 | // texture update, so we don't need to worry about clearing MediaFlags here. | 400 | // texture update, so we don't need to worry about clearing MediaFlags here. |
401 | if (null == media[i]) | 401 | if (null == media[i]) |
402 | continue; | 402 | continue; |
403 | 403 | ||
404 | Primitive.TextureEntryFace face = te.CreateFace((uint)i); | 404 | Primitive.TextureEntryFace face = te.CreateFace((uint)i); |
405 | face.MediaFlags = true; | 405 | face.MediaFlags = true; |
406 | 406 | ||
407 | // m_log.DebugFormat( | 407 | // m_log.DebugFormat( |
408 | // "[MOAP]: Media flags for face {0} is {1}", | 408 | // "[MOAP]: Media flags for face {0} is {1}", |
@@ -414,11 +414,11 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
414 | 414 | ||
415 | part.Shape.Textures = te; | 415 | part.Shape.Textures = te; |
416 | 416 | ||
417 | // for (int i2 = 0; i2 < part.Shape.Textures.FaceTextures.Length; i2++) | 417 | // for (int i2 = 0; i2 < part.Shape.Textures.FaceTextures.Length; i2++) |
418 | // m_log.DebugFormat("[MOAP]: FaceTexture[{0}] is {1}", i2, part.Shape.Textures.FaceTextures[i2]); | 418 | // m_log.DebugFormat("[MOAP]: FaceTexture[{0}] is {1}", i2, part.Shape.Textures.FaceTextures[i2]); |
419 | } | 419 | } |
420 | 420 | ||
421 | UpdateMediaUrl(part, agentId); | 421 | UpdateMediaUrl(part, agentId); |
422 | 422 | ||
423 | // Arguably, we could avoid sending a full update to the avatar that just changed the texture. | 423 | // Arguably, we could avoid sending a full update to the avatar that just changed the texture. |
424 | part.ScheduleFullUpdate(); | 424 | part.ScheduleFullUpdate(); |
@@ -439,16 +439,16 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
439 | /// <returns></returns> | 439 | /// <returns></returns> |
440 | protected string HandleObjectMediaNavigateMessage( | 440 | protected string HandleObjectMediaNavigateMessage( |
441 | string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse) | 441 | string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse) |
442 | { | 442 | { |
443 | // m_log.DebugFormat("[MOAP]: Got ObjectMediaNavigate request [{0}]", request); | 443 | // m_log.DebugFormat("[MOAP]: Got ObjectMediaNavigate request [{0}]", request); |
444 | 444 | ||
445 | OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request); | 445 | OSDMap osd = (OSDMap)OSDParser.DeserializeLLSDXml(request); |
446 | ObjectMediaNavigateMessage omn = new ObjectMediaNavigateMessage(); | 446 | ObjectMediaNavigateMessage omn = new ObjectMediaNavigateMessage(); |
447 | omn.Deserialize(osd); | 447 | omn.Deserialize(osd); |
448 | 448 | ||
449 | UUID primId = omn.PrimID; | 449 | UUID primId = omn.PrimID; |
450 | 450 | ||
451 | SceneObjectPart part = m_scene.GetSceneObjectPart(primId); | 451 | SceneObjectPart part = m_scene.GetSceneObjectPart(primId); |
452 | 452 | ||
453 | if (null == part) | 453 | if (null == part) |
454 | { | 454 | { |
@@ -456,12 +456,12 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
456 | "[MOAP]: Received an ObjectMediaNavigateMessage for prim {0} but this doesn't exist in region {1}", | 456 | "[MOAP]: Received an ObjectMediaNavigateMessage for prim {0} but this doesn't exist in region {1}", |
457 | primId, m_scene.RegionInfo.RegionName); | 457 | primId, m_scene.RegionInfo.RegionName); |
458 | return string.Empty; | 458 | return string.Empty; |
459 | } | 459 | } |
460 | 460 | ||
461 | UUID agentId = default(UUID); | 461 | UUID agentId = default(UUID); |
462 | 462 | ||
463 | lock (m_omuCapUsers) | 463 | lock (m_omuCapUsers) |
464 | agentId = m_omuCapUsers[path]; | 464 | agentId = m_omuCapUsers[path]; |
465 | 465 | ||
466 | if (!m_scene.Permissions.CanInteractWithPrimMedia(agentId, part.UUID, omn.Face)) | 466 | if (!m_scene.Permissions.CanInteractWithPrimMedia(agentId, part.UUID, omn.Face)) |
467 | return string.Empty; | 467 | return string.Empty; |
@@ -484,7 +484,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
484 | return string.Empty; | 484 | return string.Empty; |
485 | 485 | ||
486 | if (me.EnableWhiteList) | 486 | if (me.EnableWhiteList) |
487 | { | 487 | { |
488 | if (!CheckUrlAgainstWhitelist(omn.URL, me.WhiteList)) | 488 | if (!CheckUrlAgainstWhitelist(omn.URL, me.WhiteList)) |
489 | { | 489 | { |
490 | // m_log.DebugFormat( | 490 | // m_log.DebugFormat( |
@@ -493,18 +493,18 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
493 | 493 | ||
494 | return string.Empty; | 494 | return string.Empty; |
495 | } | 495 | } |
496 | } | 496 | } |
497 | 497 | ||
498 | me.CurrentURL = omn.URL; | 498 | me.CurrentURL = omn.URL; |
499 | 499 | ||
500 | UpdateMediaUrl(part, agentId); | 500 | UpdateMediaUrl(part, agentId); |
501 | 501 | ||
502 | part.ScheduleFullUpdate(); | 502 | part.ScheduleFullUpdate(); |
503 | 503 | ||
504 | part.TriggerScriptChangedEvent(Changed.MEDIA); | 504 | part.TriggerScriptChangedEvent(Changed.MEDIA); |
505 | 505 | ||
506 | return OSDParser.SerializeLLSDXmlString(new OSD()); | 506 | return OSDParser.SerializeLLSDXmlString(new OSD()); |
507 | } | 507 | } |
508 | 508 | ||
509 | /// <summary> | 509 | /// <summary> |
510 | /// Check that the face number is valid for the given prim. | 510 | /// Check that the face number is valid for the given prim. |
@@ -519,7 +519,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
519 | int maxFaces = part.GetNumberOfSides() - 1; | 519 | int maxFaces = part.GetNumberOfSides() - 1; |
520 | if (face > maxFaces) | 520 | if (face > maxFaces) |
521 | throw new ArgumentException( | 521 | throw new ArgumentException( |
522 | string.Format("Face argument was {0} but max is {1}", face, maxFaces)); | 522 | string.Format("Face argument was {0} but max is {1}", face, maxFaces)); |
523 | } | 523 | } |
524 | 524 | ||
525 | /// <summary> | 525 | /// <summary> |
@@ -542,9 +542,9 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
542 | string rawVersion = part.MediaUrl.Substring(5, 10); | 542 | string rawVersion = part.MediaUrl.Substring(5, 10); |
543 | int version = int.Parse(rawVersion); | 543 | int version = int.Parse(rawVersion); |
544 | part.MediaUrl = string.Format("x-mv:{0:D10}/{1}", ++version, updateId); | 544 | part.MediaUrl = string.Format("x-mv:{0:D10}/{1}", ++version, updateId); |
545 | } | 545 | } |
546 | 546 | ||
547 | // m_log.DebugFormat("[MOAP]: Storing media url [{0}] in prim {1} {2}", part.MediaUrl, part.Name, part.UUID); | 547 | // m_log.DebugFormat("[MOAP]: Storing media url [{0}] in prim {1} {2}", part.MediaUrl, part.Name, part.UUID); |
548 | } | 548 | } |
549 | 549 | ||
550 | /// <summary> | 550 | /// <summary> |
@@ -554,7 +554,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
554 | /// <param name="whitelist"></param> | 554 | /// <param name="whitelist"></param> |
555 | /// <returns>true if the url matches an entry on the whitelist, false otherwise</returns> | 555 | /// <returns>true if the url matches an entry on the whitelist, false otherwise</returns> |
556 | protected bool CheckUrlAgainstWhitelist(string rawUrl, string[] whitelist) | 556 | protected bool CheckUrlAgainstWhitelist(string rawUrl, string[] whitelist) |
557 | { | 557 | { |
558 | Uri url = new Uri(rawUrl); | 558 | Uri url = new Uri(rawUrl); |
559 | 559 | ||
560 | foreach (string origWlUrl in whitelist) | 560 | foreach (string origWlUrl in whitelist) |
@@ -575,7 +575,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
575 | if (url.Host.Contains(wlUrl)) | 575 | if (url.Host.Contains(wlUrl)) |
576 | { | 576 | { |
577 | // m_log.DebugFormat("[MOAP]: Whitelist URL {0} matches {1}", origWlUrl, rawUrl); | 577 | // m_log.DebugFormat("[MOAP]: Whitelist URL {0} matches {1}", origWlUrl, rawUrl); |
578 | return true; | 578 | return true; |
579 | } | 579 | } |
580 | } | 580 | } |
581 | else | 581 | else |
@@ -588,7 +588,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
588 | return true; | 588 | return true; |
589 | } | 589 | } |
590 | } | 590 | } |
591 | } | 591 | } |
592 | 592 | ||
593 | return false; | 593 | return false; |
594 | } | 594 | } |
diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index 12750c5..db50339 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs | |||
@@ -49,8 +49,8 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell | |||
49 | protected Scene m_scene = null; | 49 | protected Scene m_scene = null; |
50 | protected IDialogModule m_dialogModule; | 50 | protected IDialogModule m_dialogModule; |
51 | 51 | ||
52 | public string Name { get { return "Object BuySell Module"; } } | 52 | public string Name { get { return "Object BuySell Module"; } } |
53 | public Type ReplaceableInterface { get { return null; } } | 53 | public Type ReplaceableInterface { get { return null; } } |
54 | 54 | ||
55 | public void Initialise(IConfigSource source) {} | 55 | public void Initialise(IConfigSource source) {} |
56 | 56 | ||
@@ -78,8 +78,8 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell | |||
78 | 78 | ||
79 | public void SubscribeToClientEvents(IClientAPI client) | 79 | public void SubscribeToClientEvents(IClientAPI client) |
80 | { | 80 | { |
81 | client.OnObjectSaleInfo += ObjectSaleInfo; | 81 | client.OnObjectSaleInfo += ObjectSaleInfo; |
82 | } | 82 | } |
83 | 83 | ||
84 | protected void ObjectSaleInfo( | 84 | protected void ObjectSaleInfo( |
85 | IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice) | 85 | IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice) |
@@ -99,7 +99,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell | |||
99 | part.ParentGroup.HasGroupChanged = true; | 99 | part.ParentGroup.HasGroupChanged = true; |
100 | 100 | ||
101 | part.GetProperties(client); | 101 | part.GetProperties(client); |
102 | } | 102 | } |
103 | 103 | ||
104 | public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType) | 104 | public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType) |
105 | { | 105 | { |
@@ -225,7 +225,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell | |||
225 | } | 225 | } |
226 | else | 226 | else |
227 | { | 227 | { |
228 | if (m_dialogModule != null) | 228 | if (m_dialogModule != null) |
229 | m_dialogModule.SendAlertToUser(remoteClient, "Cannot buy now. Your inventory is unavailable"); | 229 | m_dialogModule.SendAlertToUser(remoteClient, "Cannot buy now. Your inventory is unavailable"); |
230 | return false; | 230 | return false; |
231 | } | 231 | } |
@@ -261,6 +261,6 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell | |||
261 | } | 261 | } |
262 | 262 | ||
263 | return true; | 263 | return true; |
264 | } | 264 | } |
265 | } | 265 | } |
266 | } \ No newline at end of file | 266 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index b1747ef..ecfd211 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -397,13 +397,13 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
397 | m_groupsModule = m_scene.RequestModuleInterface<IGroupsModule>(); | 397 | m_groupsModule = m_scene.RequestModuleInterface<IGroupsModule>(); |
398 | 398 | ||
399 | if (m_groupsModule == null) | 399 | if (m_groupsModule == null) |
400 | m_log.Warn("[PERMISSIONS]: Groups module not found, group permissions will not work"); | 400 | m_log.Warn("[PERMISSIONS]: Groups module not found, group permissions will not work"); |
401 | 401 | ||
402 | m_moapModule = m_scene.RequestModuleInterface<IMoapModule>(); | 402 | m_moapModule = m_scene.RequestModuleInterface<IMoapModule>(); |
403 | 403 | ||
404 | // This log line will be commented out when no longer required for debugging | 404 | // This log line will be commented out when no longer required for debugging |
405 | // if (m_moapModule == null) | 405 | // if (m_moapModule == null) |
406 | // m_log.Warn("[PERMISSIONS]: Media on a prim module not found, media on a prim permissions will not work"); | 406 | // m_log.Warn("[PERMISSIONS]: Media on a prim module not found, media on a prim permissions will not work"); |
407 | } | 407 | } |
408 | 408 | ||
409 | public void Close() | 409 | public void Close() |
@@ -1906,7 +1906,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1906 | } | 1906 | } |
1907 | 1907 | ||
1908 | private bool CanControlPrimMedia(UUID agentID, UUID primID, int face) | 1908 | private bool CanControlPrimMedia(UUID agentID, UUID primID, int face) |
1909 | { | 1909 | { |
1910 | // m_log.DebugFormat( | 1910 | // m_log.DebugFormat( |
1911 | // "[PERMISSONS]: Performing CanControlPrimMedia check with agentID {0}, primID {1}, face {2}", | 1911 | // "[PERMISSONS]: Performing CanControlPrimMedia check with agentID {0}, primID {1}, face {2}", |
1912 | // agentID, primID, face); | 1912 | // agentID, primID, face); |
@@ -1918,7 +1918,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1918 | if (null == part) | 1918 | if (null == part) |
1919 | return false; | 1919 | return false; |
1920 | 1920 | ||
1921 | MediaEntry me = m_moapModule.GetMediaEntry(part, face); | 1921 | MediaEntry me = m_moapModule.GetMediaEntry(part, face); |
1922 | 1922 | ||
1923 | // If there is no existing media entry then it can be controlled (in this context, created). | 1923 | // If there is no existing media entry then it can be controlled (in this context, created). |
1924 | if (null == me) | 1924 | if (null == me) |
@@ -1929,7 +1929,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1929 | // agentID, primID, face, me.ControlPermissions); | 1929 | // agentID, primID, face, me.ControlPermissions); |
1930 | 1930 | ||
1931 | return GenericPrimMediaPermission(part, agentID, me.ControlPermissions); | 1931 | return GenericPrimMediaPermission(part, agentID, me.ControlPermissions); |
1932 | } | 1932 | } |
1933 | 1933 | ||
1934 | private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face) | 1934 | private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face) |
1935 | { | 1935 | { |
@@ -1952,15 +1952,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1952 | 1952 | ||
1953 | // m_log.DebugFormat( | 1953 | // m_log.DebugFormat( |
1954 | // "[PERMISSIONS]: Checking CanInteractWithPrimMedia for {0} on {1} face {2} with interact permissions {3}", | 1954 | // "[PERMISSIONS]: Checking CanInteractWithPrimMedia for {0} on {1} face {2} with interact permissions {3}", |
1955 | // agentID, primID, face, me.InteractPermissions); | 1955 | // agentID, primID, face, me.InteractPermissions); |
1956 | 1956 | ||
1957 | return GenericPrimMediaPermission(part, agentID, me.InteractPermissions); | 1957 | return GenericPrimMediaPermission(part, agentID, me.InteractPermissions); |
1958 | } | 1958 | } |
1959 | 1959 | ||
1960 | private bool GenericPrimMediaPermission(SceneObjectPart part, UUID agentID, MediaPermission perms) | 1960 | private bool GenericPrimMediaPermission(SceneObjectPart part, UUID agentID, MediaPermission perms) |
1961 | { | 1961 | { |
1962 | // if (IsAdministrator(agentID)) | 1962 | // if (IsAdministrator(agentID)) |
1963 | // return true; | 1963 | // return true; |
1964 | 1964 | ||
1965 | if ((perms & MediaPermission.Anyone) == MediaPermission.Anyone) | 1965 | if ((perms & MediaPermission.Anyone) == MediaPermission.Anyone) |
1966 | return true; | 1966 | return true; |
@@ -1969,15 +1969,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1969 | { | 1969 | { |
1970 | if (agentID == part.OwnerID) | 1970 | if (agentID == part.OwnerID) |
1971 | return true; | 1971 | return true; |
1972 | } | 1972 | } |
1973 | 1973 | ||
1974 | if ((perms & MediaPermission.Group) == MediaPermission.Group) | 1974 | if ((perms & MediaPermission.Group) == MediaPermission.Group) |
1975 | { | 1975 | { |
1976 | if (IsGroupMember(part.GroupID, agentID, 0)) | 1976 | if (IsGroupMember(part.GroupID, agentID, 0)) |
1977 | return true; | 1977 | return true; |
1978 | } | 1978 | } |
1979 | 1979 | ||
1980 | return false; | 1980 | return false; |
1981 | } | 1981 | } |
1982 | } | 1982 | } |
1983 | } \ No newline at end of file | 1983 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs b/OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs index bef7fe4..5067ebd 100644 --- a/OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs +++ b/OpenSim/Region/CoreModules/World/Serialiser/SerialiseObjects.cs | |||
@@ -80,7 +80,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser | |||
80 | { | 80 | { |
81 | string xmlstream = "<scene>"; | 81 | string xmlstream = "<scene>"; |
82 | 82 | ||
83 | List<EntityBase> EntityList = scene.GetEntities(); | 83 | EntityBase[] EntityList = scene.GetEntities(); |
84 | List<string> EntityXml = new List<string>(); | 84 | List<string> EntityXml = new List<string>(); |
85 | 85 | ||
86 | foreach (EntityBase ent in EntityList) | 86 | foreach (EntityBase ent in EntityList) |
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs b/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs index 58e4261..98fe493 100644 --- a/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs +++ b/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs | |||
@@ -165,12 +165,12 @@ namespace OpenSim.Region.CoreModules.World.Serialiser | |||
165 | return SceneXmlLoader.SaveGroupToXml2(grp); | 165 | return SceneXmlLoader.SaveGroupToXml2(grp); |
166 | } | 166 | } |
167 | 167 | ||
168 | public void SavePrimListToXml2(List<EntityBase> entityList, string fileName) | 168 | public void SavePrimListToXml2(EntityBase[] entityList, string fileName) |
169 | { | 169 | { |
170 | SceneXmlLoader.SavePrimListToXml2(entityList, fileName); | 170 | SceneXmlLoader.SavePrimListToXml2(entityList, fileName); |
171 | } | 171 | } |
172 | 172 | ||
173 | public void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, Vector3 min, Vector3 max) | 173 | public void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max) |
174 | { | 174 | { |
175 | SceneXmlLoader.SavePrimListToXml2(entityList, stream, min, max); | 175 | SceneXmlLoader.SavePrimListToXml2(entityList, stream, min, max); |
176 | } | 176 | } |
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index d4166d0..4611352 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | |||
@@ -816,7 +816,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
816 | { | 816 | { |
817 | //m_log.Debug("Terrain packet unacked, resending patch: " + patchX + " , " + patchY); | 817 | //m_log.Debug("Terrain packet unacked, resending patch: " + patchX + " , " + patchY); |
818 | client.SendLayerData(patchX, patchY, m_scene.Heightmap.GetFloatsSerialised()); | 818 | client.SendLayerData(patchX, patchY, m_scene.Heightmap.GetFloatsSerialised()); |
819 | } | 819 | } |
820 | 820 | ||
821 | private void StoreUndoState() | 821 | private void StoreUndoState() |
822 | { | 822 | { |
diff --git a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs index 9736b73..6bac555 100644 --- a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs +++ b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs | |||
@@ -425,7 +425,7 @@ namespace OpenSim.Region.CoreModules | |||
425 | { | 425 | { |
426 | if (m_ready) | 426 | if (m_ready) |
427 | { | 427 | { |
428 | if(m_scene.GetRootAgentCount() > 0) | 428 | if (m_scene.GetRootAgentCount() > 0) |
429 | { | 429 | { |
430 | // Ask wind plugin to generate a LL wind array to be cached locally | 430 | // Ask wind plugin to generate a LL wind array to be cached locally |
431 | // Try not to update this too often, as it may involve array copies | 431 | // Try not to update this too often, as it may involve array copies |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs index 57eff8a..1bd1371 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/MapImageModule.cs | |||
@@ -212,7 +212,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
212 | double[,] hm = whichScene.Heightmap.GetDoubles(); | 212 | double[,] hm = whichScene.Heightmap.GetDoubles(); |
213 | tc = Environment.TickCount; | 213 | tc = Environment.TickCount; |
214 | m_log.Info("[MAPTILE]: Generating Maptile Step 2: Object Volume Profile"); | 214 | m_log.Info("[MAPTILE]: Generating Maptile Step 2: Object Volume Profile"); |
215 | List<EntityBase> objs = whichScene.GetEntities(); | 215 | EntityBase[] objs = whichScene.GetEntities(); |
216 | Dictionary<uint, DrawStruct> z_sort = new Dictionary<uint, DrawStruct>(); | 216 | Dictionary<uint, DrawStruct> z_sort = new Dictionary<uint, DrawStruct>(); |
217 | //SortedList<float, RectangleDrawStruct> z_sort = new SortedList<float, RectangleDrawStruct>(); | 217 | //SortedList<float, RectangleDrawStruct> z_sort = new SortedList<float, RectangleDrawStruct>(); |
218 | List<float> z_sortheights = new List<float>(); | 218 | List<float> z_sortheights = new List<float>(); |
@@ -228,7 +228,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
228 | SceneObjectGroup mapdot = (SceneObjectGroup)obj; | 228 | SceneObjectGroup mapdot = (SceneObjectGroup)obj; |
229 | Color mapdotspot = Color.Gray; // Default color when prim color is white | 229 | Color mapdotspot = Color.Gray; // Default color when prim color is white |
230 | 230 | ||
231 | // Loop over prim in group | 231 | // Loop over prim in group |
232 | List<SceneObjectPart> partList = null; | 232 | List<SceneObjectPart> partList = null; |
233 | lock (mapdot.Children) | 233 | lock (mapdot.Children) |
234 | partList = new List<SceneObjectPart>(mapdot.Children.Values); | 234 | partList = new List<SceneObjectPart>(mapdot.Children.Values); |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index f036d85..fbc8a50 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |||
@@ -307,7 +307,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
307 | lock (m_rootAgents) | 307 | lock (m_rootAgents) |
308 | { | 308 | { |
309 | m_rootAgents.Remove(AgentId); | 309 | m_rootAgents.Remove(AgentId); |
310 | if(m_rootAgents.Count == 0) | 310 | if (m_rootAgents.Count == 0) |
311 | StopThread(); | 311 | StopThread(); |
312 | } | 312 | } |
313 | } | 313 | } |
diff --git a/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs b/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs index 3c39f9e..5e75cae 100644 --- a/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs +++ b/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs | |||
@@ -101,7 +101,8 @@ namespace OpenSim.Region.DataSnapshot.Providers | |||
101 | XmlNode parent = nodeFactory.CreateNode(XmlNodeType.Element, "objectdata", ""); | 101 | XmlNode parent = nodeFactory.CreateNode(XmlNodeType.Element, "objectdata", ""); |
102 | XmlNode node; | 102 | XmlNode node; |
103 | 103 | ||
104 | foreach (EntityBase entity in m_scene.Entities) | 104 | EntityBase[] entities = m_scene.Entities.GetEntities(); |
105 | foreach (EntityBase entity in entities) | ||
105 | { | 106 | { |
106 | // only objects, not avatars | 107 | // only objects, not avatars |
107 | if (entity is SceneObjectGroup) | 108 | if (entity is SceneObjectGroup) |
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs index 59c035f..6a0fb63 100644 --- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs | |||
@@ -56,7 +56,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
56 | /// <param name="rot"></param> | 56 | /// <param name="rot"></param> |
57 | /// <param name="attachPos"></param> | 57 | /// <param name="attachPos"></param> |
58 | /// <param name="silent"></param> | 58 | /// <param name="silent"></param> |
59 | /// <returns>true if the object was successfully attached, false otherwise</returns> | 59 | /// <returns>true if the object was successfully attached, false otherwise</returns> |
60 | bool AttachObject( | 60 | bool AttachObject( |
61 | IClientAPI remoteClient, SceneObjectGroup grp, uint AttachmentPt, bool silent); | 61 | IClientAPI remoteClient, SceneObjectGroup grp, uint AttachmentPt, bool silent); |
62 | 62 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs index f5cd528..6289f7a 100644 --- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs +++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs | |||
@@ -202,7 +202,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
202 | /// Backup the inventory to the given data store | 202 | /// Backup the inventory to the given data store |
203 | /// </summary> | 203 | /// </summary> |
204 | /// <param name="datastore"></param> | 204 | /// <param name="datastore"></param> |
205 | void ProcessInventoryBackup(IRegionDataStore datastore); | 205 | void ProcessInventoryBackup(ISimulationDataService datastore); |
206 | 206 | ||
207 | uint MaskEffectivePermissions(); | 207 | uint MaskEffectivePermissions(); |
208 | 208 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs new file mode 100644 index 0000000..95c9659 --- /dev/null +++ b/OpenSim/Region/Framework/Interfaces/IEstateDataService.cs | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenSim.Framework; | ||
31 | using OpenMetaverse; | ||
32 | |||
33 | namespace OpenSim.Region.Framework.Interfaces | ||
34 | { | ||
35 | public interface IEstateDataService | ||
36 | { | ||
37 | EstateSettings LoadEstateSettings(UUID regionID, bool create); | ||
38 | EstateSettings LoadEstateSettings(int estateID); | ||
39 | void StoreEstateSettings(EstateSettings es); | ||
40 | List<int> GetEstates(string search); | ||
41 | bool LinkRegion(UUID regionID, int estateID); | ||
42 | List<UUID> GetRegions(int estateID); | ||
43 | bool DeleteEstate(int estateID); | ||
44 | } | ||
45 | } | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs b/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs index 2c091e7..4c501f6 100644 --- a/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IGroupsModule.cs | |||
@@ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
65 | /// Get a group | 65 | /// Get a group |
66 | /// </summary> | 66 | /// </summary> |
67 | /// <param name="GroupID">ID of the group</param> | 67 | /// <param name="GroupID">ID of the group</param> |
68 | /// <returns>The group's data. Null if there is no such group.</returns> | 68 | /// <returns>The group's data. Null if there is no such group.</returns> |
69 | GroupRecord GetGroupRecord(UUID GroupID); | 69 | GroupRecord GetGroupRecord(UUID GroupID); |
70 | 70 | ||
71 | void ActivateGroup(IClientAPI remoteClient, UUID groupID); | 71 | void ActivateGroup(IClientAPI remoteClient, UUID groupID); |
@@ -74,14 +74,14 @@ namespace OpenSim.Region.Framework.Interfaces | |||
74 | List<GroupRolesData> GroupRoleDataRequest(IClientAPI remoteClient, UUID groupID); | 74 | List<GroupRolesData> GroupRoleDataRequest(IClientAPI remoteClient, UUID groupID); |
75 | List<GroupRoleMembersData> GroupRoleMembersRequest(IClientAPI remoteClient, UUID groupID); | 75 | List<GroupRoleMembersData> GroupRoleMembersRequest(IClientAPI remoteClient, UUID groupID); |
76 | GroupProfileData GroupProfileRequest(IClientAPI remoteClient, UUID groupID); | 76 | GroupProfileData GroupProfileRequest(IClientAPI remoteClient, UUID groupID); |
77 | GroupMembershipData[] GetMembershipData(UUID UserID); | 77 | GroupMembershipData[] GetMembershipData(UUID UserID); |
78 | GroupMembershipData GetMembershipData(UUID GroupID, UUID UserID); | 78 | GroupMembershipData GetMembershipData(UUID GroupID, UUID UserID); |
79 | 79 | ||
80 | void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish); | 80 | void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish); |
81 | 81 | ||
82 | void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile); | 82 | void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile); |
83 | 83 | ||
84 | void GroupTitleUpdate(IClientAPI remoteClient, UUID GroupID, UUID TitleRoleID); | 84 | void GroupTitleUpdate(IClientAPI remoteClient, UUID GroupID, UUID TitleRoleID); |
85 | 85 | ||
86 | GroupNoticeData[] GroupNoticesListRequest(IClientAPI remoteClient, UUID GroupID); | 86 | GroupNoticeData[] GroupNoticesListRequest(IClientAPI remoteClient, UUID GroupID); |
87 | string GetGroupTitle(UUID avatarID); | 87 | string GetGroupTitle(UUID avatarID); |
diff --git a/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs b/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs index 01066e6..ddf7565 100644 --- a/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs | |||
@@ -43,14 +43,14 @@ namespace OpenSim.Region.Framework.Interfaces | |||
43 | /// <param name="reportedException">Contains the exception generated if the save did not succeed</param> | 43 | /// <param name="reportedException">Contains the exception generated if the save did not succeed</param> |
44 | public delegate void InventoryArchiveSaved( | 44 | public delegate void InventoryArchiveSaved( |
45 | Guid id, bool succeeded, UserAccount userInfo, string invPath, Stream saveStream, Exception reportedException); | 45 | Guid id, bool succeeded, UserAccount userInfo, string invPath, Stream saveStream, Exception reportedException); |
46 | 46 | ||
47 | public interface IInventoryArchiverModule | 47 | public interface IInventoryArchiverModule |
48 | { | 48 | { |
49 | /// <summary> | 49 | /// <summary> |
50 | /// Fired when an archive inventory save has been completed. | 50 | /// Fired when an archive inventory save has been completed. |
51 | /// </summary> | 51 | /// </summary> |
52 | event InventoryArchiveSaved OnInventoryArchiveSaved; | 52 | event InventoryArchiveSaved OnInventoryArchiveSaved; |
53 | 53 | ||
54 | /// <summary> | 54 | /// <summary> |
55 | /// Dearchive a user's inventory folder from the given stream | 55 | /// Dearchive a user's inventory folder from the given stream |
56 | /// </summary> | 56 | /// </summary> |
@@ -60,7 +60,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
60 | /// <param name="loadStream">The stream from which the inventory archive will be loaded</param> | 60 | /// <param name="loadStream">The stream from which the inventory archive will be loaded</param> |
61 | /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> | 61 | /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> |
62 | bool DearchiveInventory(string firstName, string lastName, string invPath, string pass, Stream loadStream); | 62 | bool DearchiveInventory(string firstName, string lastName, string invPath, string pass, Stream loadStream); |
63 | 63 | ||
64 | /// <summary> | 64 | /// <summary> |
65 | /// Dearchive a user's inventory folder from the given stream | 65 | /// Dearchive a user's inventory folder from the given stream |
66 | /// </summary> | 66 | /// </summary> |
@@ -72,8 +72,8 @@ namespace OpenSim.Region.Framework.Interfaces | |||
72 | /// the loaded IAR with existing folders where possible.</param> | 72 | /// the loaded IAR with existing folders where possible.</param> |
73 | /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> | 73 | /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> |
74 | bool DearchiveInventory( | 74 | bool DearchiveInventory( |
75 | string firstName, string lastName, string invPath, string pass, Stream loadStream, | 75 | string firstName, string lastName, string invPath, string pass, Stream loadStream, |
76 | Dictionary<string, object> options); | 76 | Dictionary<string, object> options); |
77 | 77 | ||
78 | /// <summary> | 78 | /// <summary> |
79 | /// Archive a user's inventory folder to the given stream | 79 | /// Archive a user's inventory folder to the given stream |
@@ -85,7 +85,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
85 | /// <param name="saveStream">The stream to which the inventory archive will be saved</param> | 85 | /// <param name="saveStream">The stream to which the inventory archive will be saved</param> |
86 | /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> | 86 | /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> |
87 | bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream); | 87 | bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream); |
88 | 88 | ||
89 | /// <summary> | 89 | /// <summary> |
90 | /// Archive a user's inventory folder to the given stream | 90 | /// Archive a user's inventory folder to the given stream |
91 | /// </summary> | 91 | /// </summary> |
@@ -97,7 +97,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
97 | /// <param name="options">Archiving options. Currently, there are none.</param> | 97 | /// <param name="options">Archiving options. Currently, there are none.</param> |
98 | /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> | 98 | /// <returns>true if the first stage of the operation succeeded, false otherwise</returns> |
99 | bool ArchiveInventory( | 99 | bool ArchiveInventory( |
100 | Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream, | 100 | Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream, |
101 | Dictionary<string, object> options); | 101 | Dictionary<string, object> options); |
102 | } | 102 | } |
103 | } | 103 | } |
diff --git a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs index 24b6860..1d3d240 100644 --- a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs | |||
@@ -63,5 +63,5 @@ namespace OpenSim.Region.Framework.Interfaces | |||
63 | /// <param name="part"></param> | 63 | /// <param name="part"></param> |
64 | /// <param name="face">/param> | 64 | /// <param name="face">/param> |
65 | void ClearMediaEntry(SceneObjectPart part, int face); | 65 | void ClearMediaEntry(SceneObjectPart part, int face); |
66 | } | 66 | } |
67 | } \ No newline at end of file | 67 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs b/OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs index e7562a5..18758c8 100644 --- a/OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IRegionSerialiserModule.cs | |||
@@ -90,7 +90,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
90 | /// </summary> | 90 | /// </summary> |
91 | /// <param name="entityList"></param> | 91 | /// <param name="entityList"></param> |
92 | /// <param name="fileName"></param> | 92 | /// <param name="fileName"></param> |
93 | void SavePrimListToXml2(List<EntityBase> entityList, string fileName); | 93 | void SavePrimListToXml2(EntityBase[] entityList, string fileName); |
94 | 94 | ||
95 | /// <summary> | 95 | /// <summary> |
96 | /// Save a set of prims in the xml2 format, optionally specifying a bounding box for which | 96 | /// Save a set of prims in the xml2 format, optionally specifying a bounding box for which |
@@ -101,7 +101,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
101 | /// <param name="stream"></param> | 101 | /// <param name="stream"></param> |
102 | /// <param name="min"></param> | 102 | /// <param name="min"></param> |
103 | /// <param name="max"></param> | 103 | /// <param name="max"></param> |
104 | void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, Vector3 min, Vector3 max); | 104 | void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max); |
105 | 105 | ||
106 | void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName); | 106 | void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName); |
107 | 107 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs b/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs new file mode 100644 index 0000000..edaa07c --- /dev/null +++ b/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenMetaverse; | ||
31 | using OpenSim.Framework; | ||
32 | using OpenSim.Region.Framework.Scenes; | ||
33 | |||
34 | namespace OpenSim.Region.Framework.Interfaces | ||
35 | { | ||
36 | public interface ISimulationDataService | ||
37 | { | ||
38 | /// <summary> | ||
39 | /// Stores all object's details apart from inventory | ||
40 | /// </summary> | ||
41 | /// <param name="obj"></param> | ||
42 | /// <param name="regionUUID"></param> | ||
43 | void StoreObject(SceneObjectGroup obj, UUID regionUUID); | ||
44 | |||
45 | /// <summary> | ||
46 | /// Entirely removes the object, including inventory | ||
47 | /// </summary> | ||
48 | /// <param name="uuid"></param> | ||
49 | /// <param name="regionUUID"></param> | ||
50 | /// <returns></returns> | ||
51 | void RemoveObject(UUID uuid, UUID regionUUID); | ||
52 | |||
53 | /// <summary> | ||
54 | /// Store a prim's inventory | ||
55 | /// </summary> | ||
56 | /// <returns></returns> | ||
57 | void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items); | ||
58 | |||
59 | /// <summary> | ||
60 | /// Load persisted objects from region storage. | ||
61 | /// </summary> | ||
62 | /// <param name="regionUUID">the Region UUID</param> | ||
63 | /// <returns>List of loaded groups</returns> | ||
64 | List<SceneObjectGroup> LoadObjects(UUID regionUUID); | ||
65 | |||
66 | /// <summary> | ||
67 | /// Store a terrain revision in region storage | ||
68 | /// </summary> | ||
69 | /// <param name="ter">HeightField data</param> | ||
70 | /// <param name="regionID">region UUID</param> | ||
71 | void StoreTerrain(double[,] terrain, UUID regionID); | ||
72 | |||
73 | /// <summary> | ||
74 | /// Load the latest terrain revision from region storage | ||
75 | /// </summary> | ||
76 | /// <param name="regionID">the region UUID</param> | ||
77 | /// <returns>Heightfield data</returns> | ||
78 | double[,] LoadTerrain(UUID regionID); | ||
79 | |||
80 | void StoreLandObject(ILandObject Parcel); | ||
81 | |||
82 | /// <summary> | ||
83 | /// <list type="bullet"> | ||
84 | /// <item>delete from land where UUID=globalID</item> | ||
85 | /// <item>delete from landaccesslist where LandUUID=globalID</item> | ||
86 | /// </list> | ||
87 | /// </summary> | ||
88 | /// <param name="globalID"></param> | ||
89 | void RemoveLandObject(UUID globalID); | ||
90 | |||
91 | List<LandData> LoadLandObjects(UUID regionUUID); | ||
92 | |||
93 | void StoreRegionSettings(RegionSettings rs); | ||
94 | RegionSettings LoadRegionSettings(UUID regionUUID); | ||
95 | RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID); | ||
96 | void StoreRegionWindlightSettings(RegionLightShareData wl); | ||
97 | } | ||
98 | } | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs index 3e8e196..0a4d531 100644 --- a/OpenSim/Region/Framework/Interfaces/IRegionDataStore.cs +++ b/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs | |||
@@ -32,7 +32,7 @@ using OpenSim.Region.Framework.Scenes; | |||
32 | 32 | ||
33 | namespace OpenSim.Region.Framework.Interfaces | 33 | namespace OpenSim.Region.Framework.Interfaces |
34 | { | 34 | { |
35 | public interface IRegionDataStore | 35 | public interface ISimulationDataStore |
36 | { | 36 | { |
37 | /// <summary> | 37 | /// <summary> |
38 | /// Initialises the data storage engine | 38 | /// Initialises the data storage engine |
diff --git a/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs b/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs index d6e31f4..65c57a6 100644 --- a/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs | |||
@@ -31,7 +31,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
31 | { | 31 | { |
32 | /// <summary> | 32 | /// <summary> |
33 | /// Generate a map tile for the scene. a terrain texture for this scene | 33 | /// Generate a map tile for the scene. a terrain texture for this scene |
34 | /// </summary> | 34 | /// </summary> |
35 | void GenerateMaptile(); | 35 | void GenerateMaptile(); |
36 | } | 36 | } |
37 | } | 37 | } |
diff --git a/OpenSim/Region/Framework/Scenes/EntityManager.cs b/OpenSim/Region/Framework/Scenes/EntityManager.cs index c246e32..0defa93 100644 --- a/OpenSim/Region/Framework/Scenes/EntityManager.cs +++ b/OpenSim/Region/Framework/Scenes/EntityManager.cs | |||
@@ -34,227 +34,89 @@ using OpenMetaverse; | |||
34 | 34 | ||
35 | namespace OpenSim.Region.Framework.Scenes | 35 | namespace OpenSim.Region.Framework.Scenes |
36 | { | 36 | { |
37 | public class EntityManager : IEnumerable<EntityBase> | 37 | public class EntityManager |
38 | { | 38 | { |
39 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 39 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
40 | private readonly Dictionary<UUID,EntityBase> m_eb_uuid = new Dictionary<UUID, EntityBase>(); | 40 | private readonly DoubleDictionary<UUID, uint, EntityBase> m_entities = new DoubleDictionary<UUID, uint, EntityBase>(); |
41 | private readonly Dictionary<uint, EntityBase> m_eb_localID = new Dictionary<uint, EntityBase>(); | ||
42 | //private readonly Dictionary<UUID, ScenePresence> m_pres_uuid = new Dictionary<UUID, ScenePresence>(); | ||
43 | private System.Threading.ReaderWriterLockSlim m_lock = new System.Threading.ReaderWriterLockSlim(); | ||
44 | 41 | ||
45 | [Obsolete("Use Add() instead.")] | 42 | public int Count |
46 | public void Add(UUID id, EntityBase eb) | ||
47 | { | 43 | { |
48 | Add(eb); | 44 | get { return m_entities.Count; } |
49 | } | 45 | } |
50 | 46 | ||
51 | public void Add(EntityBase entity) | 47 | public void Add(EntityBase entity) |
52 | { | 48 | { |
53 | m_lock.EnterWriteLock(); | 49 | m_entities.Add(entity.UUID, entity.LocalId, entity); |
54 | try | ||
55 | { | ||
56 | try | ||
57 | { | ||
58 | m_eb_uuid.Add(entity.UUID, entity); | ||
59 | m_eb_localID.Add(entity.LocalId, entity); | ||
60 | } | ||
61 | catch(Exception e) | ||
62 | { | ||
63 | m_log.ErrorFormat("Add Entity failed: {0}", e.Message); | ||
64 | } | ||
65 | } | ||
66 | finally | ||
67 | { | ||
68 | m_lock.ExitWriteLock(); | ||
69 | } | ||
70 | } | ||
71 | |||
72 | public void InsertOrReplace(EntityBase entity) | ||
73 | { | ||
74 | m_lock.EnterWriteLock(); | ||
75 | try | ||
76 | { | ||
77 | try | ||
78 | { | ||
79 | m_eb_uuid[entity.UUID] = entity; | ||
80 | m_eb_localID[entity.LocalId] = entity; | ||
81 | } | ||
82 | catch(Exception e) | ||
83 | { | ||
84 | m_log.ErrorFormat("Insert or Replace Entity failed: {0}", e.Message); | ||
85 | } | ||
86 | } | ||
87 | finally | ||
88 | { | ||
89 | m_lock.ExitWriteLock(); | ||
90 | } | ||
91 | } | 50 | } |
92 | 51 | ||
93 | public void Clear() | 52 | public void Clear() |
94 | { | 53 | { |
95 | m_lock.EnterWriteLock(); | 54 | m_entities.Clear(); |
96 | try | ||
97 | { | ||
98 | m_eb_uuid.Clear(); | ||
99 | m_eb_localID.Clear(); | ||
100 | } | ||
101 | finally | ||
102 | { | ||
103 | m_lock.ExitWriteLock(); | ||
104 | } | ||
105 | } | ||
106 | |||
107 | public int Count | ||
108 | { | ||
109 | get | ||
110 | { | ||
111 | return m_eb_uuid.Count; | ||
112 | } | ||
113 | } | 55 | } |
114 | 56 | ||
115 | public bool ContainsKey(UUID id) | 57 | public bool ContainsKey(UUID id) |
116 | { | 58 | { |
117 | try | 59 | return m_entities.ContainsKey(id); |
118 | { | ||
119 | return m_eb_uuid.ContainsKey(id); | ||
120 | } | ||
121 | catch | ||
122 | { | ||
123 | return false; | ||
124 | } | ||
125 | } | 60 | } |
126 | 61 | ||
127 | public bool ContainsKey(uint localID) | 62 | public bool ContainsKey(uint localID) |
128 | { | 63 | { |
129 | try | 64 | return m_entities.ContainsKey(localID); |
130 | { | ||
131 | return m_eb_localID.ContainsKey(localID); | ||
132 | } | ||
133 | catch | ||
134 | { | ||
135 | return false; | ||
136 | } | ||
137 | } | 65 | } |
138 | 66 | ||
139 | public bool Remove(uint localID) | 67 | public bool Remove(uint localID) |
140 | { | 68 | { |
141 | m_lock.EnterWriteLock(); | 69 | return m_entities.Remove(localID); |
142 | try | ||
143 | { | ||
144 | try | ||
145 | { | ||
146 | bool a = false; | ||
147 | EntityBase entity; | ||
148 | if (m_eb_localID.TryGetValue(localID, out entity)) | ||
149 | a = m_eb_uuid.Remove(entity.UUID); | ||
150 | |||
151 | bool b = m_eb_localID.Remove(localID); | ||
152 | return a && b; | ||
153 | } | ||
154 | catch (Exception e) | ||
155 | { | ||
156 | m_log.ErrorFormat("Remove Entity failed for {0}", localID, e); | ||
157 | return false; | ||
158 | } | ||
159 | } | ||
160 | finally | ||
161 | { | ||
162 | m_lock.ExitWriteLock(); | ||
163 | } | ||
164 | } | 70 | } |
165 | 71 | ||
166 | public bool Remove(UUID id) | 72 | public bool Remove(UUID id) |
167 | { | 73 | { |
168 | m_lock.EnterWriteLock(); | 74 | return m_entities.Remove(id); |
169 | try | ||
170 | { | ||
171 | try | ||
172 | { | ||
173 | bool a = false; | ||
174 | EntityBase entity; | ||
175 | if (m_eb_uuid.TryGetValue(id, out entity)) | ||
176 | a = m_eb_localID.Remove(entity.LocalId); | ||
177 | |||
178 | bool b = m_eb_uuid.Remove(id); | ||
179 | return a && b; | ||
180 | } | ||
181 | catch (Exception e) | ||
182 | { | ||
183 | m_log.ErrorFormat("Remove Entity failed for {0}", id, e); | ||
184 | return false; | ||
185 | } | ||
186 | } | ||
187 | finally | ||
188 | { | ||
189 | m_lock.ExitWriteLock(); | ||
190 | } | ||
191 | } | 75 | } |
192 | 76 | ||
193 | public List<EntityBase> GetAllByType<T>() | 77 | public EntityBase[] GetAllByType<T>() |
194 | { | 78 | { |
195 | List<EntityBase> tmp = new List<EntityBase>(); | 79 | List<EntityBase> tmp = new List<EntityBase>(); |
196 | 80 | ||
197 | m_lock.EnterReadLock(); | 81 | m_entities.ForEach( |
198 | try | 82 | delegate(EntityBase entity) |
199 | { | ||
200 | try | ||
201 | { | ||
202 | foreach (KeyValuePair<UUID, EntityBase> pair in m_eb_uuid) | ||
203 | { | ||
204 | if (pair.Value is T) | ||
205 | { | ||
206 | tmp.Add(pair.Value); | ||
207 | } | ||
208 | } | ||
209 | } | ||
210 | catch (Exception e) | ||
211 | { | 83 | { |
212 | m_log.ErrorFormat("GetAllByType failed for {0}", e); | 84 | if (entity is T) |
213 | tmp = null; | 85 | tmp.Add(entity); |
214 | } | 86 | } |
215 | } | 87 | ); |
216 | finally | ||
217 | { | ||
218 | m_lock.ExitReadLock(); | ||
219 | } | ||
220 | 88 | ||
221 | return tmp; | 89 | return tmp.ToArray(); |
222 | } | 90 | } |
223 | 91 | ||
224 | public List<EntityBase> GetEntities() | 92 | public EntityBase[] GetEntities() |
225 | { | 93 | { |
226 | m_lock.EnterReadLock(); | 94 | List<EntityBase> tmp = new List<EntityBase>(m_entities.Count); |
227 | try | 95 | m_entities.ForEach(delegate(EntityBase entity) { tmp.Add(entity); }); |
228 | { | 96 | return tmp.ToArray(); |
229 | return new List<EntityBase>(m_eb_uuid.Values); | 97 | } |
230 | } | 98 | |
231 | finally | 99 | public void ForEach(Action<EntityBase> action) |
232 | { | 100 | { |
233 | m_lock.ExitReadLock(); | 101 | m_entities.ForEach(action); |
234 | } | 102 | } |
103 | |||
104 | public EntityBase Find(Predicate<EntityBase> predicate) | ||
105 | { | ||
106 | return m_entities.FindValue(predicate); | ||
235 | } | 107 | } |
236 | 108 | ||
237 | public EntityBase this[UUID id] | 109 | public EntityBase this[UUID id] |
238 | { | 110 | { |
239 | get | 111 | get |
240 | { | 112 | { |
241 | m_lock.EnterReadLock(); | 113 | EntityBase entity; |
242 | try | 114 | m_entities.TryGetValue(id, out entity); |
243 | { | 115 | return entity; |
244 | EntityBase entity; | ||
245 | if (m_eb_uuid.TryGetValue(id, out entity)) | ||
246 | return entity; | ||
247 | else | ||
248 | return null; | ||
249 | } | ||
250 | finally | ||
251 | { | ||
252 | m_lock.ExitReadLock(); | ||
253 | } | ||
254 | } | 116 | } |
255 | set | 117 | set |
256 | { | 118 | { |
257 | InsertOrReplace(value); | 119 | Add(value); |
258 | } | 120 | } |
259 | } | 121 | } |
260 | 122 | ||
@@ -262,65 +124,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
262 | { | 124 | { |
263 | get | 125 | get |
264 | { | 126 | { |
265 | m_lock.EnterReadLock(); | 127 | EntityBase entity; |
266 | try | 128 | m_entities.TryGetValue(localID, out entity); |
267 | { | 129 | return entity; |
268 | EntityBase entity; | ||
269 | if (m_eb_localID.TryGetValue(localID, out entity)) | ||
270 | return entity; | ||
271 | else | ||
272 | return null; | ||
273 | } | ||
274 | finally | ||
275 | { | ||
276 | m_lock.ExitReadLock(); | ||
277 | } | ||
278 | } | 130 | } |
279 | set | 131 | set |
280 | { | 132 | { |
281 | InsertOrReplace(value); | 133 | Add(value); |
282 | } | 134 | } |
283 | } | 135 | } |
284 | 136 | ||
285 | public bool TryGetValue(UUID key, out EntityBase obj) | 137 | public bool TryGetValue(UUID key, out EntityBase obj) |
286 | { | 138 | { |
287 | m_lock.EnterReadLock(); | 139 | return m_entities.TryGetValue(key, out obj); |
288 | try | ||
289 | { | ||
290 | return m_eb_uuid.TryGetValue(key, out obj); | ||
291 | } | ||
292 | finally | ||
293 | { | ||
294 | m_lock.ExitReadLock(); | ||
295 | } | ||
296 | } | 140 | } |
297 | 141 | ||
298 | public bool TryGetValue(uint key, out EntityBase obj) | 142 | public bool TryGetValue(uint key, out EntityBase obj) |
299 | { | 143 | { |
300 | m_lock.EnterReadLock(); | 144 | return m_entities.TryGetValue(key, out obj); |
301 | try | ||
302 | { | ||
303 | return m_eb_localID.TryGetValue(key, out obj); | ||
304 | } | ||
305 | finally | ||
306 | { | ||
307 | m_lock.ExitReadLock(); | ||
308 | } | ||
309 | } | ||
310 | |||
311 | /// <summary> | ||
312 | /// This could be optimised to work on the list 'live' rather than making a safe copy and iterating that. | ||
313 | /// </summary> | ||
314 | /// <returns></returns> | ||
315 | public IEnumerator<EntityBase> GetEnumerator() | ||
316 | { | ||
317 | return GetEntities().GetEnumerator(); | ||
318 | } | ||
319 | |||
320 | IEnumerator IEnumerable.GetEnumerator() | ||
321 | { | ||
322 | return GetEnumerator(); | ||
323 | } | 145 | } |
324 | |||
325 | } | 146 | } |
326 | } | 147 | } |
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 3fae5e6..e923932 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -61,7 +61,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
61 | 61 | ||
62 | public event OnTerrainUpdateDelegate OnTerrainUpdate; | 62 | public event OnTerrainUpdateDelegate OnTerrainUpdate; |
63 | 63 | ||
64 | public delegate void OnBackupDelegate(IRegionDataStore datastore, bool forceBackup); | 64 | public delegate void OnBackupDelegate(ISimulationDataService datastore, bool forceBackup); |
65 | 65 | ||
66 | public event OnBackupDelegate OnBackup; | 66 | public event OnBackupDelegate OnBackup; |
67 | 67 | ||
@@ -336,7 +336,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
336 | /// If the object is being attached, then the avatarID will be present. If the object is being detached then | 336 | /// If the object is being attached, then the avatarID will be present. If the object is being detached then |
337 | /// the avatarID is UUID.Zero (I know, this doesn't make much sense but now it's historical). | 337 | /// the avatarID is UUID.Zero (I know, this doesn't make much sense but now it's historical). |
338 | public delegate void Attach(uint localID, UUID itemID, UUID avatarID); | 338 | public delegate void Attach(uint localID, UUID itemID, UUID avatarID); |
339 | public event Attach OnAttach; | 339 | public event Attach OnAttach; |
340 | 340 | ||
341 | /// <summary> | 341 | /// <summary> |
342 | /// Called immediately after an object is loaded from storage. | 342 | /// Called immediately after an object is loaded from storage. |
@@ -348,7 +348,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
348 | /// Called immediately before an object is saved to storage. | 348 | /// Called immediately before an object is saved to storage. |
349 | /// </summary> | 349 | /// </summary> |
350 | /// <param name="persistingSo"> | 350 | /// <param name="persistingSo"> |
351 | /// The scene object being persisted. | 351 | /// The scene object being persisted. |
352 | /// This is actually a copy of the original scene object so changes made here will be saved to storage but will not be kept in memory. | 352 | /// This is actually a copy of the original scene object so changes made here will be saved to storage but will not be kept in memory. |
353 | /// </param> | 353 | /// </param> |
354 | /// <param name="originalSo"> | 354 | /// <param name="originalSo"> |
@@ -367,7 +367,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
367 | public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original, bool userExposed); | 367 | public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original, bool userExposed); |
368 | 368 | ||
369 | public delegate void RegionUp(GridRegion region); | 369 | public delegate void RegionUp(GridRegion region); |
370 | public event RegionUp OnRegionUp; | 370 | public event RegionUp OnRegionUp; |
371 | 371 | ||
372 | public class MoneyTransferArgs : EventArgs | 372 | public class MoneyTransferArgs : EventArgs |
373 | { | 373 | { |
@@ -688,7 +688,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
688 | } | 688 | } |
689 | } | 689 | } |
690 | 690 | ||
691 | public void TriggerOnBackup(IRegionDataStore dstore, bool forced) | 691 | public void TriggerOnBackup(ISimulationDataService dstore, bool forced) |
692 | { | 692 | { |
693 | OnBackupDelegate handlerOnAttach = OnBackup; | 693 | OnBackupDelegate handlerOnAttach = OnBackup; |
694 | if (handlerOnAttach != null) | 694 | if (handlerOnAttach != null) |
@@ -2087,7 +2087,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2087 | } | 2087 | } |
2088 | } | 2088 | } |
2089 | } | 2089 | } |
2090 | } | 2090 | } |
2091 | 2091 | ||
2092 | public void TriggerOnSceneObjectPreSave(SceneObjectGroup persistingSo, SceneObjectGroup originalSo) | 2092 | public void TriggerOnSceneObjectPreSave(SceneObjectGroup persistingSo, SceneObjectGroup originalSo) |
2093 | { | 2093 | { |
@@ -2129,7 +2129,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2129 | } | 2129 | } |
2130 | } | 2130 | } |
2131 | } | 2131 | } |
2132 | } | 2132 | } |
2133 | 2133 | ||
2134 | public void TriggerOnParcelPropertiesUpdateRequest(LandUpdateArgs args, | 2134 | public void TriggerOnParcelPropertiesUpdateRequest(LandUpdateArgs args, |
2135 | int local_id, IClientAPI remote_client) | 2135 | int local_id, IClientAPI remote_client) |
@@ -2151,6 +2151,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2151 | } | 2151 | } |
2152 | } | 2152 | } |
2153 | } | 2153 | } |
2154 | } | 2154 | } |
2155 | } | 2155 | } |
2156 | } | 2156 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Prioritizer.cs b/OpenSim/Region/Framework/Scenes/Prioritizer.cs index 3a3ec2b..c75f8ba 100644 --- a/OpenSim/Region/Framework/Scenes/Prioritizer.cs +++ b/OpenSim/Region/Framework/Scenes/Prioritizer.cs | |||
@@ -1,3 +1,30 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
1 | using System; | 28 | using System; |
2 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
3 | using log4net; | 30 | using log4net; |
@@ -35,7 +62,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
35 | 62 | ||
36 | /// <summary> | 63 | /// <summary> |
37 | /// This is added to the priority of all child prims, to make sure that the root prim update is sent to the | 64 | /// This is added to the priority of all child prims, to make sure that the root prim update is sent to the |
38 | /// viewer before child prim updates. | 65 | /// viewer before child prim updates. |
39 | /// The adjustment is added to child prims and subtracted from root prims, so the gap ends up | 66 | /// The adjustment is added to child prims and subtracted from root prims, so the gap ends up |
40 | /// being double. We do it both ways so that there is a still a priority delta even if the priority is already | 67 | /// being double. We do it both ways so that there is a still a priority delta even if the priority is already |
41 | /// double.MinValue or double.MaxValue. | 68 | /// double.MinValue or double.MaxValue. |
@@ -123,9 +150,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
123 | if (entity is SceneObjectPart) | 150 | if (entity is SceneObjectPart) |
124 | { | 151 | { |
125 | // Can't use Scene.GetGroupByPrim() here, since the entity may have been delete from the scene | 152 | // Can't use Scene.GetGroupByPrim() here, since the entity may have been delete from the scene |
126 | // before its scheduled update was triggered | 153 | // before its scheduled update was triggered |
127 | //entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; | 154 | //entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; |
128 | entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition; | 155 | entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition; |
129 | } | 156 | } |
130 | else | 157 | else |
131 | { | 158 | { |
@@ -152,15 +179,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
152 | Vector3 entityPos = entity.AbsolutePosition; | 179 | Vector3 entityPos = entity.AbsolutePosition; |
153 | if (entity is SceneObjectPart) | 180 | if (entity is SceneObjectPart) |
154 | { | 181 | { |
155 | SceneObjectGroup group = m_scene.GetGroupByPrim(entity.LocalId); | 182 | // Can't use Scene.GetGroupByPrim() here, since the entity may have been delete from the scene |
156 | if (group == null) | 183 | // before its scheduled update was triggered |
157 | { | 184 | //entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; |
158 | entityPos = entity.AbsolutePosition; | 185 | entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition; |
159 | } | ||
160 | else | ||
161 | { | ||
162 | entityPos = group.AbsolutePosition; | ||
163 | } | ||
164 | } | 186 | } |
165 | else | 187 | else |
166 | { | 188 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index ccbd880..867fb10 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -58,7 +58,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
58 | { | 58 | { |
59 | m_log.Info("[PRIM INVENTORY]: Starting scripts in scene"); | 59 | m_log.Info("[PRIM INVENTORY]: Starting scripts in scene"); |
60 | 60 | ||
61 | foreach (EntityBase group in Entities) | 61 | EntityBase[] entities = Entities.GetEntities(); |
62 | foreach (EntityBase group in entities) | ||
62 | { | 63 | { |
63 | if (group is SceneObjectGroup) | 64 | if (group is SceneObjectGroup) |
64 | { | 65 | { |
@@ -132,7 +133,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
132 | item.Owner, item.Name, item.ID); | 133 | item.Owner, item.Name, item.ID); |
133 | 134 | ||
134 | return false; | 135 | return false; |
135 | } | 136 | } |
136 | } | 137 | } |
137 | 138 | ||
138 | /// <summary> | 139 | /// <summary> |
@@ -1987,7 +1988,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1987 | return null; | 1988 | return null; |
1988 | 1989 | ||
1989 | if (!Permissions.CanRezObject(group.PrimCount, item.OwnerID, pos)) | 1990 | if (!Permissions.CanRezObject(group.PrimCount, item.OwnerID, pos)) |
1990 | return null; | 1991 | return null; |
1991 | 1992 | ||
1992 | if (!Permissions.BypassPermissions()) | 1993 | if (!Permissions.BypassPermissions()) |
1993 | { | 1994 | { |
@@ -2065,7 +2066,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2065 | 2066 | ||
2066 | List<SceneObjectPart> partList = null; | 2067 | List<SceneObjectPart> partList = null; |
2067 | lock (sog.Children) | 2068 | lock (sog.Children) |
2068 | partList = new List<SceneObjectPart>(sog.Children.Values); | 2069 | partList = new List<SceneObjectPart>(sog.Children.Values); |
2069 | 2070 | ||
2070 | foreach (SceneObjectPart child in partList) | 2071 | foreach (SceneObjectPart child in partList) |
2071 | child.Inventory.ChangeInventoryOwner(ownerID); | 2072 | child.Inventory.ChangeInventoryOwner(ownerID); |
@@ -2080,7 +2081,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2080 | 2081 | ||
2081 | List<SceneObjectPart> partList = null; | 2082 | List<SceneObjectPart> partList = null; |
2082 | lock (sog.Children) | 2083 | lock (sog.Children) |
2083 | partList = new List<SceneObjectPart>(sog.Children.Values); | 2084 | partList = new List<SceneObjectPart>(sog.Children.Values); |
2084 | 2085 | ||
2085 | foreach (SceneObjectPart child in partList) | 2086 | foreach (SceneObjectPart child in partList) |
2086 | { | 2087 | { |
@@ -2090,7 +2091,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2090 | 2091 | ||
2091 | sog.SetOwnerId(groupID); | 2092 | sog.SetOwnerId(groupID); |
2092 | sog.ApplyNextOwnerPermissions(); | 2093 | sog.ApplyNextOwnerPermissions(); |
2093 | } | 2094 | } |
2094 | } | 2095 | } |
2095 | 2096 | ||
2096 | foreach (uint localID in localIDs) | 2097 | foreach (uint localID in localIDs) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index c511774..7788e43 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -116,9 +116,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
116 | /// <param name="remoteClient"></param> | 116 | /// <param name="remoteClient"></param> |
117 | public void RequestPrim(uint primLocalID, IClientAPI remoteClient) | 117 | public void RequestPrim(uint primLocalID, IClientAPI remoteClient) |
118 | { | 118 | { |
119 | List<EntityBase> EntityList = GetEntities(); | 119 | EntityBase[] entityList = GetEntities(); |
120 | 120 | foreach (EntityBase ent in entityList) | |
121 | foreach (EntityBase ent in EntityList) | ||
122 | { | 121 | { |
123 | if (ent is SceneObjectGroup) | 122 | if (ent is SceneObjectGroup) |
124 | { | 123 | { |
@@ -138,9 +137,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
138 | /// <param name="remoteClient"></param> | 137 | /// <param name="remoteClient"></param> |
139 | public void SelectPrim(uint primLocalID, IClientAPI remoteClient) | 138 | public void SelectPrim(uint primLocalID, IClientAPI remoteClient) |
140 | { | 139 | { |
141 | List<EntityBase> EntityList = GetEntities(); | 140 | EntityBase[] entityList = GetEntities(); |
142 | 141 | foreach (EntityBase ent in entityList) | |
143 | foreach (EntityBase ent in EntityList) | ||
144 | { | 142 | { |
145 | if (ent is SceneObjectGroup) | 143 | if (ent is SceneObjectGroup) |
146 | { | 144 | { |
@@ -166,7 +164,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
166 | 164 | ||
167 | List<SceneObjectPart> partList = null; | 165 | List<SceneObjectPart> partList = null; |
168 | lock (sog.Children) | 166 | lock (sog.Children) |
169 | partList = new List<SceneObjectPart>(sog.Children.Values); | 167 | partList = new List<SceneObjectPart>(sog.Children.Values); |
170 | 168 | ||
171 | foreach (SceneObjectPart part in partList) | 169 | foreach (SceneObjectPart part in partList) |
172 | { | 170 | { |
@@ -259,7 +257,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
259 | 257 | ||
260 | public virtual void ProcessObjectGrab(uint localID, Vector3 offsetPos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) | 258 | public virtual void ProcessObjectGrab(uint localID, Vector3 offsetPos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) |
261 | { | 259 | { |
262 | List<EntityBase> EntityList = GetEntities(); | 260 | EntityBase[] EntityList = GetEntities(); |
263 | 261 | ||
264 | SurfaceTouchEventArgs surfaceArg = null; | 262 | SurfaceTouchEventArgs surfaceArg = null; |
265 | if (surfaceArgs != null && surfaceArgs.Count > 0) | 263 | if (surfaceArgs != null && surfaceArgs.Count > 0) |
@@ -303,7 +301,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
303 | 301 | ||
304 | public virtual void ProcessObjectGrabUpdate(UUID objectID, Vector3 offset, Vector3 pos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) | 302 | public virtual void ProcessObjectGrabUpdate(UUID objectID, Vector3 offset, Vector3 pos, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) |
305 | { | 303 | { |
306 | List<EntityBase> EntityList = GetEntities(); | 304 | EntityBase[] EntityList = GetEntities(); |
307 | 305 | ||
308 | SurfaceTouchEventArgs surfaceArg = null; | 306 | SurfaceTouchEventArgs surfaceArg = null; |
309 | if (surfaceArgs != null && surfaceArgs.Count > 0) | 307 | if (surfaceArgs != null && surfaceArgs.Count > 0) |
@@ -343,7 +341,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
343 | 341 | ||
344 | public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) | 342 | public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) |
345 | { | 343 | { |
346 | List<EntityBase> EntityList = GetEntities(); | 344 | EntityBase[] EntityList = GetEntities(); |
347 | 345 | ||
348 | SurfaceTouchEventArgs surfaceArg = null; | 346 | SurfaceTouchEventArgs surfaceArg = null; |
349 | if (surfaceArgs != null && surfaceArgs.Count > 0) | 347 | if (surfaceArgs != null && surfaceArgs.Count > 0) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs index 4e80bf2..06890a0 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs | |||
@@ -997,6 +997,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
997 | } | 997 | } |
998 | } | 998 | } |
999 | return true; | 999 | return true; |
1000 | } | 1000 | } |
1001 | } | 1001 | } |
1002 | } \ No newline at end of file | 1002 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index be342ab..0e1b4b1 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -57,55 +57,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
57 | 57 | ||
58 | public partial class Scene : SceneBase | 58 | public partial class Scene : SceneBase |
59 | { | 59 | { |
60 | public delegate void SynchronizeSceneHandler(Scene scene); | ||
61 | public SynchronizeSceneHandler SynchronizeScene = null; | ||
62 | |||
63 | /* Used by the loadbalancer plugin on GForge */ | ||
64 | protected int m_splitRegionID = 0; | ||
65 | public int SplitRegionID | ||
66 | { | ||
67 | get { return m_splitRegionID; } | ||
68 | set { m_splitRegionID = value; } | ||
69 | } | ||
70 | |||
71 | private const long DEFAULT_MIN_TIME_FOR_PERSISTENCE = 60L; | 60 | private const long DEFAULT_MIN_TIME_FOR_PERSISTENCE = 60L; |
72 | private const long DEFAULT_MAX_TIME_FOR_PERSISTENCE = 600L; | 61 | private const long DEFAULT_MAX_TIME_FOR_PERSISTENCE = 600L; |
73 | 62 | ||
74 | #region Fields | 63 | public delegate void SynchronizeSceneHandler(Scene scene); |
75 | 64 | ||
76 | protected Timer m_restartWaitTimer = new Timer(); | 65 | #region Fields |
77 | 66 | ||
67 | public SynchronizeSceneHandler SynchronizeScene; | ||
78 | public SimStatsReporter StatsReporter; | 68 | public SimStatsReporter StatsReporter; |
79 | |||
80 | protected List<RegionInfo> m_regionRestartNotifyList = new List<RegionInfo>(); | ||
81 | protected List<RegionInfo> m_neighbours = new List<RegionInfo>(); | ||
82 | |||
83 | private volatile int m_bordersLocked = 0; | ||
84 | public bool BordersLocked | ||
85 | { | ||
86 | get { return m_bordersLocked == 1; } | ||
87 | set | ||
88 | { | ||
89 | if (value == true) | ||
90 | m_bordersLocked = 1; | ||
91 | else | ||
92 | m_bordersLocked = 0; | ||
93 | } | ||
94 | } | ||
95 | public List<Border> NorthBorders = new List<Border>(); | 69 | public List<Border> NorthBorders = new List<Border>(); |
96 | public List<Border> EastBorders = new List<Border>(); | 70 | public List<Border> EastBorders = new List<Border>(); |
97 | public List<Border> SouthBorders = new List<Border>(); | 71 | public List<Border> SouthBorders = new List<Border>(); |
98 | public List<Border> WestBorders = new List<Border>(); | 72 | public List<Border> WestBorders = new List<Border>(); |
99 | 73 | ||
100 | /// <value> | 74 | /// <summary>Are we applying physics to any of the prims in this scene?</summary> |
101 | /// The scene graph for this scene | ||
102 | /// </value> | ||
103 | /// TODO: Possibly stop other classes being able to manipulate this directly. | ||
104 | private SceneGraph m_sceneGraph; | ||
105 | |||
106 | /// <summary> | ||
107 | /// Are we applying physics to any of the prims in this scene? | ||
108 | /// </summary> | ||
109 | public bool m_physicalPrim; | 75 | public bool m_physicalPrim; |
110 | public float m_maxNonphys = 256; | 76 | public float m_maxNonphys = 256; |
111 | public float m_maxPhys = 10; | 77 | public float m_maxPhys = 10; |
@@ -119,25 +85,131 @@ namespace OpenSim.Region.Framework.Scenes | |||
119 | // root agents when ACL denies access to root agent | 85 | // root agents when ACL denies access to root agent |
120 | public bool m_strictAccessControl = true; | 86 | public bool m_strictAccessControl = true; |
121 | public int MaxUndoCount = 5; | 87 | public int MaxUndoCount = 5; |
88 | public bool LoginsDisabled = true; | ||
89 | public bool LoadingPrims; | ||
90 | public IXfer XferManager; | ||
91 | |||
92 | // the minimum time that must elapse before a changed object will be considered for persisted | ||
93 | public long m_dontPersistBefore = DEFAULT_MIN_TIME_FOR_PERSISTENCE * 10000000L; | ||
94 | // the maximum time that must elapse before a changed object will be considered for persisted | ||
95 | public long m_persistAfter = DEFAULT_MAX_TIME_FOR_PERSISTENCE * 10000000L; | ||
96 | |||
97 | protected int m_splitRegionID; | ||
98 | protected Timer m_restartWaitTimer = new Timer(); | ||
99 | protected List<RegionInfo> m_regionRestartNotifyList = new List<RegionInfo>(); | ||
100 | protected List<RegionInfo> m_neighbours = new List<RegionInfo>(); | ||
101 | protected string m_simulatorVersion = "OpenSimulator Server"; | ||
102 | protected ModuleLoader m_moduleLoader; | ||
103 | protected AgentCircuitManager m_authenticateHandler; | ||
104 | protected SceneCommunicationService m_sceneGridService; | ||
105 | protected ISnmpModule m_snmpService = null; | ||
106 | |||
107 | protected ISimulationDataService m_SimulationDataService; | ||
108 | protected IEstateDataService m_EstateDataService; | ||
109 | protected IAssetService m_AssetService; | ||
110 | protected IAuthorizationService m_AuthorizationService; | ||
111 | protected IInventoryService m_InventoryService; | ||
112 | protected IGridService m_GridService; | ||
113 | protected ILibraryService m_LibraryService; | ||
114 | protected ISimulationService m_simulationService; | ||
115 | protected IAuthenticationService m_AuthenticationService; | ||
116 | protected IPresenceService m_PresenceService; | ||
117 | protected IUserAccountService m_UserAccountService; | ||
118 | protected IAvatarService m_AvatarService; | ||
119 | protected IGridUserService m_GridUserService; | ||
120 | |||
121 | protected IXMLRPC m_xmlrpcModule; | ||
122 | protected IWorldComm m_worldCommModule; | ||
123 | protected IAvatarFactory m_AvatarFactory; | ||
124 | protected IConfigSource m_config; | ||
125 | protected IRegionSerialiserModule m_serialiser; | ||
126 | protected IDialogModule m_dialogModule; | ||
127 | protected IEntityTransferModule m_teleportModule; | ||
128 | protected ICapabilitiesModule m_capsModule; | ||
129 | // Central Update Loop | ||
130 | protected int m_fps = 10; | ||
131 | protected uint m_frame; | ||
132 | protected float m_timespan = 0.089f; | ||
133 | protected DateTime m_lastupdate = DateTime.UtcNow; | ||
134 | |||
135 | // TODO: Possibly stop other classes being able to manipulate this directly. | ||
136 | private SceneGraph m_sceneGraph; | ||
137 | private volatile int m_bordersLocked; | ||
122 | private int m_RestartTimerCounter; | 138 | private int m_RestartTimerCounter; |
123 | private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing | 139 | private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing |
124 | private int m_incrementsof15seconds; | 140 | private int m_incrementsof15seconds; |
125 | private volatile bool m_backingup; | 141 | private volatile bool m_backingup; |
126 | |||
127 | private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>(); | 142 | private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>(); |
128 | private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>(); | 143 | private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>(); |
144 | private Object m_heartbeatLock = new Object(); | ||
129 | 145 | ||
130 | protected string m_simulatorVersion = "OpenSimulator Server"; | 146 | private int m_update_physics = 1; |
147 | private int m_update_entitymovement = 1; | ||
148 | private int m_update_objects = 1; // Update objects which have scheduled themselves for updates | ||
149 | private int m_update_presences = 1; // Update scene presence movements | ||
150 | private int m_update_events = 1; | ||
151 | private int m_update_backup = 200; | ||
152 | private int m_update_terrain = 50; | ||
153 | private int m_update_land = 1; | ||
154 | private int m_update_coarse_locations = 50; | ||
131 | 155 | ||
132 | protected ModuleLoader m_moduleLoader; | 156 | private int frameMS; |
133 | protected StorageManager m_storageManager; | 157 | private int physicsMS2; |
134 | protected AgentCircuitManager m_authenticateHandler; | 158 | private int physicsMS; |
159 | private int otherMS; | ||
160 | private int tempOnRezMS; | ||
161 | private int eventMS; | ||
162 | private int backupMS; | ||
163 | private int terrainMS; | ||
164 | private int landMS; | ||
165 | private int lastCompletedFrame; | ||
135 | 166 | ||
136 | protected SceneCommunicationService m_sceneGridService; | ||
137 | public bool LoginsDisabled = true; | ||
138 | public bool LoadingPrims = false; | ||
139 | public bool CombineRegions = false; | 167 | public bool CombineRegions = false; |
168 | private bool m_physics_enabled = true; | ||
169 | private bool m_scripts_enabled = true; | ||
170 | private string m_defaultScriptEngine; | ||
171 | private int m_LastLogin; | ||
172 | private Thread HeartbeatThread; | ||
173 | private volatile bool shuttingdown; | ||
174 | |||
175 | private int m_lastUpdate; | ||
176 | private bool m_firstHeartbeat = true; | ||
177 | |||
178 | private object m_deleting_scene_object = new object(); | ||
179 | private object m_cleaningAttachments = new object(); | ||
180 | |||
181 | private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time; | ||
182 | private bool m_reprioritizationEnabled = true; | ||
183 | private double m_reprioritizationInterval = 5000.0; | ||
184 | private double m_rootReprioritizationDistance = 10.0; | ||
185 | private double m_childReprioritizationDistance = 20.0; | ||
186 | |||
187 | private Timer m_mapGenerationTimer = new Timer(); | ||
188 | private bool m_generateMaptiles; | ||
189 | |||
190 | #endregion Fields | ||
140 | 191 | ||
192 | #region Properties | ||
193 | |||
194 | /* Used by the loadbalancer plugin on GForge */ | ||
195 | public int SplitRegionID | ||
196 | { | ||
197 | get { return m_splitRegionID; } | ||
198 | set { m_splitRegionID = value; } | ||
199 | } | ||
200 | |||
201 | public bool BordersLocked | ||
202 | { | ||
203 | get { return m_bordersLocked == 1; } | ||
204 | set | ||
205 | { | ||
206 | if (value == true) | ||
207 | m_bordersLocked = 1; | ||
208 | else | ||
209 | m_bordersLocked = 0; | ||
210 | } | ||
211 | } | ||
212 | |||
141 | public new float TimeDilation | 213 | public new float TimeDilation |
142 | { | 214 | { |
143 | get { return m_sceneGraph.PhysicsScene.TimeDilation; } | 215 | get { return m_sceneGraph.PhysicsScene.TimeDilation; } |
@@ -148,9 +220,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
148 | get { return m_sceneGridService; } | 220 | get { return m_sceneGridService; } |
149 | } | 221 | } |
150 | 222 | ||
151 | public IXfer XferManager; | ||
152 | |||
153 | protected ISnmpModule m_snmpService = null; | ||
154 | public ISnmpModule SnmpService | 223 | public ISnmpModule SnmpService |
155 | { | 224 | { |
156 | get | 225 | get |
@@ -164,10 +233,41 @@ namespace OpenSim.Region.Framework.Scenes | |||
164 | } | 233 | } |
165 | } | 234 | } |
166 | 235 | ||
167 | protected IAssetService m_AssetService; | 236 | public ISimulationDataService SimulationDataService |
168 | protected IAuthorizationService m_AuthorizationService; | 237 | { |
238 | get | ||
239 | { | ||
240 | if (m_SimulationDataService == null) | ||
241 | { | ||
242 | m_SimulationDataService = RequestModuleInterface<ISimulationDataService>(); | ||
169 | 243 | ||
170 | private Object m_heartbeatLock = new Object(); | 244 | if (m_SimulationDataService == null) |
245 | { | ||
246 | throw new Exception("No ISimulationDataService available."); | ||
247 | } | ||
248 | } | ||
249 | |||
250 | return m_SimulationDataService; | ||
251 | } | ||
252 | } | ||
253 | |||
254 | public IEstateDataService EstateDataService | ||
255 | { | ||
256 | get | ||
257 | { | ||
258 | if (m_EstateDataService == null) | ||
259 | { | ||
260 | m_EstateDataService = RequestModuleInterface<IEstateDataService>(); | ||
261 | |||
262 | if (m_EstateDataService == null) | ||
263 | { | ||
264 | throw new Exception("No IEstateDataService available."); | ||
265 | } | ||
266 | } | ||
267 | |||
268 | return m_EstateDataService; | ||
269 | } | ||
270 | } | ||
171 | 271 | ||
172 | public IAssetService AssetService | 272 | public IAssetService AssetService |
173 | { | 273 | { |
@@ -206,8 +306,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
206 | } | 306 | } |
207 | } | 307 | } |
208 | 308 | ||
209 | protected IInventoryService m_InventoryService; | ||
210 | |||
211 | public IInventoryService InventoryService | 309 | public IInventoryService InventoryService |
212 | { | 310 | { |
213 | get | 311 | get |
@@ -226,8 +324,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
226 | } | 324 | } |
227 | } | 325 | } |
228 | 326 | ||
229 | protected IGridService m_GridService; | ||
230 | |||
231 | public IGridService GridService | 327 | public IGridService GridService |
232 | { | 328 | { |
233 | get | 329 | get |
@@ -246,8 +342,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
246 | } | 342 | } |
247 | } | 343 | } |
248 | 344 | ||
249 | protected ILibraryService m_LibraryService; | ||
250 | |||
251 | public ILibraryService LibraryService | 345 | public ILibraryService LibraryService |
252 | { | 346 | { |
253 | get | 347 | get |
@@ -259,7 +353,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
259 | } | 353 | } |
260 | } | 354 | } |
261 | 355 | ||
262 | protected ISimulationService m_simulationService; | ||
263 | public ISimulationService SimulationService | 356 | public ISimulationService SimulationService |
264 | { | 357 | { |
265 | get | 358 | get |
@@ -270,7 +363,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
270 | } | 363 | } |
271 | } | 364 | } |
272 | 365 | ||
273 | protected IAuthenticationService m_AuthenticationService; | ||
274 | public IAuthenticationService AuthenticationService | 366 | public IAuthenticationService AuthenticationService |
275 | { | 367 | { |
276 | get | 368 | get |
@@ -281,7 +373,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
281 | } | 373 | } |
282 | } | 374 | } |
283 | 375 | ||
284 | protected IPresenceService m_PresenceService; | ||
285 | public IPresenceService PresenceService | 376 | public IPresenceService PresenceService |
286 | { | 377 | { |
287 | get | 378 | get |
@@ -291,7 +382,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
291 | return m_PresenceService; | 382 | return m_PresenceService; |
292 | } | 383 | } |
293 | } | 384 | } |
294 | protected IUserAccountService m_UserAccountService; | 385 | |
295 | public IUserAccountService UserAccountService | 386 | public IUserAccountService UserAccountService |
296 | { | 387 | { |
297 | get | 388 | get |
@@ -302,8 +393,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
302 | } | 393 | } |
303 | } | 394 | } |
304 | 395 | ||
305 | protected OpenSim.Services.Interfaces.IAvatarService m_AvatarService; | 396 | public IAvatarService AvatarService |
306 | public OpenSim.Services.Interfaces.IAvatarService AvatarService | ||
307 | { | 397 | { |
308 | get | 398 | get |
309 | { | 399 | { |
@@ -313,7 +403,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
313 | } | 403 | } |
314 | } | 404 | } |
315 | 405 | ||
316 | protected IGridUserService m_GridUserService; | ||
317 | public IGridUserService GridUserService | 406 | public IGridUserService GridUserService |
318 | { | 407 | { |
319 | get | 408 | get |
@@ -324,58 +413,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
324 | } | 413 | } |
325 | } | 414 | } |
326 | 415 | ||
327 | protected IXMLRPC m_xmlrpcModule; | ||
328 | protected IWorldComm m_worldCommModule; | ||
329 | public IAttachmentsModule AttachmentsModule { get; set; } | 416 | public IAttachmentsModule AttachmentsModule { get; set; } |
330 | protected IAvatarFactory m_AvatarFactory; | 417 | |
331 | public IAvatarFactory AvatarFactory | 418 | public IAvatarFactory AvatarFactory |
332 | { | 419 | { |
333 | get { return m_AvatarFactory; } | 420 | get { return m_AvatarFactory; } |
334 | } | 421 | } |
335 | protected IConfigSource m_config; | ||
336 | protected IRegionSerialiserModule m_serialiser; | ||
337 | protected IDialogModule m_dialogModule; | ||
338 | protected IEntityTransferModule m_teleportModule; | ||
339 | 422 | ||
340 | protected ICapabilitiesModule m_capsModule; | ||
341 | public ICapabilitiesModule CapsModule | 423 | public ICapabilitiesModule CapsModule |
342 | { | 424 | { |
343 | get { return m_capsModule; } | 425 | get { return m_capsModule; } |
344 | } | 426 | } |
345 | 427 | ||
346 | protected override IConfigSource GetConfig() | ||
347 | { | ||
348 | return m_config; | ||
349 | } | ||
350 | |||
351 | // Central Update Loop | ||
352 | |||
353 | protected int m_fps = 10; | ||
354 | protected uint m_frame; | ||
355 | protected float m_timespan = 0.089f; | ||
356 | protected DateTime m_lastupdate = DateTime.UtcNow; | ||
357 | |||
358 | private int m_update_physics = 1; | ||
359 | private int m_update_entitymovement = 1; | ||
360 | private int m_update_objects = 1; // Update objects which have scheduled themselves for updates | ||
361 | private int m_update_presences = 1; // Update scene presence movements | ||
362 | private int m_update_events = 1; | ||
363 | private int m_update_backup = 200; | ||
364 | private int m_update_terrain = 50; | ||
365 | private int m_update_land = 1; | ||
366 | private int m_update_coarse_locations = 50; | ||
367 | |||
368 | private int frameMS; | ||
369 | private int physicsMS2; | ||
370 | private int physicsMS; | ||
371 | private int otherMS; | ||
372 | private int tempOnRezMS; | ||
373 | private int eventMS; | ||
374 | private int backupMS; | ||
375 | private int terrainMS; | ||
376 | private int landMS; | ||
377 | private int lastCompletedFrame; | ||
378 | |||
379 | public int MonitorFrameTime { get { return frameMS; } } | 428 | public int MonitorFrameTime { get { return frameMS; } } |
380 | public int MonitorPhysicsUpdateTime { get { return physicsMS; } } | 429 | public int MonitorPhysicsUpdateTime { get { return physicsMS; } } |
381 | public int MonitorPhysicsSyncTime { get { return physicsMS2; } } | 430 | public int MonitorPhysicsSyncTime { get { return physicsMS2; } } |
@@ -387,37 +436,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
387 | public int MonitorLandTime { get { return landMS; } } | 436 | public int MonitorLandTime { get { return landMS; } } |
388 | public int MonitorLastFrameTick { get { return lastCompletedFrame; } } | 437 | public int MonitorLastFrameTick { get { return lastCompletedFrame; } } |
389 | 438 | ||
390 | private bool m_physics_enabled = true; | ||
391 | private bool m_scripts_enabled = true; | ||
392 | private string m_defaultScriptEngine; | ||
393 | private int m_LastLogin; | ||
394 | private Thread HeartbeatThread; | ||
395 | private volatile bool shuttingdown; | ||
396 | |||
397 | private int m_lastUpdate; | ||
398 | private bool m_firstHeartbeat = true; | ||
399 | |||
400 | private object m_deleting_scene_object = new object(); | ||
401 | private object m_cleaningAttachments = new object(); | ||
402 | |||
403 | // the minimum time that must elapse before a changed object will be considered for persisted | ||
404 | public long m_dontPersistBefore = DEFAULT_MIN_TIME_FOR_PERSISTENCE * 10000000L; | ||
405 | // the maximum time that must elapse before a changed object will be considered for persisted | ||
406 | public long m_persistAfter = DEFAULT_MAX_TIME_FOR_PERSISTENCE * 10000000L; | ||
407 | |||
408 | private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time; | ||
409 | private bool m_reprioritizationEnabled = true; | ||
410 | private double m_reprioritizationInterval = 5000.0; | ||
411 | private double m_rootReprioritizationDistance = 10.0; | ||
412 | private double m_childReprioritizationDistance = 20.0; | ||
413 | |||
414 | private Timer m_mapGenerationTimer = new Timer(); | ||
415 | bool m_generateMaptiles = false; | ||
416 | |||
417 | #endregion | ||
418 | |||
419 | #region Properties | ||
420 | |||
421 | public UpdatePrioritizationSchemes UpdatePrioritizationScheme { get { return m_priorityScheme; } } | 439 | public UpdatePrioritizationSchemes UpdatePrioritizationScheme { get { return m_priorityScheme; } } |
422 | public bool IsReprioritizationEnabled { get { return m_reprioritizationEnabled; } } | 440 | public bool IsReprioritizationEnabled { get { return m_reprioritizationEnabled; } } |
423 | public double ReprioritizationInterval { get { return m_reprioritizationInterval; } } | 441 | public double ReprioritizationInterval { get { return m_reprioritizationInterval; } } |
@@ -497,13 +515,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
497 | set { m_sceneGraph.RestorePresences = value; } | 515 | set { m_sceneGraph.RestorePresences = value; } |
498 | } | 516 | } |
499 | 517 | ||
500 | #endregion | 518 | #endregion Properties |
501 | 519 | ||
502 | #region Constructors | 520 | #region Constructors |
503 | 521 | ||
504 | public Scene(RegionInfo regInfo, AgentCircuitManager authen, | 522 | public Scene(RegionInfo regInfo, AgentCircuitManager authen, |
505 | SceneCommunicationService sceneGridService, | 523 | SceneCommunicationService sceneGridService, |
506 | StorageManager storeManager, | 524 | ISimulationDataService simDataService, IEstateDataService estateDataService, |
507 | ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim, | 525 | ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim, |
508 | bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion) | 526 | bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion) |
509 | { | 527 | { |
@@ -539,7 +557,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
539 | m_moduleLoader = moduleLoader; | 557 | m_moduleLoader = moduleLoader; |
540 | m_authenticateHandler = authen; | 558 | m_authenticateHandler = authen; |
541 | m_sceneGridService = sceneGridService; | 559 | m_sceneGridService = sceneGridService; |
542 | m_storageManager = storeManager; | 560 | m_SimulationDataService = simDataService; |
561 | m_EstateDataService = estateDataService; | ||
543 | m_regInfo = regInfo; | 562 | m_regInfo = regInfo; |
544 | m_regionHandle = m_regInfo.RegionHandle; | 563 | m_regionHandle = m_regInfo.RegionHandle; |
545 | m_regionName = m_regInfo.RegionName; | 564 | m_regionName = m_regInfo.RegionName; |
@@ -558,13 +577,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
558 | #region Region Settings | 577 | #region Region Settings |
559 | 578 | ||
560 | // Load region settings | 579 | // Load region settings |
561 | m_regInfo.RegionSettings = m_storageManager.DataStore.LoadRegionSettings(m_regInfo.RegionID); | 580 | m_regInfo.WindlightSettings = SimulationDataService.LoadRegionWindlightSettings(m_regInfo.RegionID); |
562 | m_regInfo.WindlightSettings = m_storageManager.DataStore.LoadRegionWindlightSettings(m_regInfo.RegionID); | ||
563 | 581 | ||
564 | if (m_storageManager.EstateDataStore != null) | 582 | m_regInfo.RegionSettings = simDataService.LoadRegionSettings(m_regInfo.RegionID); |
565 | { | 583 | if (estateDataService != null) |
566 | m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID, false); | 584 | m_regInfo.EstateSettings = estateDataService.LoadEstateSettings(m_regInfo.RegionID, false); |
567 | } | ||
568 | 585 | ||
569 | #endregion Region Settings | 586 | #endregion Region Settings |
570 | 587 | ||
@@ -574,9 +591,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
574 | 591 | ||
575 | //Bind Storage Manager functions to some land manager functions for this scene | 592 | //Bind Storage Manager functions to some land manager functions for this scene |
576 | EventManager.OnLandObjectAdded += | 593 | EventManager.OnLandObjectAdded += |
577 | new EventManager.LandObjectAdded(m_storageManager.DataStore.StoreLandObject); | 594 | new EventManager.LandObjectAdded(simDataService.StoreLandObject); |
578 | EventManager.OnLandObjectRemoved += | 595 | EventManager.OnLandObjectRemoved += |
579 | new EventManager.LandObjectRemoved(m_storageManager.DataStore.RemoveLandObject); | 596 | new EventManager.LandObjectRemoved(simDataService.RemoveLandObject); |
580 | 597 | ||
581 | m_sceneGraph = new SceneGraph(this, m_regInfo); | 598 | m_sceneGraph = new SceneGraph(this, m_regInfo); |
582 | 599 | ||
@@ -1062,29 +1079,30 @@ namespace OpenSim.Region.Framework.Scenes | |||
1062 | if (ScriptEngine) | 1079 | if (ScriptEngine) |
1063 | { | 1080 | { |
1064 | m_log.Info("Stopping all Scripts in Scene"); | 1081 | m_log.Info("Stopping all Scripts in Scene"); |
1065 | foreach (EntityBase ent in Entities) | 1082 | |
1083 | EntityBase[] entities = Entities.GetEntities(); | ||
1084 | foreach (EntityBase ent in entities) | ||
1066 | { | 1085 | { |
1067 | if (ent is SceneObjectGroup) | 1086 | if (ent is SceneObjectGroup) |
1068 | { | 1087 | ((SceneObjectGroup)ent).RemoveScriptInstances(false); |
1069 | ((SceneObjectGroup) ent).RemoveScriptInstances(false); | ||
1070 | } | ||
1071 | } | 1088 | } |
1072 | } | 1089 | } |
1073 | else | 1090 | else |
1074 | { | 1091 | { |
1075 | m_log.Info("Starting all Scripts in Scene"); | 1092 | m_log.Info("Starting all Scripts in Scene"); |
1076 | lock (Entities) | 1093 | |
1094 | EntityBase[] entities = Entities.GetEntities(); | ||
1095 | foreach (EntityBase ent in entities) | ||
1077 | { | 1096 | { |
1078 | foreach (EntityBase ent in Entities) | 1097 | if (ent is SceneObjectGroup) |
1079 | { | 1098 | { |
1080 | if (ent is SceneObjectGroup) | 1099 | SceneObjectGroup sog = (SceneObjectGroup)ent; |
1081 | { | 1100 | sog.CreateScriptInstances(0, false, DefaultScriptEngine, 0); |
1082 | ((SceneObjectGroup)ent).CreateScriptInstances(0, false, DefaultScriptEngine, 0); | 1101 | sog.ResumeScripts(); |
1083 | ((SceneObjectGroup)ent).ResumeScripts(); | ||
1084 | } | ||
1085 | } | 1102 | } |
1086 | } | 1103 | } |
1087 | } | 1104 | } |
1105 | |||
1088 | m_scripts_enabled = !ScriptEngine; | 1106 | m_scripts_enabled = !ScriptEngine; |
1089 | m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine"); | 1107 | m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine"); |
1090 | } | 1108 | } |
@@ -1131,12 +1149,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1131 | shuttingdown = true; | 1149 | shuttingdown = true; |
1132 | 1150 | ||
1133 | m_log.Debug("[SCENE]: Persisting changed objects"); | 1151 | m_log.Debug("[SCENE]: Persisting changed objects"); |
1134 | List<EntityBase> entities = GetEntities(); | 1152 | EntityBase[] entities = GetEntities(); |
1135 | foreach (EntityBase entity in entities) | 1153 | foreach (EntityBase entity in entities) |
1136 | { | 1154 | { |
1137 | if (!entity.IsDeleted && entity is SceneObjectGroup && ((SceneObjectGroup)entity).HasGroupChanged) | 1155 | if (!entity.IsDeleted && entity is SceneObjectGroup && ((SceneObjectGroup)entity).HasGroupChanged) |
1138 | { | 1156 | { |
1139 | ((SceneObjectGroup)entity).ProcessBackup(m_storageManager.DataStore, false); | 1157 | ((SceneObjectGroup)entity).ProcessBackup(SimulationDataService, false); |
1140 | } | 1158 | } |
1141 | } | 1159 | } |
1142 | 1160 | ||
@@ -1192,8 +1210,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1192 | while (m_regInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null) | 1210 | while (m_regInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null) |
1193 | { | 1211 | { |
1194 | MainConsole.Instance.Output("The current estate has no owner set."); | 1212 | MainConsole.Instance.Output("The current estate has no owner set."); |
1195 | string first = MainConsole.Instance.CmdPrompt("Estate owner first name", "Test"); | 1213 | List<char> excluded = new List<char>(new char[1]{' '}); |
1196 | string last = MainConsole.Instance.CmdPrompt("Estate owner last name", "User"); | 1214 | string first = MainConsole.Instance.CmdPrompt("Estate owner first name", "Test", excluded); |
1215 | string last = MainConsole.Instance.CmdPrompt("Estate owner last name", "User", excluded); | ||
1197 | 1216 | ||
1198 | UserAccount account = UserAccountService.GetUserAccount(m_regInfo.ScopeID, first, last); | 1217 | UserAccount account = UserAccountService.GetUserAccount(m_regInfo.ScopeID, first, last); |
1199 | 1218 | ||
@@ -1577,7 +1596,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1577 | { | 1596 | { |
1578 | lock (m_returns) | 1597 | lock (m_returns) |
1579 | { | 1598 | { |
1580 | EventManager.TriggerOnBackup(m_storageManager.DataStore, forced); | 1599 | EventManager.TriggerOnBackup(SimulationDataService, forced); |
1581 | m_backingup = false; | 1600 | m_backingup = false; |
1582 | 1601 | ||
1583 | foreach (KeyValuePair<UUID, ReturnInfo> ret in m_returns) | 1602 | foreach (KeyValuePair<UUID, ReturnInfo> ret in m_returns) |
@@ -1618,7 +1637,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1618 | { | 1637 | { |
1619 | if (group != null) | 1638 | if (group != null) |
1620 | { | 1639 | { |
1621 | group.ProcessBackup(m_storageManager.DataStore, true); | 1640 | group.ProcessBackup(SimulationDataService, true); |
1622 | } | 1641 | } |
1623 | } | 1642 | } |
1624 | 1643 | ||
@@ -1660,20 +1679,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
1660 | /// </summary> | 1679 | /// </summary> |
1661 | public void SaveTerrain() | 1680 | public void SaveTerrain() |
1662 | { | 1681 | { |
1663 | m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); | 1682 | SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); |
1664 | } | 1683 | } |
1665 | 1684 | ||
1666 | public void StoreWindlightProfile(RegionLightShareData wl) | 1685 | public void StoreWindlightProfile(RegionLightShareData wl) |
1667 | { | 1686 | { |
1668 | m_regInfo.WindlightSettings = wl; | 1687 | m_regInfo.WindlightSettings = wl; |
1669 | wl.Save(); | 1688 | SimulationDataService.StoreRegionWindlightSettings(wl); |
1670 | m_storageManager.DataStore.StoreRegionWindlightSettings(wl); | ||
1671 | m_eventManager.TriggerOnSaveNewWindlightProfile(); | 1689 | m_eventManager.TriggerOnSaveNewWindlightProfile(); |
1672 | } | 1690 | } |
1673 | 1691 | ||
1674 | public void LoadWindlightProfile() | 1692 | public void LoadWindlightProfile() |
1675 | { | 1693 | { |
1676 | m_regInfo.WindlightSettings = m_storageManager.DataStore.LoadRegionWindlightSettings(RegionInfo.RegionID); | 1694 | m_regInfo.WindlightSettings = SimulationDataService.LoadRegionWindlightSettings(RegionInfo.RegionID); |
1677 | m_eventManager.TriggerOnSaveNewWindlightProfile(); | 1695 | m_eventManager.TriggerOnSaveNewWindlightProfile(); |
1678 | } | 1696 | } |
1679 | 1697 | ||
@@ -1684,13 +1702,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
1684 | { | 1702 | { |
1685 | try | 1703 | try |
1686 | { | 1704 | { |
1687 | double[,] map = m_storageManager.DataStore.LoadTerrain(RegionInfo.RegionID); | 1705 | double[,] map = SimulationDataService.LoadTerrain(RegionInfo.RegionID); |
1688 | if (map == null) | 1706 | if (map == null) |
1689 | { | 1707 | { |
1690 | m_log.Info("[TERRAIN]: No default terrain. Generating a new terrain."); | 1708 | m_log.Info("[TERRAIN]: No default terrain. Generating a new terrain."); |
1691 | Heightmap = new TerrainChannel(); | 1709 | Heightmap = new TerrainChannel(); |
1692 | 1710 | ||
1693 | m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); | 1711 | SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); |
1694 | } | 1712 | } |
1695 | else | 1713 | else |
1696 | { | 1714 | { |
@@ -1707,7 +1725,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1707 | { | 1725 | { |
1708 | Heightmap = new TerrainChannel(); | 1726 | Heightmap = new TerrainChannel(); |
1709 | 1727 | ||
1710 | m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); | 1728 | SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); |
1711 | } | 1729 | } |
1712 | } | 1730 | } |
1713 | catch (Exception e) | 1731 | catch (Exception e) |
@@ -1754,7 +1772,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1754 | public void loadAllLandObjectsFromStorage(UUID regionID) | 1772 | public void loadAllLandObjectsFromStorage(UUID regionID) |
1755 | { | 1773 | { |
1756 | m_log.Info("[SCENE]: Loading land objects from storage"); | 1774 | m_log.Info("[SCENE]: Loading land objects from storage"); |
1757 | List<LandData> landData = m_storageManager.DataStore.LoadLandObjects(regionID); | 1775 | List<LandData> landData = SimulationDataService.LoadLandObjects(regionID); |
1758 | 1776 | ||
1759 | if (LandChannel != null) | 1777 | if (LandChannel != null) |
1760 | { | 1778 | { |
@@ -1785,7 +1803,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1785 | LoadingPrims = true; | 1803 | LoadingPrims = true; |
1786 | m_log.Info("[SCENE]: Loading objects from datastore"); | 1804 | m_log.Info("[SCENE]: Loading objects from datastore"); |
1787 | 1805 | ||
1788 | List<SceneObjectGroup> PrimsFromDB = m_storageManager.DataStore.LoadObjects(regionID); | 1806 | List<SceneObjectGroup> PrimsFromDB = SimulationDataService.LoadObjects(regionID); |
1789 | 1807 | ||
1790 | m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count + " objects from the datastore"); | 1808 | m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count + " objects from the datastore"); |
1791 | 1809 | ||
@@ -1978,7 +1996,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1978 | sceneObject.ScheduleGroupForFullUpdate(); | 1996 | sceneObject.ScheduleGroupForFullUpdate(); |
1979 | 1997 | ||
1980 | return sceneObject; | 1998 | return sceneObject; |
1981 | } | 1999 | } |
1982 | 2000 | ||
1983 | /// <summary> | 2001 | /// <summary> |
1984 | /// Add an object into the scene that has come from storage | 2002 | /// Add an object into the scene that has come from storage |
@@ -2074,7 +2092,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2074 | /// <returns></returns> | 2092 | /// <returns></returns> |
2075 | public bool AddNewSceneObject( | 2093 | public bool AddNewSceneObject( |
2076 | SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) | 2094 | SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) |
2077 | { | 2095 | { |
2078 | return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel); | 2096 | return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel); |
2079 | } | 2097 | } |
2080 | 2098 | ||
@@ -2094,8 +2112,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2094 | List<SceneObjectGroup> toReturn = new List<SceneObjectGroup>(); | 2112 | List<SceneObjectGroup> toReturn = new List<SceneObjectGroup>(); |
2095 | lock (Entities) | 2113 | lock (Entities) |
2096 | { | 2114 | { |
2097 | ICollection<EntityBase> entities = new List<EntityBase>(Entities); | 2115 | EntityBase[] entities = Entities.GetEntities(); |
2098 | |||
2099 | foreach (EntityBase e in entities) | 2116 | foreach (EntityBase e in entities) |
2100 | { | 2117 | { |
2101 | if (e is SceneObjectGroup) | 2118 | if (e is SceneObjectGroup) |
@@ -2190,12 +2207,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2190 | // group has recently been delinked from another group but that this change has not been persisted | 2207 | // group has recently been delinked from another group but that this change has not been persisted |
2191 | // to the DB. | 2208 | // to the DB. |
2192 | ForceSceneObjectBackup(so); | 2209 | ForceSceneObjectBackup(so); |
2193 | so.DetachFromBackup(); | 2210 | so.DetachFromBackup(); |
2194 | m_storageManager.DataStore.RemoveObject(so.UUID, m_regInfo.RegionID); | 2211 | SimulationDataService.RemoveObject(so.UUID, m_regInfo.RegionID); |
2195 | } | 2212 | } |
2196 | 2213 | ||
2197 | // We need to keep track of this state in case this group is still queued for further backup. | 2214 | // We need to keep track of this state in case this group is still queued for further backup. |
2198 | so.IsDeleted = true; | 2215 | so.IsDeleted = true; |
2199 | 2216 | ||
2200 | return true; | 2217 | return true; |
2201 | } | 2218 | } |
@@ -2482,7 +2499,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2482 | ScenePresence sp = GetScenePresence(userID); | 2499 | ScenePresence sp = GetScenePresence(userID); |
2483 | if (sp != null && AttachmentsModule != null) | 2500 | if (sp != null && AttachmentsModule != null) |
2484 | { | 2501 | { |
2485 | uint attPt = (uint)sp.Appearance.GetAttachpoint(itemID); | 2502 | uint attPt = (uint)sp.Appearance.GetAttachpoint(itemID); |
2486 | AttachmentsModule.RezSingleAttachmentFromInventory(sp.ControllingClient, itemID, attPt); | 2503 | AttachmentsModule.RezSingleAttachmentFromInventory(sp.ControllingClient, itemID, attPt); |
2487 | } | 2504 | } |
2488 | 2505 | ||
@@ -2531,7 +2548,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2531 | sceneObject.RootPart.AddFlag(PrimFlags.Phantom); | 2548 | sceneObject.RootPart.AddFlag(PrimFlags.Phantom); |
2532 | 2549 | ||
2533 | // Don't sent a full update here because this will cause full updates to be sent twice for | 2550 | // Don't sent a full update here because this will cause full updates to be sent twice for |
2534 | // attachments on region crossings, resulting in viewer glitches. | 2551 | // attachments on region crossings, resulting in viewer glitches. |
2535 | AddRestoredSceneObject(sceneObject, false, false, false); | 2552 | AddRestoredSceneObject(sceneObject, false, false, false); |
2536 | 2553 | ||
2537 | // Handle attachment special case | 2554 | // Handle attachment special case |
@@ -2788,7 +2805,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2788 | } | 2805 | } |
2789 | 2806 | ||
2790 | public virtual void SubscribeToClientPrimEvents(IClientAPI client) | 2807 | public virtual void SubscribeToClientPrimEvents(IClientAPI client) |
2791 | { | 2808 | { |
2792 | client.OnUpdatePrimGroupPosition += m_sceneGraph.UpdatePrimPosition; | 2809 | client.OnUpdatePrimGroupPosition += m_sceneGraph.UpdatePrimPosition; |
2793 | client.OnUpdatePrimSinglePosition += m_sceneGraph.UpdatePrimSinglePosition; | 2810 | client.OnUpdatePrimSinglePosition += m_sceneGraph.UpdatePrimSinglePosition; |
2794 | client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation; | 2811 | client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation; |
@@ -2824,7 +2841,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2824 | client.OnUndo += m_sceneGraph.HandleUndo; | 2841 | client.OnUndo += m_sceneGraph.HandleUndo; |
2825 | client.OnRedo += m_sceneGraph.HandleRedo; | 2842 | client.OnRedo += m_sceneGraph.HandleRedo; |
2826 | client.OnObjectDescription += m_sceneGraph.PrimDescription; | 2843 | client.OnObjectDescription += m_sceneGraph.PrimDescription; |
2827 | client.OnObjectDrop += m_sceneGraph.DropObject; | 2844 | client.OnObjectDrop += m_sceneGraph.DropObject; |
2828 | client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; | 2845 | client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; |
2829 | client.OnObjectOwner += ObjectOwner; | 2846 | client.OnObjectOwner += ObjectOwner; |
2830 | } | 2847 | } |
@@ -3804,7 +3821,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3804 | public virtual void AgentCrossing(UUID agentID, Vector3 position, bool isFlying) | 3821 | public virtual void AgentCrossing(UUID agentID, Vector3 position, bool isFlying) |
3805 | { | 3822 | { |
3806 | ScenePresence presence = GetScenePresence(agentID); | 3823 | ScenePresence presence = GetScenePresence(agentID); |
3807 | if(presence != null) | 3824 | if (presence != null) |
3808 | { | 3825 | { |
3809 | try | 3826 | try |
3810 | { | 3827 | { |
@@ -4083,6 +4100,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
4083 | 4100 | ||
4084 | #region Other Methods | 4101 | #region Other Methods |
4085 | 4102 | ||
4103 | protected override IConfigSource GetConfig() | ||
4104 | { | ||
4105 | return m_config; | ||
4106 | } | ||
4107 | |||
4086 | #endregion | 4108 | #endregion |
4087 | 4109 | ||
4088 | public void HandleObjectPermissionsUpdate(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set) | 4110 | public void HandleObjectPermissionsUpdate(IClientAPI controller, UUID agentID, UUID sessionID, byte field, uint localId, uint mask, byte set) |
@@ -4107,9 +4129,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
4107 | /// </summary> | 4129 | /// </summary> |
4108 | public void ForceClientUpdate() | 4130 | public void ForceClientUpdate() |
4109 | { | 4131 | { |
4110 | List<EntityBase> EntityList = GetEntities(); | 4132 | EntityBase[] entityList = GetEntities(); |
4111 | 4133 | foreach (EntityBase ent in entityList) | |
4112 | foreach (EntityBase ent in EntityList) | ||
4113 | { | 4134 | { |
4114 | if (ent is SceneObjectGroup) | 4135 | if (ent is SceneObjectGroup) |
4115 | { | 4136 | { |
@@ -4127,9 +4148,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
4127 | { | 4148 | { |
4128 | m_log.Debug("Searching for Primitive: '" + cmdparams[2] + "'"); | 4149 | m_log.Debug("Searching for Primitive: '" + cmdparams[2] + "'"); |
4129 | 4150 | ||
4130 | List<EntityBase> EntityList = GetEntities(); | 4151 | EntityBase[] entityList = GetEntities(); |
4131 | 4152 | foreach (EntityBase ent in entityList) | |
4132 | foreach (EntityBase ent in EntityList) | ||
4133 | { | 4153 | { |
4134 | if (ent is SceneObjectGroup) | 4154 | if (ent is SceneObjectGroup) |
4135 | { | 4155 | { |
@@ -4498,7 +4518,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4498 | /// will not affect the original list of objects in the scene. | 4518 | /// will not affect the original list of objects in the scene. |
4499 | /// </summary> | 4519 | /// </summary> |
4500 | /// <returns></returns> | 4520 | /// <returns></returns> |
4501 | public List<EntityBase> GetEntities() | 4521 | public EntityBase[] GetEntities() |
4502 | { | 4522 | { |
4503 | return m_sceneGraph.GetEntities(); | 4523 | return m_sceneGraph.GetEntities(); |
4504 | } | 4524 | } |
@@ -4532,9 +4552,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
4532 | 4552 | ||
4533 | public void CleanTempObjects() | 4553 | public void CleanTempObjects() |
4534 | { | 4554 | { |
4535 | List<EntityBase> objs = GetEntities(); | 4555 | EntityBase[] entities = GetEntities(); |
4536 | 4556 | foreach (EntityBase obj in entities) | |
4537 | foreach (EntityBase obj in objs) | ||
4538 | { | 4557 | { |
4539 | if (obj is SceneObjectGroup) | 4558 | if (obj is SceneObjectGroup) |
4540 | { | 4559 | { |
@@ -4554,7 +4573,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4554 | 4573 | ||
4555 | public void DeleteFromStorage(UUID uuid) | 4574 | public void DeleteFromStorage(UUID uuid) |
4556 | { | 4575 | { |
4557 | m_storageManager.DataStore.RemoveObject(uuid, m_regInfo.RegionID); | 4576 | SimulationDataService.RemoveObject(uuid, m_regInfo.RegionID); |
4558 | } | 4577 | } |
4559 | 4578 | ||
4560 | public int GetHealth() | 4579 | public int GetHealth() |
@@ -4963,17 +4982,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
4963 | 4982 | ||
4964 | public List<UUID> GetEstateRegions(int estateID) | 4983 | public List<UUID> GetEstateRegions(int estateID) |
4965 | { | 4984 | { |
4966 | if (m_storageManager.EstateDataStore == null) | 4985 | IEstateDataService estateDataService = EstateDataService; |
4967 | return new List<UUID>(); | 4986 | if (estateDataService == null) |
4987 | return new List<UUID>(0); | ||
4968 | 4988 | ||
4969 | return m_storageManager.EstateDataStore.GetRegions(estateID); | 4989 | return estateDataService.GetRegions(estateID); |
4970 | } | 4990 | } |
4971 | 4991 | ||
4972 | public void ReloadEstateData() | 4992 | public void ReloadEstateData() |
4973 | { | 4993 | { |
4974 | m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID, false); | 4994 | IEstateDataService estateDataService = EstateDataService; |
4975 | 4995 | if (estateDataService != null) | |
4976 | TriggerEstateSunUpdate(); | 4996 | { |
4997 | m_regInfo.EstateSettings = estateDataService.LoadEstateSettings(m_regInfo.RegionID, false); | ||
4998 | TriggerEstateSunUpdate(); | ||
4999 | } | ||
4977 | } | 5000 | } |
4978 | 5001 | ||
4979 | public void TriggerEstateSunUpdate() | 5002 | public void TriggerEstateSunUpdate() |
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index f8591ba..c71aefa 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs | |||
@@ -521,7 +521,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
521 | /// <param name="shorthelp"></param> | 521 | /// <param name="shorthelp"></param> |
522 | /// <param name="longhelp"></param> | 522 | /// <param name="longhelp"></param> |
523 | /// <param name="descriptivehelp"></param> | 523 | /// <param name="descriptivehelp"></param> |
524 | /// <param name="callback"></param> | 524 | /// <param name="callback"></param> |
525 | public void AddCommand( | 525 | public void AddCommand( |
526 | object mod, string command, string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback) | 526 | object mod, string command, string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback) |
527 | { | 527 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index a39f27a..6246400 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -81,10 +81,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
81 | protected Dictionary<UUID, ScenePresence> m_scenePresenceMap = new Dictionary<UUID, ScenePresence>(); | 81 | protected Dictionary<UUID, ScenePresence> m_scenePresenceMap = new Dictionary<UUID, ScenePresence>(); |
82 | protected List<ScenePresence> m_scenePresenceArray = new List<ScenePresence>(); | 82 | protected List<ScenePresence> m_scenePresenceArray = new List<ScenePresence>(); |
83 | 83 | ||
84 | // SceneObjects is not currently populated or used. | ||
85 | //public Dictionary<UUID, SceneObjectGroup> SceneObjects; | ||
86 | protected internal EntityManager Entities = new EntityManager(); | 84 | protected internal EntityManager Entities = new EntityManager(); |
87 | // protected internal Dictionary<UUID, EntityBase> Entities = new Dictionary<UUID, EntityBase>(); | ||
88 | protected internal Dictionary<UUID, ScenePresence> RestorePresences = new Dictionary<UUID, ScenePresence>(); | 85 | protected internal Dictionary<UUID, ScenePresence> RestorePresences = new Dictionary<UUID, ScenePresence>(); |
89 | 86 | ||
90 | protected RegionInfo m_regInfo; | 87 | protected RegionInfo m_regInfo; |
@@ -323,7 +320,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
323 | /// <param name="pos">Position of the object</param> | 320 | /// <param name="pos">Position of the object</param> |
324 | /// <param name="rot">Rotation of the object</param> | 321 | /// <param name="rot">Rotation of the object</param> |
325 | /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param> | 322 | /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param> |
326 | /// <returns></returns> | 323 | /// <returns></returns> |
327 | public bool AddNewSceneObject( | 324 | public bool AddNewSceneObject( |
328 | SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) | 325 | SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) |
329 | { | 326 | { |
@@ -347,7 +344,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
347 | } | 344 | } |
348 | 345 | ||
349 | return true; | 346 | return true; |
350 | } | 347 | } |
351 | 348 | ||
352 | /// <summary> | 349 | /// <summary> |
353 | /// Add an object to the scene. This will both update the scene, and send information about the | 350 | /// Add an object to the scene. This will both update the scene, and send information about the |
@@ -370,68 +367,57 @@ namespace OpenSim.Region.Framework.Scenes | |||
370 | if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero) | 367 | if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero) |
371 | return false; | 368 | return false; |
372 | 369 | ||
373 | lock (sceneObject) | 370 | if (Entities.ContainsKey(sceneObject.UUID)) |
374 | { | 371 | return false; |
375 | if (Entities.ContainsKey(sceneObject.UUID)) | 372 | |
376 | { | 373 | List<SceneObjectPart> children; |
377 | // m_log.WarnFormat( | 374 | lock (sceneObject.Children) |
378 | // "[SCENE GRAPH]: Scene object {0} {1} was already in region {2} on add request", | 375 | children = new List<SceneObjectPart>(sceneObject.Children.Values); |
379 | // sceneObject.Name, sceneObject.UUID, m_parentScene.RegionInfo.RegionName); | 376 | |
380 | return false; | 377 | // Clamp child prim sizes and add child prims to the m_numPrim count |
381 | } | 378 | if (m_parentScene.m_clampPrimSize) |
382 | 379 | { | |
383 | // m_log.DebugFormat( | 380 | foreach (SceneObjectPart part in children) |
384 | // "[SCENE GRAPH]: Adding object {0} {1} to region {2}", | ||
385 | // sceneObject.Name, sceneObject.UUID, m_parentScene.RegionInfo.RegionName); | ||
386 | |||
387 | lock (sceneObject.Children) | ||
388 | { | 381 | { |
389 | if (m_parentScene.m_clampPrimSize) | 382 | Vector3 scale = part.Shape.Scale; |
390 | { | 383 | |
391 | foreach (SceneObjectPart part in sceneObject.Children.Values) | 384 | if (scale.X > m_parentScene.m_maxNonphys) |
392 | { | 385 | scale.X = m_parentScene.m_maxNonphys; |
393 | Vector3 scale = part.Shape.Scale; | 386 | if (scale.Y > m_parentScene.m_maxNonphys) |
394 | 387 | scale.Y = m_parentScene.m_maxNonphys; | |
395 | if (scale.X > m_parentScene.m_maxNonphys) | 388 | if (scale.Z > m_parentScene.m_maxNonphys) |
396 | scale.X = m_parentScene.m_maxNonphys; | 389 | scale.Z = m_parentScene.m_maxNonphys; |
397 | if (scale.Y > m_parentScene.m_maxNonphys) | 390 | |
398 | scale.Y = m_parentScene.m_maxNonphys; | 391 | part.Shape.Scale = scale; |
399 | if (scale.Z > m_parentScene.m_maxNonphys) | ||
400 | scale.Z = m_parentScene.m_maxNonphys; | ||
401 | |||
402 | part.Shape.Scale = scale; | ||
403 | } | ||
404 | } | ||
405 | |||
406 | m_numPrim += sceneObject.Children.Count; | ||
407 | } | 392 | } |
408 | 393 | } | |
409 | sceneObject.AttachToScene(m_parentScene); | 394 | m_numPrim += children.Count; |
410 | 395 | ||
411 | if (sendClientUpdates) | 396 | sceneObject.AttachToScene(m_parentScene); |
412 | sceneObject.ScheduleGroupForFullUpdate(); | ||
413 | |||
414 | Entities.Add(sceneObject); | ||
415 | 397 | ||
416 | if (attachToBackup) | 398 | if (sendClientUpdates) |
417 | sceneObject.AttachToBackup(); | 399 | sceneObject.ScheduleGroupForFullUpdate(); |
418 | 400 | ||
419 | if (OnObjectCreate != null) | 401 | Entities.Add(sceneObject); |
420 | OnObjectCreate(sceneObject); | 402 | |
421 | 403 | if (attachToBackup) | |
422 | lock (SceneObjectGroupsByFullID) | 404 | sceneObject.AttachToBackup(); |
423 | { | 405 | |
424 | SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject; | 406 | if (OnObjectCreate != null) |
425 | foreach (SceneObjectPart part in sceneObject.Children.Values) | 407 | OnObjectCreate(sceneObject); |
426 | SceneObjectGroupsByFullID[part.UUID] = sceneObject; | 408 | |
427 | } | 409 | lock (SceneObjectGroupsByFullID) |
428 | 410 | { | |
429 | lock (SceneObjectGroupsByLocalID) | 411 | SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject; |
430 | { | 412 | foreach (SceneObjectPart part in children) |
431 | SceneObjectGroupsByLocalID[sceneObject.LocalId] = sceneObject; | 413 | SceneObjectGroupsByFullID[part.UUID] = sceneObject; |
432 | foreach (SceneObjectPart part in sceneObject.Children.Values) | 414 | } |
433 | SceneObjectGroupsByLocalID[part.LocalId] = sceneObject; | 415 | |
434 | } | 416 | lock (SceneObjectGroupsByLocalID) |
417 | { | ||
418 | SceneObjectGroupsByLocalID[sceneObject.LocalId] = sceneObject; | ||
419 | foreach (SceneObjectPart part in children) | ||
420 | SceneObjectGroupsByLocalID[part.LocalId] = sceneObject; | ||
435 | } | 421 | } |
436 | 422 | ||
437 | return true; | 423 | return true; |
@@ -443,42 +429,38 @@ namespace OpenSim.Region.Framework.Scenes | |||
443 | /// <returns>true if the object was deleted, false if there was no object to delete</returns> | 429 | /// <returns>true if the object was deleted, false if there was no object to delete</returns> |
444 | public bool DeleteSceneObject(UUID uuid, bool resultOfObjectLinked) | 430 | public bool DeleteSceneObject(UUID uuid, bool resultOfObjectLinked) |
445 | { | 431 | { |
446 | if (Entities.ContainsKey(uuid)) | 432 | EntityBase entity; |
447 | { | 433 | if (!Entities.TryGetValue(uuid, out entity) && entity is SceneObjectGroup) |
448 | SceneObjectGroup grp = (SceneObjectGroup)Entities[uuid]; | 434 | return false; |
449 | 435 | ||
450 | if (!resultOfObjectLinked) | 436 | SceneObjectGroup grp = (SceneObjectGroup)entity; |
451 | { | ||
452 | m_numPrim -= grp.PrimCount; | ||
453 | 437 | ||
454 | if ((grp.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics) | 438 | if (!resultOfObjectLinked) |
455 | RemovePhysicalPrim(grp.PrimCount); | 439 | { |
456 | } | 440 | m_numPrim -= grp.PrimCount; |
457 | 441 | ||
458 | if (OnObjectRemove != null) | 442 | if ((grp.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics) |
459 | OnObjectRemove(Entities[uuid]); | 443 | RemovePhysicalPrim(grp.PrimCount); |
444 | } | ||
460 | 445 | ||
461 | lock (SceneObjectGroupsByFullID) | 446 | if (OnObjectRemove != null) |
462 | { | 447 | OnObjectRemove(Entities[uuid]); |
463 | foreach (SceneObjectPart part in grp.Children.Values) | ||
464 | SceneObjectGroupsByFullID.Remove(part.UUID); | ||
465 | SceneObjectGroupsByFullID.Remove(grp.RootPart.UUID); | ||
466 | } | ||
467 | lock (SceneObjectGroupsByLocalID) | ||
468 | { | ||
469 | foreach (SceneObjectPart part in grp.Children.Values) | ||
470 | SceneObjectGroupsByLocalID.Remove(part.LocalId); | ||
471 | SceneObjectGroupsByLocalID.Remove(grp.RootPart.LocalId); | ||
472 | } | ||
473 | 448 | ||
474 | Entities.Remove(uuid); | 449 | lock (SceneObjectGroupsByFullID) |
475 | //SceneObjectGroup part; | 450 | { |
476 | //((part.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics) | 451 | foreach (SceneObjectPart part in grp.Children.Values) |
452 | SceneObjectGroupsByFullID.Remove(part.UUID); | ||
453 | SceneObjectGroupsByFullID.Remove(grp.RootPart.UUID); | ||
454 | } | ||
477 | 455 | ||
478 | return true; | 456 | lock (SceneObjectGroupsByLocalID) |
457 | { | ||
458 | foreach (SceneObjectPart part in grp.Children.Values) | ||
459 | SceneObjectGroupsByLocalID.Remove(part.LocalId); | ||
460 | SceneObjectGroupsByLocalID.Remove(grp.RootPart.LocalId); | ||
479 | } | 461 | } |
480 | 462 | ||
481 | return false; | 463 | return Entities.Remove(uuid); |
482 | } | 464 | } |
483 | 465 | ||
484 | /// <summary> | 466 | /// <summary> |
@@ -490,9 +472,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
490 | protected internal void AddToUpdateList(SceneObjectGroup obj) | 472 | protected internal void AddToUpdateList(SceneObjectGroup obj) |
491 | { | 473 | { |
492 | lock (m_updateList) | 474 | lock (m_updateList) |
493 | { | ||
494 | m_updateList[obj.UUID] = obj; | 475 | m_updateList[obj.UUID] = obj; |
495 | } | ||
496 | } | 476 | } |
497 | 477 | ||
498 | public void FireAttachToBackup(SceneObjectGroup obj) | 478 | public void FireAttachToBackup(SceneObjectGroup obj) |
@@ -526,34 +506,39 @@ namespace OpenSim.Region.Framework.Scenes | |||
526 | { | 506 | { |
527 | if (!Monitor.TryEnter(m_updateLock)) | 507 | if (!Monitor.TryEnter(m_updateLock)) |
528 | return; | 508 | return; |
529 | 509 | try | |
530 | List<SceneObjectGroup> updates; | ||
531 | |||
532 | // Some updates add more updates to the updateList. | ||
533 | // Get the current list of updates and clear the list before iterating | ||
534 | lock (m_updateList) | ||
535 | { | ||
536 | updates = new List<SceneObjectGroup>(m_updateList.Values); | ||
537 | m_updateList.Clear(); | ||
538 | } | ||
539 | |||
540 | // Go through all updates | ||
541 | for (int i = 0; i < updates.Count; i++) | ||
542 | { | 510 | { |
543 | SceneObjectGroup sog = updates[i]; | 511 | List<SceneObjectGroup> updates; |
544 | 512 | ||
545 | // Don't abort the whole update if one entity happens to give us an exception. | 513 | // Some updates add more updates to the updateList. |
546 | try | 514 | // Get the current list of updates and clear the list before iterating |
515 | lock (m_updateList) | ||
547 | { | 516 | { |
548 | sog.Update(); | 517 | updates = new List<SceneObjectGroup>(m_updateList.Values); |
518 | m_updateList.Clear(); | ||
549 | } | 519 | } |
550 | catch (Exception e) | 520 | |
521 | // Go through all updates | ||
522 | for (int i = 0; i < updates.Count; i++) | ||
551 | { | 523 | { |
552 | m_log.ErrorFormat( | 524 | SceneObjectGroup sog = updates[i]; |
553 | "[INNER SCENE]: Failed to update {0}, {1} - {2}", sog.Name, sog.UUID, e); | 525 | |
526 | // Don't abort the whole update if one entity happens to give us an exception. | ||
527 | try | ||
528 | { | ||
529 | sog.Update(); | ||
530 | } | ||
531 | catch (Exception e) | ||
532 | { | ||
533 | m_log.ErrorFormat( | ||
534 | "[INNER SCENE]: Failed to update {0}, {1} - {2}", sog.Name, sog.UUID, e); | ||
535 | } | ||
554 | } | 536 | } |
555 | } | 537 | } |
556 | Monitor.Exit(m_updateLock); | 538 | finally |
539 | { | ||
540 | Monitor.Exit(m_updateLock); | ||
541 | } | ||
557 | } | 542 | } |
558 | 543 | ||
559 | protected internal void AddPhysicalPrim(int number) | 544 | protected internal void AddPhysicalPrim(int number) |
@@ -920,38 +905,38 @@ namespace OpenSim.Region.Framework.Scenes | |||
920 | /// <returns>null if no scene object group containing that prim is found</returns> | 905 | /// <returns>null if no scene object group containing that prim is found</returns> |
921 | public SceneObjectGroup GetGroupByPrim(uint localID) | 906 | public SceneObjectGroup GetGroupByPrim(uint localID) |
922 | { | 907 | { |
923 | if (Entities.ContainsKey(localID)) | 908 | EntityBase entity; |
924 | return Entities[localID] as SceneObjectGroup; | 909 | if (Entities.TryGetValue(localID, out entity)) |
910 | return entity as SceneObjectGroup; | ||
925 | 911 | ||
926 | //m_log.DebugFormat("Entered GetGroupByPrim with localID {0}", localID); | 912 | //m_log.DebugFormat("Entered GetGroupByPrim with localID {0}", localID); |
927 | SceneObjectGroup sog; | 913 | SceneObjectGroup sog; |
928 | lock (SceneObjectGroupsByLocalID) | 914 | lock (SceneObjectGroupsByLocalID) |
915 | SceneObjectGroupsByLocalID.TryGetValue(localID, out sog); | ||
916 | |||
917 | if (sog != null) | ||
929 | { | 918 | { |
930 | if (SceneObjectGroupsByLocalID.TryGetValue(localID, out sog)) | 919 | if (sog.HasChildPrim(localID)) |
931 | { | 920 | return sog; |
932 | if (sog.HasChildPrim(localID)) | 921 | SceneObjectGroupsByLocalID.Remove(localID); |
933 | return sog; | ||
934 | SceneObjectGroupsByLocalID.Remove(localID); | ||
935 | } | ||
936 | } | 922 | } |
937 | 923 | ||
938 | List<EntityBase> EntityList = GetEntities(); | 924 | EntityBase[] entityList = GetEntities(); |
939 | foreach (EntityBase ent in EntityList) | 925 | foreach (EntityBase ent in entityList) |
940 | { | 926 | { |
941 | //m_log.DebugFormat("Looking at entity {0}", ent.UUID); | 927 | //m_log.DebugFormat("Looking at entity {0}", ent.UUID); |
942 | if (ent is SceneObjectGroup) | 928 | if (ent is SceneObjectGroup) |
943 | { | 929 | { |
944 | if (((SceneObjectGroup)ent).HasChildPrim(localID)) | 930 | sog = (SceneObjectGroup)ent; |
931 | if (sog.HasChildPrim(localID)) | ||
945 | { | 932 | { |
946 | sog = (SceneObjectGroup)ent; | ||
947 | lock (SceneObjectGroupsByLocalID) | 933 | lock (SceneObjectGroupsByLocalID) |
948 | { | ||
949 | SceneObjectGroupsByLocalID[localID] = sog; | 934 | SceneObjectGroupsByLocalID[localID] = sog; |
950 | } | ||
951 | return sog; | 935 | return sog; |
952 | } | 936 | } |
953 | } | 937 | } |
954 | } | 938 | } |
939 | |||
955 | return null; | 940 | return null; |
956 | } | 941 | } |
957 | 942 | ||
@@ -964,36 +949,35 @@ namespace OpenSim.Region.Framework.Scenes | |||
964 | { | 949 | { |
965 | SceneObjectGroup sog; | 950 | SceneObjectGroup sog; |
966 | lock (SceneObjectGroupsByFullID) | 951 | lock (SceneObjectGroupsByFullID) |
952 | SceneObjectGroupsByFullID.TryGetValue(fullID, out sog); | ||
953 | |||
954 | if (sog != null) | ||
967 | { | 955 | { |
968 | if (SceneObjectGroupsByFullID.TryGetValue(fullID, out sog)) | 956 | lock (sog.Children) |
969 | { | 957 | { |
970 | lock (sog.Children) | 958 | if (sog.Children.ContainsKey(fullID)) |
971 | { | 959 | return sog; |
972 | if (sog.Children.ContainsKey(fullID)) | ||
973 | return sog; | ||
974 | } | ||
975 | |||
976 | SceneObjectGroupsByFullID.Remove(fullID); | ||
977 | } | 960 | } |
978 | } | ||
979 | 961 | ||
980 | List<EntityBase> EntityList = GetEntities(); | 962 | lock (SceneObjectGroupsByFullID) |
963 | SceneObjectGroupsByFullID.Remove(fullID); | ||
964 | } | ||
981 | 965 | ||
982 | foreach (EntityBase ent in EntityList) | 966 | EntityBase[] entityList = GetEntities(); |
967 | foreach (EntityBase ent in entityList) | ||
983 | { | 968 | { |
984 | if (ent is SceneObjectGroup) | 969 | if (ent is SceneObjectGroup) |
985 | { | 970 | { |
986 | if (((SceneObjectGroup)ent).HasChildPrim(fullID)) | 971 | sog = (SceneObjectGroup)ent; |
972 | if (sog.HasChildPrim(fullID)) | ||
987 | { | 973 | { |
988 | sog = (SceneObjectGroup)ent; | ||
989 | lock (SceneObjectGroupsByFullID) | 974 | lock (SceneObjectGroupsByFullID) |
990 | { | ||
991 | SceneObjectGroupsByFullID[fullID] = sog; | 975 | SceneObjectGroupsByFullID[fullID] = sog; |
992 | } | ||
993 | return sog; | 976 | return sog; |
994 | } | 977 | } |
995 | } | 978 | } |
996 | } | 979 | } |
980 | |||
997 | return null; | 981 | return null; |
998 | } | 982 | } |
999 | 983 | ||
@@ -1002,7 +986,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1002 | // Primitive Ray Tracing | 986 | // Primitive Ray Tracing |
1003 | float closestDistance = 280f; | 987 | float closestDistance = 280f; |
1004 | EntityIntersection result = new EntityIntersection(); | 988 | EntityIntersection result = new EntityIntersection(); |
1005 | List<EntityBase> EntityList = GetEntities(); | 989 | EntityBase[] EntityList = GetEntities(); |
1006 | foreach (EntityBase ent in EntityList) | 990 | foreach (EntityBase ent in EntityList) |
1007 | { | 991 | { |
1008 | if (ent is SceneObjectGroup) | 992 | if (ent is SceneObjectGroup) |
@@ -1040,23 +1024,28 @@ namespace OpenSim.Region.Framework.Scenes | |||
1040 | /// <returns>null if the part was not found</returns> | 1024 | /// <returns>null if the part was not found</returns> |
1041 | protected internal SceneObjectPart GetSceneObjectPart(string name) | 1025 | protected internal SceneObjectPart GetSceneObjectPart(string name) |
1042 | { | 1026 | { |
1043 | List<EntityBase> EntityList = GetEntities(); | 1027 | SceneObjectPart sop = null; |
1044 | 1028 | ||
1045 | // FIXME: use a dictionary here | 1029 | Entities.Find( |
1046 | foreach (EntityBase ent in EntityList) | 1030 | delegate(EntityBase entity) |
1047 | { | ||
1048 | if (ent is SceneObjectGroup) | ||
1049 | { | 1031 | { |
1050 | foreach (SceneObjectPart p in ((SceneObjectGroup) ent).GetParts()) | 1032 | if (entity is SceneObjectGroup) |
1051 | { | 1033 | { |
1052 | if (p.Name == name) | 1034 | foreach (SceneObjectPart p in ((SceneObjectGroup)entity).GetParts()) |
1053 | { | 1035 | { |
1054 | return p; | 1036 | if (p.Name == name) |
1037 | { | ||
1038 | sop = p; | ||
1039 | return true; | ||
1040 | } | ||
1055 | } | 1041 | } |
1056 | } | 1042 | } |
1043 | |||
1044 | return false; | ||
1057 | } | 1045 | } |
1058 | } | 1046 | ); |
1059 | return null; | 1047 | |
1048 | return sop; | ||
1060 | } | 1049 | } |
1061 | 1050 | ||
1062 | /// <summary> | 1051 | /// <summary> |
@@ -1077,7 +1066,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1077 | /// it | 1066 | /// it |
1078 | /// </summary> | 1067 | /// </summary> |
1079 | /// <returns></returns> | 1068 | /// <returns></returns> |
1080 | protected internal List<EntityBase> GetEntities() | 1069 | protected internal EntityBase[] GetEntities() |
1081 | { | 1070 | { |
1082 | return Entities.GetEntities(); | 1071 | return Entities.GetEntities(); |
1083 | } | 1072 | } |
@@ -1086,7 +1075,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1086 | { | 1075 | { |
1087 | Dictionary<uint, float> topScripts = new Dictionary<uint, float>(); | 1076 | Dictionary<uint, float> topScripts = new Dictionary<uint, float>(); |
1088 | 1077 | ||
1089 | List<EntityBase> EntityList = GetEntities(); | 1078 | EntityBase[] EntityList = GetEntities(); |
1090 | int limit = 0; | 1079 | int limit = 0; |
1091 | foreach (EntityBase ent in EntityList) | 1080 | foreach (EntityBase ent in EntityList) |
1092 | { | 1081 | { |
@@ -1140,7 +1129,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1140 | /// <param name="action"></param> | 1129 | /// <param name="action"></param> |
1141 | protected internal void ForEachSOG(Action<SceneObjectGroup> action) | 1130 | protected internal void ForEachSOG(Action<SceneObjectGroup> action) |
1142 | { | 1131 | { |
1143 | List<EntityBase> objlist = Entities.GetAllByType<SceneObjectGroup>(); | 1132 | EntityBase[] objlist = Entities.GetAllByType<SceneObjectGroup>(); |
1144 | foreach (EntityBase ent in objlist) | 1133 | foreach (EntityBase ent in objlist) |
1145 | { | 1134 | { |
1146 | SceneObjectGroup obj = (SceneObjectGroup)ent; | 1135 | SceneObjectGroup obj = (SceneObjectGroup)ent; |
@@ -1353,7 +1342,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1353 | SceneObjectGroup group = GetGroupByPrim(localID); | 1342 | SceneObjectGroup group = GetGroupByPrim(localID); |
1354 | 1343 | ||
1355 | if (group != null) | 1344 | if (group != null) |
1356 | { | 1345 | { |
1357 | if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) | 1346 | if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) |
1358 | { | 1347 | { |
1359 | if (m_parentScene.AttachmentsModule != null) | 1348 | if (m_parentScene.AttachmentsModule != null) |
@@ -1798,8 +1787,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1798 | UUID objid = UUID.Zero; | 1787 | UUID objid = UUID.Zero; |
1799 | SceneObjectPart obj = null; | 1788 | SceneObjectPart obj = null; |
1800 | 1789 | ||
1801 | List<EntityBase> EntityList = GetEntities(); | 1790 | EntityBase[] entityList = GetEntities(); |
1802 | foreach (EntityBase ent in EntityList) | 1791 | foreach (EntityBase ent in entityList) |
1803 | { | 1792 | { |
1804 | if (ent is SceneObjectGroup) | 1793 | if (ent is SceneObjectGroup) |
1805 | { | 1794 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 470fdd7..a952508 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1326,7 +1326,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1326 | AbsolutePosition = detachedpos; | 1326 | AbsolutePosition = detachedpos; |
1327 | m_rootPart.AttachedAvatar = UUID.Zero; | 1327 | m_rootPart.AttachedAvatar = UUID.Zero; |
1328 | 1328 | ||
1329 | //Anakin Lohner bug #3839 | 1329 | //Anakin Lohner bug #3839 |
1330 | lock (m_parts) | 1330 | lock (m_parts) |
1331 | { | 1331 | { |
1332 | foreach (SceneObjectPart p in m_parts.Values) | 1332 | foreach (SceneObjectPart p in m_parts.Values) |
@@ -1556,7 +1556,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1556 | } | 1556 | } |
1557 | 1557 | ||
1558 | /// <summary> | 1558 | /// <summary> |
1559 | /// Delete this group from its scene. | 1559 | /// Delete this group from its scene. |
1560 | /// </summary> | 1560 | /// </summary> |
1561 | /// | 1561 | /// |
1562 | /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood | 1562 | /// This only handles the in-world consequences of deletion (e.g. any avatars sitting on it are forcibly stood |
@@ -1731,12 +1731,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1731 | /// Processes backup. | 1731 | /// Processes backup. |
1732 | /// </summary> | 1732 | /// </summary> |
1733 | /// <param name="datastore"></param> | 1733 | /// <param name="datastore"></param> |
1734 | public virtual void ProcessBackup(IRegionDataStore datastore, bool forcedBackup) | 1734 | public virtual void ProcessBackup(ISimulationDataService datastore, bool forcedBackup) |
1735 | { | 1735 | { |
1736 | if (!m_isBackedUp) | 1736 | if (!m_isBackedUp) |
1737 | { | 1737 | { |
1738 | // m_log.DebugFormat( | 1738 | // m_log.DebugFormat( |
1739 | // "[WATER WARS]: Ignoring backup of {0} {1} since object is not marked to be backed up", Name, UUID); | 1739 | // "[WATER WARS]: Ignoring backup of {0} {1} since object is not marked to be backed up", Name, UUID); |
1740 | return; | 1740 | return; |
1741 | } | 1741 | } |
1742 | 1742 | ||
@@ -1748,7 +1748,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1748 | } | 1748 | } |
1749 | 1749 | ||
1750 | // Since this is the top of the section of call stack for backing up a particular scene object, don't let | 1750 | // Since this is the top of the section of call stack for backing up a particular scene object, don't let |
1751 | // any exception propogate upwards. | 1751 | // any exception propogate upwards. |
1752 | try | 1752 | try |
1753 | { | 1753 | { |
1754 | if (!m_scene.ShuttingDown || // if shutting down then there will be nothing to handle the return so leave till next restart | 1754 | if (!m_scene.ShuttingDown || // if shutting down then there will be nothing to handle the return so leave till next restart |
@@ -1944,7 +1944,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1944 | part.PhysActor.LocalID = part.LocalId; | 1944 | part.PhysActor.LocalID = part.LocalId; |
1945 | part.DoPhysicsPropertyUpdate(part.PhysActor.IsPhysical, true); | 1945 | part.DoPhysicsPropertyUpdate(part.PhysActor.IsPhysical, true); |
1946 | } | 1946 | } |
1947 | |||
1948 | } | 1947 | } |
1949 | if (userExposed) | 1948 | if (userExposed) |
1950 | { | 1949 | { |
@@ -1954,7 +1953,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1954 | 1953 | ||
1955 | ScheduleGroupForFullUpdate(); | 1954 | ScheduleGroupForFullUpdate(); |
1956 | } | 1955 | } |
1957 | |||
1958 | } | 1956 | } |
1959 | finally | 1957 | finally |
1960 | { | 1958 | { |
@@ -2515,16 +2513,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2515 | /// <returns>null if a child part with the primID was not found</returns> | 2513 | /// <returns>null if a child part with the primID was not found</returns> |
2516 | public SceneObjectPart GetChildPart(UUID primID) | 2514 | public SceneObjectPart GetChildPart(UUID primID) |
2517 | { | 2515 | { |
2518 | SceneObjectPart childPart = null; | 2516 | SceneObjectPart childPart; |
2519 | |||
2520 | lock (m_parts) | 2517 | lock (m_parts) |
2521 | { | 2518 | m_parts.TryGetValue(primID, out childPart); |
2522 | if (m_parts.ContainsKey(primID)) | ||
2523 | { | ||
2524 | childPart = m_parts[primID]; | ||
2525 | } | ||
2526 | } | ||
2527 | |||
2528 | return childPart; | 2519 | return childPart; |
2529 | } | 2520 | } |
2530 | 2521 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index eefe8bb..5c4a2a3 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -508,7 +508,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
508 | public UUID UUID | 508 | public UUID UUID |
509 | { | 509 | { |
510 | get { return m_uuid; } | 510 | get { return m_uuid; } |
511 | set { m_uuid = value; } | 511 | set |
512 | { | ||
513 | m_uuid = value; | ||
514 | |||
515 | // This is necessary so that TaskInventoryItem parent ids correctly reference the new uuid of this part | ||
516 | if (Inventory != null) | ||
517 | Inventory.ResetInventoryIDs(); | ||
518 | } | ||
512 | } | 519 | } |
513 | 520 | ||
514 | public uint LocalId | 521 | public uint LocalId |
@@ -1027,12 +1034,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1027 | return m_mediaUrl; | 1034 | return m_mediaUrl; |
1028 | } | 1035 | } |
1029 | 1036 | ||
1030 | set | 1037 | set |
1031 | { | 1038 | { |
1032 | m_mediaUrl = value; | 1039 | m_mediaUrl = value; |
1033 | 1040 | ||
1034 | if (ParentGroup != null) | 1041 | if (ParentGroup != null) |
1035 | ParentGroup.HasGroupChanged = true; | 1042 | ParentGroup.HasGroupChanged = true; |
1036 | } | 1043 | } |
1037 | } | 1044 | } |
1038 | 1045 | ||
@@ -1045,7 +1052,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1045 | // m_log.DebugFormat("[SOP]: Setting CreateSelected to {0} for {1} {2}", value, Name, UUID); | 1052 | // m_log.DebugFormat("[SOP]: Setting CreateSelected to {0} for {1} {2}", value, Name, UUID); |
1046 | m_createSelected = value; | 1053 | m_createSelected = value; |
1047 | } | 1054 | } |
1048 | } | 1055 | } |
1049 | 1056 | ||
1050 | #endregion | 1057 | #endregion |
1051 | 1058 | ||
@@ -1207,7 +1214,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1207 | 1214 | ||
1208 | /// <summary> | 1215 | /// <summary> |
1209 | /// Property flags. See OpenMetaverse.PrimFlags | 1216 | /// Property flags. See OpenMetaverse.PrimFlags |
1210 | /// </summary> | 1217 | /// </summary> |
1211 | /// Example properties are PrimFlags.Phantom and PrimFlags.DieAtEdge | 1218 | /// Example properties are PrimFlags.Phantom and PrimFlags.DieAtEdge |
1212 | public PrimFlags Flags | 1219 | public PrimFlags Flags |
1213 | { | 1220 | { |
@@ -1372,7 +1379,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1372 | 1379 | ||
1373 | /// <summary> | 1380 | /// <summary> |
1374 | /// Tell the scene presence that it should send updates for this part to its client | 1381 | /// Tell the scene presence that it should send updates for this part to its client |
1375 | /// </summary> | 1382 | /// </summary> |
1376 | public void AddFullUpdateToAvatar(ScenePresence presence) | 1383 | public void AddFullUpdateToAvatar(ScenePresence presence) |
1377 | { | 1384 | { |
1378 | presence.SceneViewer.QueuePartForUpdate(this); | 1385 | presence.SceneViewer.QueuePartForUpdate(this); |
@@ -1431,7 +1438,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1431 | 1438 | ||
1432 | m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence sp) | 1439 | m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence sp) |
1433 | { | 1440 | { |
1434 | if(!sp.IsChildAgent) | 1441 | if (!sp.IsChildAgent) |
1435 | sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume); | 1442 | sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume); |
1436 | }); | 1443 | }); |
1437 | } | 1444 | } |
@@ -1683,7 +1690,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1683 | 1690 | ||
1684 | // m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID); | 1691 | // m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID); |
1685 | 1692 | ||
1686 | return dupe; | 1693 | return dupe; |
1687 | } | 1694 | } |
1688 | 1695 | ||
1689 | protected void AssetReceived(string id, Object sender, AssetBase asset) | 1696 | protected void AssetReceived(string id, Object sender, AssetBase asset) |
@@ -1993,10 +2000,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1993 | } | 2000 | } |
1994 | 2001 | ||
1995 | public uint GetEffectiveObjectFlags() | 2002 | public uint GetEffectiveObjectFlags() |
1996 | { | 2003 | { |
1997 | // Commenting this section of code out since it doesn't actually do anything, as enums are handled by | 2004 | // Commenting this section of code out since it doesn't actually do anything, as enums are handled by |
1998 | // value rather than reference | 2005 | // value rather than reference |
1999 | // PrimFlags f = _flags; | 2006 | // PrimFlags f = _flags; |
2000 | // if (m_parentGroup == null || m_parentGroup.RootPart == this) | 2007 | // if (m_parentGroup == null || m_parentGroup.RootPart == this) |
2001 | // f &= ~(PrimFlags.Touch | PrimFlags.Money); | 2008 | // f &= ~(PrimFlags.Touch | PrimFlags.Money); |
2002 | 2009 | ||
@@ -2793,7 +2800,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2793 | UUID = UUID.Random(); | 2800 | UUID = UUID.Random(); |
2794 | LinkNum = linkNum; | 2801 | LinkNum = linkNum; |
2795 | LocalId = 0; | 2802 | LocalId = 0; |
2796 | Inventory.ResetInventoryIDs(); | ||
2797 | } | 2803 | } |
2798 | 2804 | ||
2799 | /// <summary> | 2805 | /// <summary> |
@@ -4756,7 +4762,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4756 | if (ParentGroup == null || ParentGroup.IsDeleted) | 4762 | if (ParentGroup == null || ParentGroup.IsDeleted) |
4757 | return; | 4763 | return; |
4758 | 4764 | ||
4759 | if (IsAttachment && ParentGroup.RootPart != this) | 4765 | if (IsAttachment && ParentGroup.RootPart != this) |
4760 | return; | 4766 | return; |
4761 | 4767 | ||
4762 | // Causes this thread to dig into the Client Thread Data. | 4768 | // Causes this thread to dig into the Client Thread Data. |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 1959427..2de439b 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | |||
@@ -125,7 +125,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
125 | { | 125 | { |
126 | m_items.LockItemsForWrite(true); | 126 | m_items.LockItemsForWrite(true); |
127 | 127 | ||
128 | if (0 == Items.Count) | 128 | if (Items.Count == 0) |
129 | { | 129 | { |
130 | m_items.LockItemsForWrite(false); | 130 | m_items.LockItemsForWrite(false); |
131 | return; | 131 | return; |
@@ -1010,7 +1010,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1010 | /// Process inventory backup | 1010 | /// Process inventory backup |
1011 | /// </summary> | 1011 | /// </summary> |
1012 | /// <param name="datastore"></param> | 1012 | /// <param name="datastore"></param> |
1013 | public void ProcessInventoryBackup(IRegionDataStore datastore) | 1013 | public void ProcessInventoryBackup(ISimulationDataService datastore) |
1014 | { | 1014 | { |
1015 | if (HasInventoryChanged) | 1015 | if (HasInventoryChanged) |
1016 | { | 1016 | { |
@@ -1257,7 +1257,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1257 | engine.ResumeScript(item.ItemID); | 1257 | engine.ResumeScript(item.ItemID); |
1258 | } | 1258 | } |
1259 | } | 1259 | } |
1260 | } | 1260 | } |
1261 | } | 1261 | } |
1262 | 1262 | ||
1263 | Items.LockItemsForRead(false); | 1263 | Items.LockItemsForRead(false); |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index d88f2cc..6d0ecf0 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1427,7 +1427,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1427 | // Setting parent ID would fix this, if we knew what value | 1427 | // Setting parent ID would fix this, if we knew what value |
1428 | // to use. Or we could add a m_isSitting variable. | 1428 | // to use. Or we could add a m_isSitting variable. |
1429 | //Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); | 1429 | //Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); |
1430 | SitGround = true; | 1430 | SitGround = true; |
1431 | } | 1431 | } |
1432 | 1432 | ||
1433 | // In the future, these values might need to go global. | 1433 | // In the future, these values might need to go global. |
diff --git a/OpenSim/Region/Framework/Scenes/SceneViewer.cs b/OpenSim/Region/Framework/Scenes/SceneViewer.cs index f478a4a..b45291f 100644 --- a/OpenSim/Region/Framework/Scenes/SceneViewer.cs +++ b/OpenSim/Region/Framework/Scenes/SceneViewer.cs | |||
@@ -73,9 +73,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
73 | { | 73 | { |
74 | m_pendingObjects = new Queue<SceneObjectGroup>(); | 74 | m_pendingObjects = new Queue<SceneObjectGroup>(); |
75 | 75 | ||
76 | lock(m_pendingObjects) | 76 | lock (m_pendingObjects) |
77 | { | 77 | { |
78 | foreach (EntityBase e in m_presence.Scene.Entities) | 78 | EntityBase[] entities = m_presence.Scene.Entities.GetEntities(); |
79 | foreach (EntityBase e in entities) | ||
79 | { | 80 | { |
80 | if (e != null && e is SceneObjectGroup) | 81 | if (e != null && e is SceneObjectGroup) |
81 | m_pendingObjects.Enqueue((SceneObjectGroup)e); | 82 | m_pendingObjects.Enqueue((SceneObjectGroup)e); |
@@ -84,7 +85,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
84 | } | 85 | } |
85 | } | 86 | } |
86 | 87 | ||
87 | lock(m_pendingObjects) | 88 | lock (m_pendingObjects) |
88 | { | 89 | { |
89 | while (m_pendingObjects != null && m_pendingObjects.Count > 0) | 90 | while (m_pendingObjects != null && m_pendingObjects.Count > 0) |
90 | { | 91 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs index b6677f0..5494549 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs | |||
@@ -84,9 +84,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
84 | int primCount = 0; | 84 | int primCount = 0; |
85 | stream.WriteLine("<scene>\n"); | 85 | stream.WriteLine("<scene>\n"); |
86 | 86 | ||
87 | List<EntityBase> EntityList = scene.GetEntities(); | 87 | EntityBase[] entityList = scene.GetEntities(); |
88 | 88 | foreach (EntityBase ent in entityList) | |
89 | foreach (EntityBase ent in EntityList) | ||
90 | { | 89 | { |
91 | if (ent is SceneObjectGroup) | 90 | if (ent is SceneObjectGroup) |
92 | { | 91 | { |
@@ -204,16 +203,14 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
204 | 203 | ||
205 | public static void SavePrimsToXml2(Scene scene, string fileName) | 204 | public static void SavePrimsToXml2(Scene scene, string fileName) |
206 | { | 205 | { |
207 | List<EntityBase> EntityList = scene.GetEntities(); | 206 | EntityBase[] entityList = scene.GetEntities(); |
208 | 207 | SavePrimListToXml2(entityList, fileName); | |
209 | SavePrimListToXml2(EntityList, fileName); | ||
210 | } | 208 | } |
211 | 209 | ||
212 | public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max) | 210 | public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max) |
213 | { | 211 | { |
214 | List<EntityBase> EntityList = scene.GetEntities(); | 212 | EntityBase[] entityList = scene.GetEntities(); |
215 | 213 | SavePrimListToXml2(entityList, stream, min, max); | |
216 | SavePrimListToXml2(EntityList, stream, min, max); | ||
217 | } | 214 | } |
218 | 215 | ||
219 | public static void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName) | 216 | public static void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName) |
@@ -222,7 +219,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
222 | "[SERIALISER]: Saving prims with name {0} in xml2 format for region {1} to {2}", | 219 | "[SERIALISER]: Saving prims with name {0} in xml2 format for region {1} to {2}", |
223 | primName, scene.RegionInfo.RegionName, fileName); | 220 | primName, scene.RegionInfo.RegionName, fileName); |
224 | 221 | ||
225 | List<EntityBase> entityList = scene.GetEntities(); | 222 | EntityBase[] entityList = scene.GetEntities(); |
226 | List<EntityBase> primList = new List<EntityBase>(); | 223 | List<EntityBase> primList = new List<EntityBase>(); |
227 | 224 | ||
228 | foreach (EntityBase ent in entityList) | 225 | foreach (EntityBase ent in entityList) |
@@ -236,10 +233,10 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
236 | } | 233 | } |
237 | } | 234 | } |
238 | 235 | ||
239 | SavePrimListToXml2(primList, fileName); | 236 | SavePrimListToXml2(primList.ToArray(), fileName); |
240 | } | 237 | } |
241 | 238 | ||
242 | public static void SavePrimListToXml2(List<EntityBase> entityList, string fileName) | 239 | public static void SavePrimListToXml2(EntityBase[] entityList, string fileName) |
243 | { | 240 | { |
244 | FileStream file = new FileStream(fileName, FileMode.Create); | 241 | FileStream file = new FileStream(fileName, FileMode.Create); |
245 | try | 242 | try |
@@ -260,7 +257,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
260 | } | 257 | } |
261 | } | 258 | } |
262 | 259 | ||
263 | public static void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, Vector3 min, Vector3 max) | 260 | public static void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max) |
264 | { | 261 | { |
265 | int primCount = 0; | 262 | int primCount = 0; |
266 | stream.WriteLine("<scene>\n"); | 263 | stream.WriteLine("<scene>\n"); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs index c9662ef..7d9a6a9 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs | |||
@@ -71,7 +71,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
71 | Assert.That(dupeSo.Children.Count, Is.EqualTo(2)); | 71 | Assert.That(dupeSo.Children.Count, Is.EqualTo(2)); |
72 | 72 | ||
73 | SceneObjectPart dupePart1 = dupeSo.GetLinkNumPart(1); | 73 | SceneObjectPart dupePart1 = dupeSo.GetLinkNumPart(1); |
74 | SceneObjectPart dupePart2 = dupeSo.GetLinkNumPart(2); | 74 | SceneObjectPart dupePart2 = dupeSo.GetLinkNumPart(2); |
75 | Assert.That(dupePart1.LocalId, Is.Not.EqualTo(part1.LocalId)); | 75 | Assert.That(dupePart1.LocalId, Is.Not.EqualTo(part1.LocalId)); |
76 | Assert.That(dupePart2.LocalId, Is.Not.EqualTo(part2.LocalId)); | 76 | Assert.That(dupePart2.LocalId, Is.Not.EqualTo(part2.LocalId)); |
77 | 77 | ||
@@ -84,6 +84,6 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
84 | Assert.That(dupePart1.PhysActor, Is.Not.Null); | 84 | Assert.That(dupePart1.PhysActor, Is.Not.Null); |
85 | Assert.That(dupePart2.PhysActor, Is.Not.Null); | 85 | Assert.That(dupePart2.PhysActor, Is.Not.Null); |
86 | */ | 86 | */ |
87 | } | 87 | } |
88 | } | 88 | } |
89 | } \ No newline at end of file | 89 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs index e3ef263..60824be 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs | |||
@@ -270,7 +270,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
270 | TestHelper.InMethod(); | 270 | TestHelper.InMethod(); |
271 | //log4net.Config.XmlConfigurator.Configure(); | 271 | //log4net.Config.XmlConfigurator.Configure(); |
272 | 272 | ||
273 | TestScene scene = SceneSetupHelpers.SetupScene(); | 273 | TestScene scene = SceneSetupHelpers.SetupScene(); |
274 | 274 | ||
275 | string rootPartName = "rootpart"; | 275 | string rootPartName = "rootpart"; |
276 | UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); | 276 | UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); |
@@ -282,17 +282,17 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
282 | { Name = rootPartName, UUID = rootPartUuid }; | 282 | { Name = rootPartName, UUID = rootPartUuid }; |
283 | SceneObjectPart linkPart | 283 | SceneObjectPart linkPart |
284 | = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) | 284 | = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) |
285 | { Name = linkPartName, UUID = linkPartUuid }; | 285 | { Name = linkPartName, UUID = linkPartUuid }; |
286 | 286 | ||
287 | SceneObjectGroup sog = new SceneObjectGroup(rootPart); | 287 | SceneObjectGroup sog = new SceneObjectGroup(rootPart); |
288 | sog.AddPart(linkPart); | 288 | sog.AddPart(linkPart); |
289 | scene.AddNewSceneObject(sog, true); | 289 | scene.AddNewSceneObject(sog, true); |
290 | 290 | ||
291 | // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked | 291 | // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked |
292 | // scene backup thread. | 292 | // scene backup thread. |
293 | scene.Backup(true); | 293 | scene.Backup(true); |
294 | 294 | ||
295 | List<SceneObjectGroup> storedObjects = scene.StorageManager.DataStore.LoadObjects(scene.RegionInfo.RegionID); | 295 | List<SceneObjectGroup> storedObjects = scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID); |
296 | 296 | ||
297 | Assert.That(storedObjects.Count, Is.EqualTo(1)); | 297 | Assert.That(storedObjects.Count, Is.EqualTo(1)); |
298 | Assert.That(storedObjects[0].Children.Count, Is.EqualTo(2)); | 298 | Assert.That(storedObjects[0].Children.Count, Is.EqualTo(2)); |
@@ -309,7 +309,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
309 | TestHelper.InMethod(); | 309 | TestHelper.InMethod(); |
310 | //log4net.Config.XmlConfigurator.Configure(); | 310 | //log4net.Config.XmlConfigurator.Configure(); |
311 | 311 | ||
312 | TestScene scene = SceneSetupHelpers.SetupScene(); | 312 | TestScene scene = SceneSetupHelpers.SetupScene(); |
313 | 313 | ||
314 | string rootPartName = "rootpart"; | 314 | string rootPartName = "rootpart"; |
315 | UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); | 315 | UUID rootPartUuid = new UUID("00000000-0000-0000-0000-000000000001"); |
@@ -321,11 +321,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
321 | { Name = rootPartName, UUID = rootPartUuid }; | 321 | { Name = rootPartName, UUID = rootPartUuid }; |
322 | SceneObjectPart linkPart | 322 | SceneObjectPart linkPart |
323 | = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) | 323 | = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) |
324 | { Name = linkPartName, UUID = linkPartUuid }; | 324 | { Name = linkPartName, UUID = linkPartUuid }; |
325 | 325 | ||
326 | SceneObjectGroup sog = new SceneObjectGroup(rootPart); | 326 | SceneObjectGroup sog = new SceneObjectGroup(rootPart); |
327 | sog.AddPart(linkPart); | 327 | sog.AddPart(linkPart); |
328 | scene.AddNewSceneObject(sog, true); | 328 | scene.AddNewSceneObject(sog, true); |
329 | 329 | ||
330 | // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked | 330 | // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked |
331 | // scene backup thread. | 331 | // scene backup thread. |
@@ -333,9 +333,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
333 | 333 | ||
334 | // These changes should occur immediately without waiting for a backup pass | 334 | // These changes should occur immediately without waiting for a backup pass |
335 | SceneObjectGroup groupToDelete = sog.DelinkFromGroup(linkPart, false); | 335 | SceneObjectGroup groupToDelete = sog.DelinkFromGroup(linkPart, false); |
336 | scene.DeleteSceneObject(groupToDelete, false); | 336 | scene.DeleteSceneObject(groupToDelete, false); |
337 | 337 | ||
338 | List<SceneObjectGroup> storedObjects = scene.StorageManager.DataStore.LoadObjects(scene.RegionInfo.RegionID); | 338 | List<SceneObjectGroup> storedObjects = scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID); |
339 | 339 | ||
340 | Assert.That(storedObjects.Count, Is.EqualTo(1)); | 340 | Assert.That(storedObjects.Count, Is.EqualTo(1)); |
341 | Assert.That(storedObjects[0].Children.Count, Is.EqualTo(1)); | 341 | Assert.That(storedObjects[0].Children.Count, Is.EqualTo(1)); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs index da8199d..fe59d4f 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs | |||
@@ -59,8 +59,8 @@ namespace OpenSim.Region.Framework.Tests | |||
59 | string userFirstName = "Jock"; | 59 | string userFirstName = "Jock"; |
60 | string userLastName = "Stirrup"; | 60 | string userLastName = "Stirrup"; |
61 | string userPassword = "troll"; | 61 | string userPassword = "troll"; |
62 | UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020"); | 62 | UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020"); |
63 | return UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword); | 63 | return UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword); |
64 | } | 64 | } |
65 | 65 | ||
66 | protected SceneObjectGroup CreateSO1(Scene scene, UUID ownerId) | 66 | protected SceneObjectGroup CreateSO1(Scene scene, UUID ownerId) |
@@ -70,14 +70,16 @@ namespace OpenSim.Region.Framework.Tests | |||
70 | SceneObjectPart part1 | 70 | SceneObjectPart part1 |
71 | = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) | 71 | = new SceneObjectPart(ownerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) |
72 | { Name = part1Name, UUID = part1Id }; | 72 | { Name = part1Name, UUID = part1Id }; |
73 | return new SceneObjectGroup(part1); | 73 | return new SceneObjectGroup(part1); |
74 | } | 74 | } |
75 | 75 | ||
76 | protected TaskInventoryItem CreateSOItem1(Scene scene, SceneObjectPart part) | 76 | protected TaskInventoryItem CreateSOItem1(Scene scene, SceneObjectPart part) |
77 | { | 77 | { |
78 | AssetNotecard nc = new AssetNotecard("Hello World!"); | 78 | AssetNotecard nc = new AssetNotecard(); |
79 | nc.BodyText = "Hello World!"; | ||
80 | nc.Encode(); | ||
79 | UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); | 81 | UUID ncAssetUuid = new UUID("00000000-0000-0000-1000-000000000000"); |
80 | UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); | 82 | UUID ncItemUuid = new UUID("00000000-0000-0000-1100-000000000000"); |
81 | AssetBase ncAsset | 83 | AssetBase ncAsset |
82 | = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero); | 84 | = AssetHelpers.CreateAsset(ncAssetUuid, AssetType.Notecard, nc.AssetData, UUID.Zero); |
83 | scene.AssetService.Store(ncAsset); | 85 | scene.AssetService.Store(ncAsset); |
@@ -112,9 +114,9 @@ namespace OpenSim.Region.Framework.Tests | |||
112 | scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID); | 114 | scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID); |
113 | 115 | ||
114 | InventoryItemBase ncUserItem | 116 | InventoryItemBase ncUserItem |
115 | = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Objects/ncItem"); | 117 | = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Objects/ncItem"); |
116 | Assert.That(ncUserItem, Is.Not.Null, "Objects/ncItem was not found"); | 118 | Assert.That(ncUserItem, Is.Not.Null, "Objects/ncItem was not found"); |
117 | } | 119 | } |
118 | 120 | ||
119 | /// <summary> | 121 | /// <summary> |
120 | /// Test MoveTaskInventoryItem where the item has no parent folder assigned. | 122 | /// Test MoveTaskInventoryItem where the item has no parent folder assigned. |
@@ -136,7 +138,7 @@ namespace OpenSim.Region.Framework.Tests | |||
136 | scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID); | 138 | scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID); |
137 | 139 | ||
138 | InventoryItemBase ncUserItem | 140 | InventoryItemBase ncUserItem |
139 | = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Notecards/ncItem"); | 141 | = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Notecards/ncItem"); |
140 | Assert.That(ncUserItem, Is.Not.Null, "Notecards/ncItem was not found"); | 142 | Assert.That(ncUserItem, Is.Not.Null, "Notecards/ncItem was not found"); |
141 | } | 143 | } |
142 | } | 144 | } |
diff --git a/OpenSim/Region/Framework/StorageManager.cs b/OpenSim/Region/Framework/StorageManager.cs deleted file mode 100644 index 9375b4a..0000000 --- a/OpenSim/Region/Framework/StorageManager.cs +++ /dev/null | |||
@@ -1,96 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Reflection; | ||
30 | using log4net; | ||
31 | using OpenSim.Region.Framework.Interfaces; | ||
32 | |||
33 | namespace OpenSim.Region.Framework | ||
34 | { | ||
35 | public class StorageManager | ||
36 | { | ||
37 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
38 | |||
39 | protected IRegionDataStore m_dataStore; | ||
40 | |||
41 | public IRegionDataStore DataStore | ||
42 | { | ||
43 | get { return m_dataStore; } | ||
44 | } | ||
45 | |||
46 | private IEstateDataStore m_estateDataStore; | ||
47 | |||
48 | public IEstateDataStore EstateDataStore | ||
49 | { | ||
50 | get { return m_estateDataStore; } | ||
51 | } | ||
52 | |||
53 | public StorageManager(IRegionDataStore storage) | ||
54 | { | ||
55 | m_dataStore = storage; | ||
56 | } | ||
57 | |||
58 | public StorageManager(string dllName, string connectionstring, string estateconnectionstring) | ||
59 | { | ||
60 | m_log.Info("[DATASTORE]: Attempting to load " + dllName); | ||
61 | Assembly pluginAssembly = Assembly.LoadFrom(dllName); | ||
62 | |||
63 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
64 | { | ||
65 | if (pluginType.IsPublic) | ||
66 | { | ||
67 | Type typeInterface = pluginType.GetInterface("IRegionDataStore", true); | ||
68 | |||
69 | if (typeInterface != null) | ||
70 | { | ||
71 | IRegionDataStore plug = | ||
72 | (IRegionDataStore) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
73 | plug.Initialise(connectionstring); | ||
74 | |||
75 | m_dataStore = plug; | ||
76 | |||
77 | m_log.Info("[DATASTORE]: Added IRegionDataStore Interface"); | ||
78 | } | ||
79 | |||
80 | typeInterface = pluginType.GetInterface("IEstateDataStore", true); | ||
81 | |||
82 | if (typeInterface != null) | ||
83 | { | ||
84 | IEstateDataStore estPlug = | ||
85 | (IEstateDataStore) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
86 | estPlug.Initialise(estateconnectionstring); | ||
87 | |||
88 | m_estateDataStore = estPlug; | ||
89 | } | ||
90 | } | ||
91 | } | ||
92 | |||
93 | //TODO: Add checking and warning to make sure it initialised. | ||
94 | } | ||
95 | } | ||
96 | } | ||
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index b98aabe..4ab67aa 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -375,8 +375,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
375 | 375 | ||
376 | private void IRC_SendNamesReply() | 376 | private void IRC_SendNamesReply() |
377 | { | 377 | { |
378 | List<EntityBase> users = m_scene.Entities.GetAllByType<ScenePresence>(); | 378 | EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>(); |
379 | |||
380 | foreach (EntityBase user in users) | 379 | foreach (EntityBase user in users) |
381 | { | 380 | { |
382 | SendServerCommand("353 " + m_nick + " = " + IrcRegionName + " :" + user.Name.Replace(" ", "")); | 381 | SendServerCommand("353 " + m_nick + " = " + IrcRegionName + " :" + user.Name.Replace(" ", "")); |
@@ -386,8 +385,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
386 | 385 | ||
387 | private void IRC_SendWhoReply() | 386 | private void IRC_SendWhoReply() |
388 | { | 387 | { |
389 | List<EntityBase> users = m_scene.Entities.GetAllByType<ScenePresence>(); | 388 | EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>(); |
390 | |||
391 | foreach (EntityBase user in users) | 389 | foreach (EntityBase user in users) |
392 | { | 390 | { |
393 | /*SendServerCommand(String.Format("352 {0} {1} {2} {3} {4} {5} :0 {6}", IrcRegionName, | 391 | /*SendServerCommand(String.Format("352 {0} {1} {2} {3} {4} {5} :0 {6}", IrcRegionName, |
@@ -415,11 +413,11 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
415 | 413 | ||
416 | private void IRC_SendReplyUsers() | 414 | private void IRC_SendReplyUsers() |
417 | { | 415 | { |
418 | List<EntityBase> users = m_scene.Entities.GetAllByType<ScenePresence>(); | 416 | EntityBase[] users = m_scene.Entities.GetAllByType<ScenePresence>(); |
419 | 417 | ||
420 | SendServerCommand("392 :UserID Terminal Host"); | 418 | SendServerCommand("392 :UserID Terminal Host"); |
421 | 419 | ||
422 | if (users.Count == 0) | 420 | if (users.Length == 0) |
423 | { | 421 | { |
424 | SendServerCommand("395 :Nobody logged in"); | 422 | SendServerCommand("395 :Nobody logged in"); |
425 | return; | 423 | return; |
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs index 2969503..6f044e0 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs | |||
@@ -962,7 +962,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
962 | if ((groupInfo == null) || (account == null)) | 962 | if ((groupInfo == null) || (account == null)) |
963 | { | 963 | { |
964 | return; | 964 | return; |
965 | } | 965 | } |
966 | 966 | ||
967 | // Send Message to Ejectee | 967 | // Send Message to Ejectee |
968 | GridInstantMessage msg = new GridInstantMessage(); | 968 | GridInstantMessage msg = new GridInstantMessage(); |
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs index 9363205..0d265f2 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs | |||
@@ -91,11 +91,11 @@ using OpenSim.Services.Interfaces; | |||
91 | * + RoleID | 91 | * + RoleID |
92 | * | 92 | * |
93 | * GroupID -> GroupNotice -> NoticeID | 93 | * GroupID -> GroupNotice -> NoticeID |
94 | * + TimeStamp [uint] | 94 | * + TimeStamp [uint] |
95 | * + FromName [string] | 95 | * + FromName [string] |
96 | * + Subject [string] | 96 | * + Subject [string] |
97 | * + Message [string] | 97 | * + Message [string] |
98 | * + BinaryBucket [byte[]] | 98 | * + BinaryBucket [byte[]] |
99 | * | 99 | * |
100 | * */ | 100 | * */ |
101 | 101 | ||
@@ -309,7 +309,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
309 | GroupInfoMap["OwnerRoleID"] = OSD.FromUUID(OwnerRoleID); | 309 | GroupInfoMap["OwnerRoleID"] = OSD.FromUUID(OwnerRoleID); |
310 | GroupInfoMap["OwnersPowers"] = OSD.FromULong((ulong)m_DefaultOwnerPowers); | 310 | GroupInfoMap["OwnersPowers"] = OSD.FromULong((ulong)m_DefaultOwnerPowers); |
311 | 311 | ||
312 | if(SimianAddGeneric(GroupID, "Group", name, GroupInfoMap)) | 312 | if (SimianAddGeneric(GroupID, "Group", name, GroupInfoMap)) |
313 | { | 313 | { |
314 | AddGroupRole(requestingAgentID, GroupID, UUID.Zero, "Everyone", "Members of " + name, "Member of " + name, (ulong)m_DefaultEveryonePowers); | 314 | AddGroupRole(requestingAgentID, GroupID, UUID.Zero, "Everyone", "Members of " + name, "Member of " + name, (ulong)m_DefaultEveryonePowers); |
315 | AddGroupRole(requestingAgentID, GroupID, OwnerRoleID, "Owners", "Owners of " + name, "Owner of " + name, (ulong)m_DefaultOwnerPowers); | 315 | AddGroupRole(requestingAgentID, GroupID, OwnerRoleID, "Owners", "Owners of " + name, "Owner of " + name, (ulong)m_DefaultOwnerPowers); |
@@ -334,7 +334,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
334 | 334 | ||
335 | string GroupName; | 335 | string GroupName; |
336 | OSDMap GroupInfoMap; | 336 | OSDMap GroupInfoMap; |
337 | if( SimianGetFirstGenericEntry(groupID, "GroupInfo", out GroupName, out GroupInfoMap) ) | 337 | if (SimianGetFirstGenericEntry(groupID, "GroupInfo", out GroupName, out GroupInfoMap)) |
338 | { | 338 | { |
339 | GroupInfoMap["Charter"] = OSD.FromString(charter); | 339 | GroupInfoMap["Charter"] = OSD.FromString(charter); |
340 | GroupInfoMap["ShowInList"] = OSD.FromBoolean(showInList); | 340 | GroupInfoMap["ShowInList"] = OSD.FromBoolean(showInList); |
@@ -379,7 +379,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
379 | string GroupRoleMemberType = "GroupRole" + groupID.ToString(); | 379 | string GroupRoleMemberType = "GroupRole" + groupID.ToString(); |
380 | if (SimianGetGenericEntries(GroupRoleMemberType, roleID.ToString(), out GroupRoleMembers)) | 380 | if (SimianGetGenericEntries(GroupRoleMemberType, roleID.ToString(), out GroupRoleMembers)) |
381 | { | 381 | { |
382 | foreach(UUID UserID in GroupRoleMembers.Keys) | 382 | foreach (UUID UserID in GroupRoleMembers.Keys) |
383 | { | 383 | { |
384 | EnsureRoleNotSelectedByMember(groupID, roleID, UserID); | 384 | EnsureRoleNotSelectedByMember(groupID, roleID, UserID); |
385 | 385 | ||
@@ -724,7 +724,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
724 | } | 724 | } |
725 | 725 | ||
726 | OSDMap UserGroupMemberInfo; | 726 | OSDMap UserGroupMemberInfo; |
727 | if( SimianGetGenericEntry(agentID, "GroupMember", groupID.ToString(), out UserGroupMemberInfo) ) | 727 | if (SimianGetGenericEntry(agentID, "GroupMember", groupID.ToString(), out UserGroupMemberInfo)) |
728 | { | 728 | { |
729 | data.AcceptNotices = UserGroupMemberInfo["AcceptNotices"].AsBoolean(); | 729 | data.AcceptNotices = UserGroupMemberInfo["AcceptNotices"].AsBoolean(); |
730 | data.Contribution = UserGroupMemberInfo["Contribution"].AsInteger(); | 730 | data.Contribution = UserGroupMemberInfo["Contribution"].AsInteger(); |
@@ -736,7 +736,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
736 | // | 736 | // |
737 | 737 | ||
738 | OSDMap GroupRoleInfo; | 738 | OSDMap GroupRoleInfo; |
739 | if( SimianGetGenericEntry(groupID, "GroupRole", data.ActiveRole.ToString(), out GroupRoleInfo) ) | 739 | if (SimianGetGenericEntry(groupID, "GroupRole", data.ActiveRole.ToString(), out GroupRoleInfo)) |
740 | { | 740 | { |
741 | data.GroupTitle = GroupRoleInfo["Title"].AsString(); | 741 | data.GroupTitle = GroupRoleInfo["Title"].AsString(); |
742 | data.GroupPowers = GroupRoleInfo["Powers"].AsULong(); | 742 | data.GroupPowers = GroupRoleInfo["Powers"].AsULong(); |
@@ -748,7 +748,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
748 | // | 748 | // |
749 | OSDMap GroupInfo; | 749 | OSDMap GroupInfo; |
750 | string GroupName; | 750 | string GroupName; |
751 | if( SimianGetFirstGenericEntry(groupID, "Group", out GroupName, out GroupInfo) ) | 751 | if (SimianGetFirstGenericEntry(groupID, "Group", out GroupName, out GroupInfo)) |
752 | { | 752 | { |
753 | data.GroupID = groupID; | 753 | data.GroupID = groupID; |
754 | data.AllowPublish = GroupInfo["AllowPublish"].AsBoolean(); | 754 | data.AllowPublish = GroupInfo["AllowPublish"].AsBoolean(); |
@@ -928,12 +928,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
928 | Dictionary<string, OSDMap> GroupRoles; | 928 | Dictionary<string, OSDMap> GroupRoles; |
929 | if (SimianGetGenericEntries(groupID, "GroupRole", out GroupRoles)) | 929 | if (SimianGetGenericEntries(groupID, "GroupRole", out GroupRoles)) |
930 | { | 930 | { |
931 | foreach( KeyValuePair<string, OSDMap> Role in GroupRoles ) | 931 | foreach (KeyValuePair<string, OSDMap> Role in GroupRoles) |
932 | { | 932 | { |
933 | Dictionary<UUID, OSDMap> GroupRoleMembers; | 933 | Dictionary<UUID, OSDMap> GroupRoleMembers; |
934 | if( SimianGetGenericEntries("GroupRole"+groupID.ToString(), Role.Key, out GroupRoleMembers) ) | 934 | if (SimianGetGenericEntries("GroupRole"+groupID.ToString(), Role.Key, out GroupRoleMembers)) |
935 | { | 935 | { |
936 | foreach( KeyValuePair<UUID, OSDMap> GroupRoleMember in GroupRoleMembers ) | 936 | foreach (KeyValuePair<UUID, OSDMap> GroupRoleMember in GroupRoleMembers) |
937 | { | 937 | { |
938 | GroupRoleMembersData data = new GroupRoleMembersData(); | 938 | GroupRoleMembersData data = new GroupRoleMembersData(); |
939 | 939 | ||
@@ -1264,7 +1264,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1264 | if (m_debugEnabled) m_log.InfoFormat("[SIMIAN-GROUPS-CONNECTOR] Generics Result {0}", entryMap["Value"].AsString()); | 1264 | if (m_debugEnabled) m_log.InfoFormat("[SIMIAN-GROUPS-CONNECTOR] Generics Result {0}", entryMap["Value"].AsString()); |
1265 | maps.Add(entryMap["Key"].AsString(), (OSDMap)OSDParser.DeserializeJson(entryMap["Value"].AsString())); | 1265 | maps.Add(entryMap["Key"].AsString(), (OSDMap)OSDParser.DeserializeJson(entryMap["Value"].AsString())); |
1266 | } | 1266 | } |
1267 | if(maps.Count == 0) | 1267 | if (maps.Count == 0) |
1268 | { | 1268 | { |
1269 | if (m_debugEnabled) m_log.InfoFormat("[SIMIAN-GROUPS-CONNECTOR] No Generics Results"); | 1269 | if (m_debugEnabled) m_log.InfoFormat("[SIMIAN-GROUPS-CONNECTOR] No Generics Results"); |
1270 | } | 1270 | } |
@@ -1352,17 +1352,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1352 | } | 1352 | } |
1353 | 1353 | ||
1354 | // Check if this is an update or a request | 1354 | // Check if this is an update or a request |
1355 | if ( requestArgs["RequestMethod"] == "RemoveGeneric" | 1355 | if (requestArgs["RequestMethod"] == "RemoveGeneric" |
1356 | || requestArgs["RequestMethod"] == "AddGeneric" | 1356 | || requestArgs["RequestMethod"] == "AddGeneric") |
1357 | ) | ||
1358 | |||
1359 | { | 1357 | { |
1360 | // Any and all updates cause the cache to clear | 1358 | // Any and all updates cause the cache to clear |
1361 | m_memoryCache.Clear(); | 1359 | m_memoryCache.Clear(); |
1362 | 1360 | ||
1363 | // Send update to server, return the response without caching it | 1361 | // Send update to server, return the response without caching it |
1364 | return WebUtil.PostToService(m_groupsServerURI, requestArgs); | 1362 | return WebUtil.PostToService(m_groupsServerURI, requestArgs); |
1365 | |||
1366 | } | 1363 | } |
1367 | 1364 | ||
1368 | // If we're not doing an update, we must be requesting data | 1365 | // If we're not doing an update, we must be requesting data |
@@ -1372,7 +1369,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1372 | OSDMap response = null; | 1369 | OSDMap response = null; |
1373 | if (!m_memoryCache.TryGetValue(CacheKey, out response)) | 1370 | if (!m_memoryCache.TryGetValue(CacheKey, out response)) |
1374 | { | 1371 | { |
1375 | // if it wasn't in the cache, pass the request to the Simian Grid Services | 1372 | // if it wasn't in the cache, pass the request to the Simian Grid Services |
1376 | response = WebUtil.PostToService(m_groupsServerURI, requestArgs); | 1373 | response = WebUtil.PostToService(m_groupsServerURI, requestArgs); |
1377 | 1374 | ||
1378 | // and cache the response | 1375 | // and cache the response |
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs index 79b9a16..a88c5e2 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs | |||
@@ -960,7 +960,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
960 | 960 | ||
961 | } | 961 | } |
962 | 962 | ||
963 | if( resp == null ) | 963 | if (resp == null) |
964 | { | 964 | { |
965 | string UserService; | 965 | string UserService; |
966 | UUID SessionID; | 966 | UUID SessionID; |
@@ -1065,7 +1065,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1065 | 1065 | ||
1066 | /// <summary> | 1066 | /// <summary> |
1067 | /// Group Request Tokens are an attempt to allow the groups service to authenticate | 1067 | /// Group Request Tokens are an attempt to allow the groups service to authenticate |
1068 | /// requests. | 1068 | /// requests. |
1069 | /// TODO: This broke after the big grid refactor, either find a better way, or discard this | 1069 | /// TODO: This broke after the big grid refactor, either find a better way, or discard this |
1070 | /// </summary> | 1070 | /// </summary> |
1071 | /// <param name="client"></param> | 1071 | /// <param name="client"></param> |
diff --git a/OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs b/OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs index de1e01c..d21b652 100644 --- a/OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs +++ b/OpenSim/Region/OptionalModules/ContentManagementSystem/CMEntityCollection.cs | |||
@@ -111,7 +111,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement | |||
111 | } | 111 | } |
112 | 112 | ||
113 | // Check if there are SceneObjectGroups in the list that do not have corresponding ContentManagementGroups in the CMEntityHash | 113 | // Check if there are SceneObjectGroups in the list that do not have corresponding ContentManagementGroups in the CMEntityHash |
114 | public System.Collections.ArrayList CheckForMissingEntities(System.Collections.Generic.List<EntityBase> currList) | 114 | public System.Collections.ArrayList CheckForMissingEntities(EntityBase[] currList) |
115 | { | 115 | { |
116 | System.Collections.ArrayList missingList = new System.Collections.ArrayList(); | 116 | System.Collections.ArrayList missingList = new System.Collections.ArrayList(); |
117 | SceneObjectGroup temp = null; | 117 | SceneObjectGroup temp = null; |
diff --git a/OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs b/OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs index 2730eee..49d20e1 100644 --- a/OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs +++ b/OpenSim/Region/OptionalModules/ContentManagementSystem/ContentManagementEntity.cs | |||
@@ -127,7 +127,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement | |||
127 | /// </summary> | 127 | /// </summary> |
128 | public void FindDifferences() | 128 | public void FindDifferences() |
129 | { | 129 | { |
130 | System.Collections.Generic.List<EntityBase> sceneEntityList = m_Entity.Scene.GetEntities(); | 130 | List<EntityBase> sceneEntityList = new List<EntityBase>(m_Entity.Scene.GetEntities()); |
131 | DiffersFromSceneGroup = false; | 131 | DiffersFromSceneGroup = false; |
132 | // if group is not contained in scene's list | 132 | // if group is not contained in scene's list |
133 | if (!ContainsKey(sceneEntityList, m_UnchangedEntity.UUID)) | 133 | if (!ContainsKey(sceneEntityList, m_UnchangedEntity.UUID)) |
diff --git a/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs b/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs index 796f437..d7838c5 100644 --- a/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs +++ b/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs | |||
@@ -161,7 +161,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement | |||
161 | 161 | ||
162 | //finalize | 162 | //finalize |
163 | m_Entity.RootPart.PhysActor = null; | 163 | m_Entity.RootPart.PhysActor = null; |
164 | m_Entity.Children = parts; | 164 | m_Entity.Children = parts; |
165 | } | 165 | } |
166 | } | 166 | } |
167 | 167 | ||
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs index 6ba5ccf..140264b 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs | |||
@@ -41,12 +41,14 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
41 | private readonly Scene m_scene; | 41 | private readonly Scene m_scene; |
42 | private readonly IEnumerator<EntityBase> m_sogEnum; | 42 | private readonly IEnumerator<EntityBase> m_sogEnum; |
43 | private readonly ISecurityCredential m_security; | 43 | private readonly ISecurityCredential m_security; |
44 | private readonly List<EntityBase> m_entities; | ||
44 | 45 | ||
45 | public IObjEnum(Scene scene, ISecurityCredential security) | 46 | public IObjEnum(Scene scene, ISecurityCredential security) |
46 | { | 47 | { |
47 | m_scene = scene; | 48 | m_scene = scene; |
48 | m_security = security; | 49 | m_security = security; |
49 | m_sogEnum = m_scene.Entities.GetAllByType<SceneObjectGroup>().GetEnumerator(); | 50 | m_entities = new List<EntityBase>(m_scene.Entities.GetEntities()); |
51 | m_sogEnum = m_entities.GetEnumerator(); | ||
50 | } | 52 | } |
51 | 53 | ||
52 | public void Dispose() | 54 | public void Dispose() |
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs index c439e3e..59ad9d8 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs | |||
@@ -432,7 +432,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
432 | return; | 432 | return; |
433 | } | 433 | } |
434 | 434 | ||
435 | foreach(string button in buttons) | 435 | foreach (string button in buttons) |
436 | { | 436 | { |
437 | if (button == String.Empty) | 437 | if (button == String.Empty) |
438 | { | 438 | { |
@@ -448,7 +448,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
448 | 448 | ||
449 | dm.SendDialogToUser( | 449 | dm.SendDialogToUser( |
450 | avatar, GetSOP().Name, GetSOP().UUID, GetSOP().OwnerID, | 450 | avatar, GetSOP().Name, GetSOP().UUID, GetSOP().OwnerID, |
451 | message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buttons); | 451 | message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buttons); |
452 | 452 | ||
453 | } | 453 | } |
454 | 454 | ||
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs index 45bb005..f2324d2 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs | |||
@@ -205,10 +205,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
205 | { | 205 | { |
206 | get | 206 | get |
207 | { | 207 | { |
208 | List<EntityBase> ents = m_internalScene.Entities.GetAllByType<ScenePresence>(); | 208 | EntityBase[] ents = m_internalScene.Entities.GetAllByType<ScenePresence>(); |
209 | IAvatar[] rets = new IAvatar[ents.Count]; | 209 | IAvatar[] rets = new IAvatar[ents.Length]; |
210 | 210 | ||
211 | for (int i = 0; i < ents.Count; i++) | 211 | for (int i = 0; i < ents.Length; i++) |
212 | { | 212 | { |
213 | EntityBase ent = ents[i]; | 213 | EntityBase ent = ents[i]; |
214 | rets[i] = new SPAvatar(m_internalScene, ent.UUID, m_security); | 214 | rets[i] = new SPAvatar(m_internalScene, ent.UUID, m_security); |
diff --git a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs index 61cbb90..cc51c3b 100644 --- a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs +++ b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs | |||
@@ -824,5 +824,5 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule | |||
824 | RegionMoneyRequest = 1, | 824 | RegionMoneyRequest = 1, |
825 | Gift = 2, | 825 | Gift = 2, |
826 | Purchase = 3 | 826 | Purchase = 3 |
827 | } | 827 | } |
828 | } \ No newline at end of file | 828 | } \ No newline at end of file |
diff --git a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs index 3ed338b..421da36 100644 --- a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs +++ b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs | |||
@@ -568,8 +568,7 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator | |||
568 | { | 568 | { |
569 | m_copse = new List<Copse>(); | 569 | m_copse = new List<Copse>(); |
570 | 570 | ||
571 | List<EntityBase> objs = m_scene.GetEntities(); | 571 | EntityBase[] objs = m_scene.GetEntities(); |
572 | |||
573 | foreach (EntityBase obj in objs) | 572 | foreach (EntityBase obj in objs) |
574 | { | 573 | { |
575 | if (obj is SceneObjectGroup) | 574 | if (obj is SceneObjectGroup) |
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs index a0d6197..f424e7f 100644 --- a/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs +++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs | |||
@@ -49,7 +49,7 @@ namespace OpenSim.Region.RegionCombinerModule | |||
49 | public void ClientConnect(IClientAPI client) | 49 | public void ClientConnect(IClientAPI client) |
50 | { | 50 | { |
51 | m_virtScene.UnSubscribeToClientPrimEvents(client); | 51 | m_virtScene.UnSubscribeToClientPrimEvents(client); |
52 | m_virtScene.UnSubscribeToClientPrimRezEvents(client); | 52 | m_virtScene.UnSubscribeToClientPrimRezEvents(client); |
53 | m_virtScene.UnSubscribeToClientInventoryEvents(client); | 53 | m_virtScene.UnSubscribeToClientInventoryEvents(client); |
54 | ((AttachmentsModule)m_virtScene.AttachmentsModule).UnsubscribeFromClientEvents(client); | 54 | ((AttachmentsModule)m_virtScene.AttachmentsModule).UnsubscribeFromClientEvents(client); |
55 | //m_virtScene.UnSubscribeToClientTeleportEvents(client); | 55 | //m_virtScene.UnSubscribeToClientTeleportEvents(client); |
@@ -66,7 +66,7 @@ namespace OpenSim.Region.RegionCombinerModule | |||
66 | client.OnRezObject += LocalRezObject; | 66 | client.OnRezObject += LocalRezObject; |
67 | 67 | ||
68 | m_rootScene.SubscribeToClientInventoryEvents(client); | 68 | m_rootScene.SubscribeToClientInventoryEvents(client); |
69 | ((AttachmentsModule)m_rootScene.AttachmentsModule).SubscribeToClientEvents(client); | 69 | ((AttachmentsModule)m_rootScene.AttachmentsModule).SubscribeToClientEvents(client); |
70 | //m_rootScene.SubscribeToClientTeleportEvents(client); | 70 | //m_rootScene.SubscribeToClientTeleportEvents(client); |
71 | m_rootScene.SubscribeToClientScriptEvents(client); | 71 | m_rootScene.SubscribeToClientScriptEvents(client); |
72 | 72 | ||
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs index 33ff707..be5411a 100644 --- a/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs +++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs | |||
@@ -118,7 +118,7 @@ public class RegionCombinerLargeLandChannel : ILandChannel | |||
118 | return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY); | 118 | return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY); |
119 | } | 119 | } |
120 | } | 120 | } |
121 | 121 | ||
122 | ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); | 122 | ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); |
123 | obj.LandData.Name = "NO LAND"; | 123 | obj.LandData.Name = "NO LAND"; |
124 | return obj; | 124 | return obj; |
@@ -142,14 +142,14 @@ public class RegionCombinerLargeLandChannel : ILandChannel | |||
142 | 142 | ||
143 | public void Join(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) | 143 | public void Join(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) |
144 | { | 144 | { |
145 | RootRegionLandChannel.Join(start_x, start_y, end_x, end_y, attempting_user_id); | 145 | RootRegionLandChannel.Join(start_x, start_y, end_x, end_y, attempting_user_id); |
146 | } | 146 | } |
147 | 147 | ||
148 | public void Subdivide(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) | 148 | public void Subdivide(int start_x, int start_y, int end_x, int end_y, UUID attempting_user_id) |
149 | { | 149 | { |
150 | RootRegionLandChannel.Subdivide(start_x, start_y, end_x, end_y, attempting_user_id); | 150 | RootRegionLandChannel.Subdivide(start_x, start_y, end_x, end_y, attempting_user_id); |
151 | } | 151 | } |
152 | 152 | ||
153 | public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient) | 153 | public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient) |
154 | { | 154 | { |
155 | RootRegionLandChannel.ReturnObjectsInParcel(localID, returnType, agentIDs, taskIDs, remoteClient); | 155 | RootRegionLandChannel.ReturnObjectsInParcel(localID, returnType, agentIDs, taskIDs, remoteClient); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 512957d..a5b3cd0 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -4298,9 +4298,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4298 | } | 4298 | } |
4299 | 4299 | ||
4300 | 4300 | ||
4301 | PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); | 4301 | pinfo = World.PresenceService.GetAgent(uuid); |
4302 | if (pinfos != null && pinfos.Length > 0) | ||
4303 | pinfo = pinfos[0]; | ||
4304 | 4302 | ||
4305 | ce = new UserInfoCacheEntry(); | 4303 | ce = new UserInfoCacheEntry(); |
4306 | ce.time = Util.EnvironmentTickCount(); | 4304 | ce.time = Util.EnvironmentTickCount(); |
@@ -4319,11 +4317,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4319 | 4317 | ||
4320 | if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000) | 4318 | if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000) |
4321 | { | 4319 | { |
4322 | PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); | 4320 | pinfo = World.PresenceService.GetAgent(uuid); |
4323 | if (pinfos != null && pinfos.Length > 0) | ||
4324 | pinfo = pinfos[0]; | ||
4325 | else | ||
4326 | pinfo = null; | ||
4327 | 4321 | ||
4328 | ce.time = Util.EnvironmentTickCount(); | 4322 | ce.time = Util.EnvironmentTickCount(); |
4329 | ce.pinfo = pinfo; | 4323 | ce.pinfo = pinfo; |
@@ -8482,7 +8476,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8482 | res.Add(new LSL_Integer((int)me.ControlPermissions)); | 8476 | res.Add(new LSL_Integer((int)me.ControlPermissions)); |
8483 | break; | 8477 | break; |
8484 | } | 8478 | } |
8485 | } | 8479 | } |
8486 | 8480 | ||
8487 | return res; | 8481 | return res; |
8488 | } | 8482 | } |
@@ -8498,7 +8492,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8498 | if (face < 0 || face > m_host.GetNumberOfSides() - 1) | 8492 | if (face < 0 || face > m_host.GetNumberOfSides() - 1) |
8499 | return ScriptBaseClass.LSL_STATUS_OK; | 8493 | return ScriptBaseClass.LSL_STATUS_OK; |
8500 | 8494 | ||
8501 | return SetPrimMediaParams(face, rules); | 8495 | return SetPrimMediaParams(face, rules); |
8502 | } | 8496 | } |
8503 | 8497 | ||
8504 | private LSL_Integer SetPrimMediaParams(int face, LSL_List rules) | 8498 | private LSL_Integer SetPrimMediaParams(int face, LSL_List rules) |
@@ -8587,7 +8581,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8587 | me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); | 8581 | me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); |
8588 | break; | 8582 | break; |
8589 | } | 8583 | } |
8590 | } | 8584 | } |
8591 | 8585 | ||
8592 | module.SetMediaEntry(m_host, face, me); | 8586 | module.SetMediaEntry(m_host, face, me); |
8593 | 8587 | ||
@@ -8607,7 +8601,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8607 | 8601 | ||
8608 | IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); | 8602 | IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); |
8609 | if (null == module) | 8603 | if (null == module) |
8610 | throw new Exception("Media on a prim functions not available"); | 8604 | throw new Exception("Media on a prim functions not available"); |
8611 | 8605 | ||
8612 | module.ClearMediaEntry(m_host, face); | 8606 | module.ClearMediaEntry(m_host, face); |
8613 | 8607 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index a08b135..6827ede 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1197,7 +1197,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1197 | 1197 | ||
1198 | World.LandChannel.Join(startx,starty,endx,endy,m_host.OwnerID); | 1198 | World.LandChannel.Join(startx,starty,endx,endy,m_host.OwnerID); |
1199 | } | 1199 | } |
1200 | 1200 | ||
1201 | public void osParcelSubdivide(LSL_Vector pos1, LSL_Vector pos2) | 1201 | public void osParcelSubdivide(LSL_Vector pos1, LSL_Vector pos2) |
1202 | { | 1202 | { |
1203 | CheckThreatLevel(ThreatLevel.High, "osParcelSubdivide"); | 1203 | CheckThreatLevel(ThreatLevel.High, "osParcelSubdivide"); |
@@ -1220,7 +1220,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1220 | // can modify it | 1220 | // can modify it |
1221 | 1221 | ||
1222 | ILandObject startLandObject = World.LandChannel.GetLandObject((int)pos.x, (int)pos.y); | 1222 | ILandObject startLandObject = World.LandChannel.GetLandObject((int)pos.x, (int)pos.y); |
1223 | if (startLandObject == null) | 1223 | if (startLandObject == null) |
1224 | { | 1224 | { |
1225 | OSSLShoutError("There is no land at that location"); | 1225 | OSSLShoutError("There is no land at that location"); |
1226 | return; | 1226 | return; |
@@ -1237,7 +1237,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1237 | UUID uuid; | 1237 | UUID uuid; |
1238 | 1238 | ||
1239 | // Process the rules, not sure what the impact would be of changing owner or group | 1239 | // Process the rules, not sure what the impact would be of changing owner or group |
1240 | for (int idx = 0; idx < rules.Length; ) | 1240 | for (int idx = 0; idx < rules.Length;) |
1241 | { | 1241 | { |
1242 | int code = rules.GetLSLIntegerItem(idx++); | 1242 | int code = rules.GetLSLIntegerItem(idx++); |
1243 | string arg = rules.GetLSLStringItem(idx++); | 1243 | string arg = rules.GetLSLStringItem(idx++); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index a5b1124..3b7de53 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs | |||
@@ -286,7 +286,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
286 | } | 286 | } |
287 | else | 287 | else |
288 | { | 288 | { |
289 | Entities = m_CmdManager.m_ScriptEngine.World.GetEntities(); | 289 | Entities = new List<EntityBase>(m_CmdManager.m_ScriptEngine.World.GetEntities()); |
290 | } | 290 | } |
291 | SceneObjectPart SensePoint = ts.host; | 291 | SceneObjectPart SensePoint = ts.host; |
292 | 292 | ||
@@ -417,7 +417,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
417 | List<SensedEntity> sensedEntities = new List<SensedEntity>(); | 417 | List<SensedEntity> sensedEntities = new List<SensedEntity>(); |
418 | 418 | ||
419 | // If nobody about quit fast | 419 | // If nobody about quit fast |
420 | if(m_CmdManager.m_ScriptEngine.World.GetRootAgentCount() == 0) | 420 | if (m_CmdManager.m_ScriptEngine.World.GetRootAgentCount() == 0) |
421 | return sensedEntities; | 421 | return sensedEntities; |
422 | 422 | ||
423 | SceneObjectPart SensePoint = ts.host; | 423 | SceneObjectPart SensePoint = ts.host; |
@@ -496,7 +496,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
496 | { | 496 | { |
497 | ScenePresence sp; | 497 | ScenePresence sp; |
498 | // Try direct lookup by UUID | 498 | // Try direct lookup by UUID |
499 | if(!m_CmdManager.m_ScriptEngine.World.TryGetScenePresence(ts.keyID, out sp)) | 499 | if (!m_CmdManager.m_ScriptEngine.World.TryGetScenePresence(ts.keyID, out sp)) |
500 | return sensedEntities; | 500 | return sensedEntities; |
501 | senseEntity(sp); | 501 | senseEntity(sp); |
502 | } | 502 | } |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index e5e8a56..e82d297 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -632,7 +632,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
632 | bool postOnRez = (bool)p[4]; | 632 | bool postOnRez = (bool)p[4]; |
633 | StateSource stateSource = (StateSource)p[5]; | 633 | StateSource stateSource = (StateSource)p[5]; |
634 | 634 | ||
635 | lock(m_CompileDict) | 635 | lock (m_CompileDict) |
636 | { | 636 | { |
637 | if (!m_CompileDict.ContainsKey(itemID)) | 637 | if (!m_CompileDict.ContainsKey(itemID)) |
638 | return false; | 638 | return false; |