diff options
author | Melanie | 2013-06-30 18:27:30 +0100 |
---|---|---|
committer | Melanie | 2013-06-30 18:27:30 +0100 |
commit | ffcee82b1d62150b772464841023a29acc334c84 (patch) | |
tree | 957d562be1f9e567daabb9bfdd25e779ec2c11a4 /OpenSim/Region | |
parent | Merge branch 'master' into careminster (diff) | |
parent | Groups V2: charge for group creation only after the group has been successful... (diff) | |
download | opensim-SC-ffcee82b1d62150b772464841023a29acc334c84.zip opensim-SC-ffcee82b1d62150b772464841023a29acc334c84.tar.gz opensim-SC-ffcee82b1d62150b772464841023a29acc334c84.tar.bz2 opensim-SC-ffcee82b1d62150b772464841023a29acc334c84.tar.xz |
Merge branch 'master' into careminster
Conflicts:
OpenSim/Data/MySQL/MySQLSimulationData.cs
OpenSim/Region/Framework/Scenes/EventManager.cs
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
Diffstat (limited to 'OpenSim/Region')
12 files changed, 273 insertions, 110 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs index b3e3aa2..ae45b99 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs | |||
@@ -183,6 +183,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
183 | if (Util.ParseUniversalUserIdentifier(finfo.Friend, out id, out url, out first, out last, out tmp)) | 183 | if (Util.ParseUniversalUserIdentifier(finfo.Friend, out id, out url, out first, out last, out tmp)) |
184 | { | 184 | { |
185 | IUserManagement uMan = m_Scenes[0].RequestModuleInterface<IUserManagement>(); | 185 | IUserManagement uMan = m_Scenes[0].RequestModuleInterface<IUserManagement>(); |
186 | m_log.DebugFormat("[HGFRIENDS MODULE]: caching {0}", finfo.Friend); | ||
186 | uMan.AddUser(id, url + ";" + first + " " + last); | 187 | uMan.AddUser(id, url + ";" + first + " " + last); |
187 | } | 188 | } |
188 | } | 189 | } |
@@ -347,31 +348,31 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
347 | return null; | 348 | return null; |
348 | } | 349 | } |
349 | 350 | ||
350 | public override FriendInfo[] GetFriendsFromService(IClientAPI client) | 351 | // public override FriendInfo[] GetFriendsFromService(IClientAPI client) |
351 | { | 352 | // { |
352 | // m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name); | 353 | //// m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name); |
353 | Boolean agentIsLocal = true; | 354 | // Boolean agentIsLocal = true; |
354 | if (UserManagementModule != null) | 355 | // if (UserManagementModule != null) |
355 | agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId); | 356 | // agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId); |
356 | 357 | ||
357 | if (agentIsLocal) | 358 | // if (agentIsLocal) |
358 | return base.GetFriendsFromService(client); | 359 | // return base.GetFriendsFromService(client); |
359 | 360 | ||
360 | FriendInfo[] finfos = new FriendInfo[0]; | 361 | // FriendInfo[] finfos = new FriendInfo[0]; |
361 | // Foreigner | 362 | // // Foreigner |
362 | AgentCircuitData agentClientCircuit = ((Scene)(client.Scene)).AuthenticateHandler.GetAgentCircuitData(client.CircuitCode); | 363 | // AgentCircuitData agentClientCircuit = ((Scene)(client.Scene)).AuthenticateHandler.GetAgentCircuitData(client.CircuitCode); |
363 | if (agentClientCircuit != null) | 364 | // if (agentClientCircuit != null) |
364 | { | 365 | // { |
365 | //[XXX] string agentUUI = Util.ProduceUserUniversalIdentifier(agentClientCircuit); | 366 | // //[XXX] string agentUUI = Util.ProduceUserUniversalIdentifier(agentClientCircuit); |
366 | 367 | ||
367 | finfos = FriendsService.GetFriends(client.AgentId.ToString()); | 368 | // finfos = FriendsService.GetFriends(client.AgentId.ToString()); |
368 | m_log.DebugFormat("[HGFRIENDS MODULE]: Fetched {0} local friends for visitor {1}", finfos.Length, client.AgentId.ToString()); | 369 | // m_log.DebugFormat("[HGFRIENDS MODULE]: Fetched {0} local friends for visitor {1}", finfos.Length, client.AgentId.ToString()); |
369 | } | 370 | // } |
370 | 371 | ||
371 | // m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting GetFriendsFromService for {0}", client.Name); | 372 | //// m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting GetFriendsFromService for {0}", client.Name); |
372 | 373 | ||
373 | return finfos; | 374 | // return finfos; |
374 | } | 375 | // } |
375 | 376 | ||
376 | protected override bool StoreRights(UUID agentID, UUID friendID, int rights) | 377 | protected override bool StoreRights(UUID agentID, UUID friendID, int rights) |
377 | { | 378 | { |
diff --git a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs index 1f1568f..0c632b1 100644 --- a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs +++ b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs | |||
@@ -44,11 +44,12 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule | |||
44 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DAExampleModule")] | 44 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DAExampleModule")] |
45 | public class DAExampleModule : INonSharedRegionModule | 45 | public class DAExampleModule : INonSharedRegionModule |
46 | { | 46 | { |
47 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
48 | 48 | ||
49 | private static readonly bool ENABLED = false; // enable for testing | 49 | private readonly bool ENABLED = false; // enable for testing |
50 | 50 | ||
51 | public const string DANamespace = "DAExample Module"; | 51 | public const string Namespace = "Example"; |
52 | public const string StoreName = "DA"; | ||
52 | 53 | ||
53 | protected Scene m_scene; | 54 | protected Scene m_scene; |
54 | protected IDialogModule m_dialogMod; | 55 | protected IDialogModule m_dialogMod; |
@@ -65,6 +66,8 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule | |||
65 | m_scene = scene; | 66 | m_scene = scene; |
66 | m_scene.EventManager.OnSceneGroupMove += OnSceneGroupMove; | 67 | m_scene.EventManager.OnSceneGroupMove += OnSceneGroupMove; |
67 | m_dialogMod = m_scene.RequestModuleInterface<IDialogModule>(); | 68 | m_dialogMod = m_scene.RequestModuleInterface<IDialogModule>(); |
69 | |||
70 | m_log.DebugFormat("[DA EXAMPLE MODULE]: Added region {0}", m_scene.Name); | ||
68 | } | 71 | } |
69 | } | 72 | } |
70 | 73 | ||
@@ -91,7 +94,7 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule | |||
91 | if (sop == null) | 94 | if (sop == null) |
92 | return true; | 95 | return true; |
93 | 96 | ||
94 | if (!sop.DynAttrs.TryGetValue(DANamespace, out attrs)) | 97 | if (!sop.DynAttrs.TryGetStore(Namespace, StoreName, out attrs)) |
95 | attrs = new OSDMap(); | 98 | attrs = new OSDMap(); |
96 | 99 | ||
97 | OSDInteger newValue; | 100 | OSDInteger newValue; |
@@ -106,12 +109,14 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule | |||
106 | 109 | ||
107 | attrs["moves"] = newValue; | 110 | attrs["moves"] = newValue; |
108 | 111 | ||
109 | sop.DynAttrs[DANamespace] = attrs; | 112 | sop.DynAttrs.SetStore(Namespace, StoreName, attrs); |
110 | } | 113 | } |
111 | 114 | ||
112 | sop.ParentGroup.HasGroupChanged = true; | 115 | sop.ParentGroup.HasGroupChanged = true; |
113 | 116 | ||
114 | m_dialogMod.SendGeneralAlert(string.Format("{0} {1} moved {2} times", sop.Name, sop.UUID, newValue)); | 117 | string msg = string.Format("{0} {1} moved {2} times", sop.Name, sop.UUID, newValue); |
118 | m_log.DebugFormat("[DA EXAMPLE MODULE]: {0}", msg); | ||
119 | m_dialogMod.SendGeneralAlert(msg); | ||
115 | 120 | ||
116 | return true; | 121 | return true; |
117 | } | 122 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs index 650aa35..166a994 100644 --- a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs +++ b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs | |||
@@ -64,8 +64,8 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule | |||
64 | 64 | ||
65 | private Scene m_scene; | 65 | private Scene m_scene; |
66 | private IDialogModule m_dialogMod; | 66 | private IDialogModule m_dialogMod; |
67 | 67 | ||
68 | public string Name { get { return "DOExample Module"; } } | 68 | public string Name { get { return "DO"; } } |
69 | public Type ReplaceableInterface { get { return null; } } | 69 | public Type ReplaceableInterface { get { return null; } } |
70 | 70 | ||
71 | public void Initialise(IConfigSource source) {} | 71 | public void Initialise(IConfigSource source) {} |
@@ -106,7 +106,7 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule | |||
106 | 106 | ||
107 | // Console.WriteLine("Here for {0}", so.Name); | 107 | // Console.WriteLine("Here for {0}", so.Name); |
108 | 108 | ||
109 | if (rootPart.DynAttrs.TryGetValue(DAExampleModule.DANamespace, out attrs)) | 109 | if (rootPart.DynAttrs.TryGetStore(DAExampleModule.Namespace, DAExampleModule.StoreName, out attrs)) |
110 | { | 110 | { |
111 | movesSoFar = attrs["moves"].AsInteger(); | 111 | movesSoFar = attrs["moves"].AsInteger(); |
112 | 112 | ||
@@ -114,7 +114,7 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule | |||
114 | "[DO EXAMPLE MODULE]: Found saved moves {0} for {1} in {2}", movesSoFar, so.Name, m_scene.Name); | 114 | "[DO EXAMPLE MODULE]: Found saved moves {0} for {1} in {2}", movesSoFar, so.Name, m_scene.Name); |
115 | } | 115 | } |
116 | 116 | ||
117 | rootPart.DynObjs.Add(Name, new MyObject(movesSoFar)); | 117 | rootPart.DynObjs.Add(DAExampleModule.Namespace, Name, new MyObject(movesSoFar)); |
118 | } | 118 | } |
119 | 119 | ||
120 | private bool OnSceneGroupMove(UUID groupId, Vector3 delta) | 120 | private bool OnSceneGroupMove(UUID groupId, Vector3 delta) |
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 864e181..194b591 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -320,7 +320,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
320 | else | 320 | else |
321 | { | 321 | { |
322 | names[0] = "Unknown"; | 322 | names[0] = "Unknown"; |
323 | names[1] = "UserUMMTGUN2"; | 323 | names[1] = "UserUMMTGUN3"; |
324 | 324 | ||
325 | return false; | 325 | return false; |
326 | } | 326 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index ec5751d..99913a9 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs | |||
@@ -196,7 +196,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
196 | Util.FireAndForget(delegate | 196 | Util.FireAndForget(delegate |
197 | { | 197 | { |
198 | foreach (InventoryItemBase item in items) | 198 | foreach (InventoryItemBase item in items) |
199 | UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData); | 199 | if (!string.IsNullOrEmpty(item.CreatorData)) |
200 | UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData); | ||
200 | }); | 201 | }); |
201 | } | 202 | } |
202 | 203 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs index 2d3ba82..70ba944 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs | |||
@@ -204,7 +204,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
204 | Util.FireAndForget(delegate | 204 | Util.FireAndForget(delegate |
205 | { | 205 | { |
206 | foreach (InventoryItemBase item in items) | 206 | foreach (InventoryItemBase item in items) |
207 | UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData); | 207 | if (!string.IsNullOrEmpty(item.CreatorData)) |
208 | UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData); | ||
208 | }); | 209 | }); |
209 | } | 210 | } |
210 | 211 | ||
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs index b4348c9..66059fb 100644 --- a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs +++ b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs | |||
@@ -144,7 +144,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
144 | <Flags>None</Flags> | 144 | <Flags>None</Flags> |
145 | <CollisionSound><Guid>00000000-0000-0000-0000-000000000000</Guid></CollisionSound> | 145 | <CollisionSound><Guid>00000000-0000-0000-0000-000000000000</Guid></CollisionSound> |
146 | <CollisionSoundVolume>0</CollisionSoundVolume> | 146 | <CollisionSoundVolume>0</CollisionSoundVolume> |
147 | <DynAttrs><llsd><map><key>MyStore</key><map><key>the answer</key><integer>42</integer></map></map></llsd></DynAttrs> | 147 | <DynAttrs> |
148 | <llsd> | ||
149 | <map> | ||
150 | <key>MyNamespace</key> | ||
151 | <map> | ||
152 | <key>MyStore</key> | ||
153 | <map> | ||
154 | <key>the answer</key> | ||
155 | <integer>42</integer> | ||
156 | </map> | ||
157 | </map> | ||
158 | </map> | ||
159 | </llsd> | ||
160 | </DynAttrs> | ||
148 | </SceneObjectPart> | 161 | </SceneObjectPart> |
149 | </RootPart> | 162 | </RootPart> |
150 | <OtherParts /> | 163 | <OtherParts /> |
@@ -333,7 +346,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
333 | <EveryoneMask>0</EveryoneMask> | 346 | <EveryoneMask>0</EveryoneMask> |
334 | <NextOwnerMask>2147483647</NextOwnerMask> | 347 | <NextOwnerMask>2147483647</NextOwnerMask> |
335 | <Flags>None</Flags> | 348 | <Flags>None</Flags> |
336 | <DynAttrs><llsd><map><key>MyStore</key><map><key>last words</key><string>Rosebud</string></map></map></llsd></DynAttrs> | 349 | <DynAttrs> |
350 | <llsd> | ||
351 | <map> | ||
352 | <key>MyNamespace</key> | ||
353 | <map> | ||
354 | <key>MyStore</key> | ||
355 | <map> | ||
356 | <key>last words</key> | ||
357 | <string>Rosebud</string> | ||
358 | </map> | ||
359 | </map> | ||
360 | </map> | ||
361 | </llsd> | ||
362 | </DynAttrs> | ||
337 | <SitTargetAvatar><UUID>00000000-0000-0000-0000-000000000000</UUID></SitTargetAvatar> | 363 | <SitTargetAvatar><UUID>00000000-0000-0000-0000-000000000000</UUID></SitTargetAvatar> |
338 | </SceneObjectPart> | 364 | </SceneObjectPart> |
339 | <OtherParts /> | 365 | <OtherParts /> |
@@ -362,7 +388,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
362 | Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790"))); | 388 | Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790"))); |
363 | Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d"))); | 389 | Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d"))); |
364 | Assert.That(rootPart.Name, Is.EqualTo("PrimMyRide")); | 390 | Assert.That(rootPart.Name, Is.EqualTo("PrimMyRide")); |
365 | OSDMap store = rootPart.DynAttrs["MyStore"]; | 391 | OSDMap store = rootPart.DynAttrs.GetStore("MyNamespace", "MyStore"); |
366 | Assert.AreEqual(42, store["the answer"].AsInteger()); | 392 | Assert.AreEqual(42, store["the answer"].AsInteger()); |
367 | 393 | ||
368 | // TODO: Check other properties | 394 | // TODO: Check other properties |
@@ -414,13 +440,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
414 | rp.CreatorID = rpCreatorId; | 440 | rp.CreatorID = rpCreatorId; |
415 | rp.Shape = shape; | 441 | rp.Shape = shape; |
416 | 442 | ||
443 | string daNamespace = "MyNamespace"; | ||
417 | string daStoreName = "MyStore"; | 444 | string daStoreName = "MyStore"; |
418 | string daKey = "foo"; | 445 | string daKey = "foo"; |
419 | string daValue = "bar"; | 446 | string daValue = "bar"; |
420 | OSDMap myStore = new OSDMap(); | 447 | OSDMap myStore = new OSDMap(); |
421 | myStore.Add(daKey, daValue); | 448 | myStore.Add(daKey, daValue); |
422 | rp.DynAttrs = new DAMap(); | 449 | rp.DynAttrs = new DAMap(); |
423 | rp.DynAttrs[daStoreName] = myStore; | 450 | rp.DynAttrs.SetStore(daNamespace, daStoreName, myStore); |
424 | 451 | ||
425 | SceneObjectGroup so = new SceneObjectGroup(rp); | 452 | SceneObjectGroup so = new SceneObjectGroup(rp); |
426 | 453 | ||
@@ -481,7 +508,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
481 | Assert.That(name, Is.EqualTo(rpName)); | 508 | Assert.That(name, Is.EqualTo(rpName)); |
482 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); | 509 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); |
483 | Assert.NotNull(daMap); | 510 | Assert.NotNull(daMap); |
484 | Assert.AreEqual(daValue, daMap[daStoreName][daKey].AsString()); | 511 | Assert.AreEqual(daValue, daMap.GetStore(daNamespace, daStoreName)[daKey].AsString()); |
485 | } | 512 | } |
486 | 513 | ||
487 | [Test] | 514 | [Test] |
@@ -496,7 +523,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
496 | Assert.That(rootPart.UUID, Is.EqualTo(new UUID("9be68fdd-f740-4a0f-9675-dfbbb536b946"))); | 523 | Assert.That(rootPart.UUID, Is.EqualTo(new UUID("9be68fdd-f740-4a0f-9675-dfbbb536b946"))); |
497 | Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("b46ef588-411e-4a8b-a284-d7dcfe8e74ef"))); | 524 | Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("b46ef588-411e-4a8b-a284-d7dcfe8e74ef"))); |
498 | Assert.That(rootPart.Name, Is.EqualTo("PrimFun")); | 525 | Assert.That(rootPart.Name, Is.EqualTo("PrimFun")); |
499 | OSDMap store = rootPart.DynAttrs["MyStore"]; | 526 | OSDMap store = rootPart.DynAttrs.GetStore("MyNamespace", "MyStore"); |
500 | Assert.AreEqual("Rosebud", store["last words"].AsString()); | 527 | Assert.AreEqual("Rosebud", store["last words"].AsString()); |
501 | 528 | ||
502 | // TODO: Check other properties | 529 | // TODO: Check other properties |
@@ -522,13 +549,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
522 | rp.CreatorID = rpCreatorId; | 549 | rp.CreatorID = rpCreatorId; |
523 | rp.Shape = shape; | 550 | rp.Shape = shape; |
524 | 551 | ||
552 | string daNamespace = "MyNamespace"; | ||
525 | string daStoreName = "MyStore"; | 553 | string daStoreName = "MyStore"; |
526 | string daKey = "foo"; | 554 | string daKey = "foo"; |
527 | string daValue = "bar"; | 555 | string daValue = "bar"; |
528 | OSDMap myStore = new OSDMap(); | 556 | OSDMap myStore = new OSDMap(); |
529 | myStore.Add(daKey, daValue); | 557 | myStore.Add(daKey, daValue); |
530 | rp.DynAttrs = new DAMap(); | 558 | rp.DynAttrs = new DAMap(); |
531 | rp.DynAttrs[daStoreName] = myStore; | 559 | rp.DynAttrs.SetStore(daNamespace, daStoreName, myStore); |
532 | 560 | ||
533 | SceneObjectGroup so = new SceneObjectGroup(rp); | 561 | SceneObjectGroup so = new SceneObjectGroup(rp); |
534 | 562 | ||
@@ -585,7 +613,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
585 | Assert.That(name, Is.EqualTo(rpName)); | 613 | Assert.That(name, Is.EqualTo(rpName)); |
586 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); | 614 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); |
587 | Assert.NotNull(daMap); | 615 | Assert.NotNull(daMap); |
588 | Assert.AreEqual(daValue, daMap[daStoreName][daKey].AsString()); | 616 | Assert.AreEqual(daValue, daMap.GetStore(daNamespace, daStoreName)[daKey].AsString()); |
589 | } | 617 | } |
590 | } | 618 | } |
591 | } \ No newline at end of file | 619 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 4fec44f..1018b54 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -1026,6 +1026,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
1026 | /// </remarks> | 1026 | /// </remarks> |
1027 | public event TeleportFail OnTeleportFail; | 1027 | public event TeleportFail OnTeleportFail; |
1028 | 1028 | ||
1029 | // public delegate void GatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids); | ||
1030 | // | ||
1031 | // /// <summary> | ||
1032 | // /// Triggered when UUIDs referenced by a scene object are being gathered for archiving, hg transfer, etc. | ||
1033 | // /// </summary> | ||
1034 | // /// <remarks> | ||
1035 | // /// The listener should add references to the IDictionary<UUID, AssetType> as appropriate. | ||
1036 | // /// </remarks> | ||
1037 | // public event GatherUuids OnGatherUuids; | ||
1038 | |||
1029 | public class MoneyTransferArgs : EventArgs | 1039 | public class MoneyTransferArgs : EventArgs |
1030 | { | 1040 | { |
1031 | public UUID sender; | 1041 | public UUID sender; |
@@ -3274,5 +3284,26 @@ namespace OpenSim.Region.Framework.Scenes | |||
3274 | handler(scenePresence); | 3284 | handler(scenePresence); |
3275 | } | 3285 | } |
3276 | } | 3286 | } |
3287 | |||
3288 | // public void TriggerGatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids) | ||
3289 | // { | ||
3290 | // GatherUuids handler = OnGatherUuids; | ||
3291 | // | ||
3292 | // if (handler != null) | ||
3293 | // { | ||
3294 | // foreach (GatherUuids d in handler.GetInvocationList()) | ||
3295 | // { | ||
3296 | // try | ||
3297 | // { | ||
3298 | // d(sop, assetUuids); | ||
3299 | // } | ||
3300 | // catch (Exception e) | ||
3301 | // { | ||
3302 | // m_log.ErrorFormat("[EVENT MANAGER]: Delegate for TriggerUuidGather failed - continuing {0} - {1}", | ||
3303 | // e.Message, e.StackTrace); | ||
3304 | // } | ||
3305 | // } | ||
3306 | // } | ||
3307 | // } | ||
3277 | } | 3308 | } |
3278 | } | 3309 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 0a18d8a..9e3d875 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -3810,20 +3810,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
3810 | /// <summary> | 3810 | /// <summary> |
3811 | /// Update just the root prim position in a linkset | 3811 | /// Update just the root prim position in a linkset |
3812 | /// </summary> | 3812 | /// </summary> |
3813 | /// <param name="pos"></param> | 3813 | /// <param name="newPos"></param> |
3814 | public void UpdateRootPosition(Vector3 pos) | 3814 | public void UpdateRootPosition(Vector3 newPos) |
3815 | { | 3815 | { |
3816 | // needs to be called with phys building true | 3816 | // needs to be called with phys building true |
3817 | Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); | 3817 | Vector3 oldPos; |
3818 | Vector3 oldPos = | 3818 | |
3819 | new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, | 3819 | // FIXME: This improves the situation where editing just the root prim of an attached object would send |
3820 | AbsolutePosition.Y + m_rootPart.OffsetPosition.Y, | 3820 | // all the other parts to oblivion after detach/reattach. However, a problem remains since the root prim |
3821 | AbsolutePosition.Z + m_rootPart.OffsetPosition.Z); | 3821 | // still ends up in the wrong position on reattach. |
3822 | if (IsAttachment) | ||
3823 | oldPos = RootPart.OffsetPosition; | ||
3824 | else | ||
3825 | oldPos = AbsolutePosition + RootPart.OffsetPosition; | ||
3826 | |||
3822 | Vector3 diff = oldPos - newPos; | 3827 | Vector3 diff = oldPos - newPos; |
3823 | Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z); | ||
3824 | Quaternion partRotation = m_rootPart.RotationOffset; | 3828 | Quaternion partRotation = m_rootPart.RotationOffset; |
3825 | axDiff *= Quaternion.Inverse(partRotation); | 3829 | diff *= Quaternion.Inverse(partRotation); |
3826 | diff = axDiff; | ||
3827 | 3830 | ||
3828 | SceneObjectPart[] parts = m_parts.GetArray(); | 3831 | SceneObjectPart[] parts = m_parts.GetArray(); |
3829 | for (int i = 0; i < parts.Length; i++) | 3832 | for (int i = 0; i < parts.Length; i++) |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index ce4fb40..68918d3 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | |||
@@ -1346,7 +1346,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1346 | if (sop.MediaUrl != null) | 1346 | if (sop.MediaUrl != null) |
1347 | writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString()); | 1347 | writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString()); |
1348 | 1348 | ||
1349 | if (sop.DynAttrs.Count > 0) | 1349 | if (sop.DynAttrs.CountNamespaces > 0) |
1350 | { | 1350 | { |
1351 | writer.WriteStartElement("DynAttrs"); | 1351 | writer.WriteStartElement("DynAttrs"); |
1352 | sop.DynAttrs.WriteXml(writer); | 1352 | sop.DynAttrs.WriteXml(writer); |
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs index 7b47275..e60a025 100644 --- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs +++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs | |||
@@ -182,7 +182,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
182 | GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids); | 182 | GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids); |
183 | } | 183 | } |
184 | 184 | ||
185 | // get any texture UUIDs used for materials such as normal and specular maps | 185 | // FIXME: We need to make gathering modular but we cannot yet, since gatherers are not guaranteed |
186 | // to be called with scene objects that are in a scene (e.g. in the case of hg asset mapping and | ||
187 | // inventory transfer. There needs to be a way for a module to register a method without assuming a | ||
188 | // Scene.EventManager is present. | ||
189 | // part.ParentGroup.Scene.EventManager.TriggerGatherUuids(part, assetUuids); | ||
190 | |||
186 | GatherMaterialsUuids(part, assetUuids); | 191 | GatherMaterialsUuids(part, assetUuids); |
187 | } | 192 | } |
188 | catch (Exception e) | 193 | catch (Exception e) |
@@ -208,7 +213,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
208 | // } | 213 | // } |
209 | // } | 214 | // } |
210 | 215 | ||
211 | |||
212 | /// <summary> | 216 | /// <summary> |
213 | /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps | 217 | /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps |
214 | /// </summary> | 218 | /// </summary> |
@@ -217,20 +221,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
217 | public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids) | 221 | public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids) |
218 | { | 222 | { |
219 | // scan thru the dynAttrs map of this part for any textures used as materials | 223 | // scan thru the dynAttrs map of this part for any textures used as materials |
220 | OSDMap OSMaterials = null; | 224 | OSD osdMaterials = null; |
221 | 225 | ||
222 | lock (part.DynAttrs) | 226 | lock (part.DynAttrs) |
223 | { | 227 | { |
224 | if (part.DynAttrs.ContainsKey("OS:Materials")) | 228 | if (part.DynAttrs.ContainsStore("OpenSim", "Materials")) |
225 | OSMaterials = part.DynAttrs["OS:Materials"]; | 229 | { |
226 | if (OSMaterials != null && OSMaterials.ContainsKey("Materials")) | 230 | OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials"); |
231 | |||
232 | if (materialsStore == null) | ||
233 | return; | ||
234 | |||
235 | materialsStore.TryGetValue("Materials", out osdMaterials); | ||
236 | } | ||
237 | |||
238 | if (osdMaterials != null) | ||
227 | { | 239 | { |
228 | OSD osd = OSMaterials["Materials"]; | ||
229 | //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd)); | 240 | //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd)); |
230 | 241 | ||
231 | if (osd is OSDArray) | 242 | if (osdMaterials is OSDArray) |
232 | { | 243 | { |
233 | OSDArray matsArr = osd as OSDArray; | 244 | OSDArray matsArr = osdMaterials as OSDArray; |
234 | foreach (OSDMap matMap in matsArr) | 245 | foreach (OSDMap matMap in matsArr) |
235 | { | 246 | { |
236 | try | 247 | try |
@@ -268,8 +279,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
268 | } | 279 | } |
269 | } | 280 | } |
270 | } | 281 | } |
271 | 282 | ||
272 | |||
273 | /// <summary> | 283 | /// <summary> |
274 | /// Get an asset synchronously, potentially using an asynchronous callback. If the | 284 | /// Get an asset synchronously, potentially using an asynchronous callback. If the |
275 | /// asynchronous callback is used, we will wait for it to complete. | 285 | /// asynchronous callback is used, we will wait for it to complete. |
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs index 4ab6609..3a39971 100644 --- a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs +++ b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs | |||
@@ -121,9 +121,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
121 | return; | 121 | return; |
122 | 122 | ||
123 | m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName); | 123 | m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName); |
124 | |||
124 | m_scene = scene; | 125 | m_scene = scene; |
125 | m_scene.EventManager.OnRegisterCaps += new EventManager.RegisterCapsEvent(OnRegisterCaps); | 126 | m_scene.EventManager.OnRegisterCaps += OnRegisterCaps; |
126 | m_scene.EventManager.OnObjectAddedToScene += new Action<SceneObjectGroup>(EventManager_OnObjectAddedToScene); | 127 | m_scene.EventManager.OnObjectAddedToScene += EventManager_OnObjectAddedToScene; |
128 | // m_scene.EventManager.OnGatherUuids += GatherMaterialsUuids; | ||
127 | } | 129 | } |
128 | 130 | ||
129 | void EventManager_OnObjectAddedToScene(SceneObjectGroup obj) | 131 | void EventManager_OnObjectAddedToScene(SceneObjectGroup obj) |
@@ -157,6 +159,10 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
157 | if (!m_enabled) | 159 | if (!m_enabled) |
158 | return; | 160 | return; |
159 | 161 | ||
162 | m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps; | ||
163 | m_scene.EventManager.OnObjectAddedToScene -= EventManager_OnObjectAddedToScene; | ||
164 | // m_scene.EventManager.OnGatherUuids -= GatherMaterialsUuids; | ||
165 | |||
160 | m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName); | 166 | m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName); |
161 | } | 167 | } |
162 | 168 | ||
@@ -167,18 +173,21 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
167 | OSDMap GetMaterial(UUID id) | 173 | OSDMap GetMaterial(UUID id) |
168 | { | 174 | { |
169 | OSDMap map = null; | 175 | OSDMap map = null; |
170 | if (m_knownMaterials.ContainsKey(id)) | 176 | lock (m_knownMaterials) |
171 | { | 177 | { |
172 | map = new OSDMap(); | 178 | if (m_knownMaterials.ContainsKey(id)) |
173 | map["ID"] = OSD.FromBinary(id.GetBytes()); | 179 | { |
174 | map["Material"] = m_knownMaterials[id]; | 180 | map = new OSDMap(); |
181 | map["ID"] = OSD.FromBinary(id.GetBytes()); | ||
182 | map["Material"] = m_knownMaterials[id]; | ||
183 | } | ||
175 | } | 184 | } |
176 | return map; | 185 | return map; |
177 | } | 186 | } |
178 | 187 | ||
179 | void GetStoredMaterialsForPart(SceneObjectPart part) | 188 | void GetStoredMaterialsForPart(SceneObjectPart part) |
180 | { | 189 | { |
181 | OSDMap OSMaterials = null; | 190 | OSD OSMaterials = null; |
182 | OSDArray matsArr = null; | 191 | OSDArray matsArr = null; |
183 | 192 | ||
184 | if (part.DynAttrs == null) | 193 | if (part.DynAttrs == null) |
@@ -188,23 +197,24 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
188 | 197 | ||
189 | lock (part.DynAttrs) | 198 | lock (part.DynAttrs) |
190 | { | 199 | { |
191 | if (part.DynAttrs.ContainsKey("OS:Materials")) | 200 | if (part.DynAttrs.ContainsStore("OpenSim", "Materials")) |
192 | OSMaterials = part.DynAttrs["OS:Materials"]; | ||
193 | if (OSMaterials != null && OSMaterials.ContainsKey("Materials")) | ||
194 | { | 201 | { |
202 | OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials"); | ||
195 | 203 | ||
196 | OSD osd = OSMaterials["Materials"]; | 204 | if (materialsStore == null) |
197 | if (osd is OSDArray) | 205 | return; |
198 | matsArr = osd as OSDArray; | 206 | |
207 | materialsStore.TryGetValue("Materials", out OSMaterials); | ||
199 | } | 208 | } |
200 | } | ||
201 | 209 | ||
202 | if (OSMaterials == null) | 210 | if (OSMaterials != null && OSMaterials is OSDArray) |
203 | return; | 211 | matsArr = OSMaterials as OSDArray; |
212 | else | ||
213 | return; | ||
214 | } | ||
204 | 215 | ||
205 | m_log.Info("[MaterialsDemoModule]: OSMaterials: " + OSDParser.SerializeJsonString(OSMaterials)); | 216 | m_log.Info("[MaterialsDemoModule]: OSMaterials: " + OSDParser.SerializeJsonString(OSMaterials)); |
206 | 217 | ||
207 | |||
208 | if (matsArr == null) | 218 | if (matsArr == null) |
209 | { | 219 | { |
210 | m_log.Info("[MaterialsDemoModule]: matsArr is null :( "); | 220 | m_log.Info("[MaterialsDemoModule]: matsArr is null :( "); |
@@ -215,13 +225,13 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
215 | { | 225 | { |
216 | if (elemOsd != null && elemOsd is OSDMap) | 226 | if (elemOsd != null && elemOsd is OSDMap) |
217 | { | 227 | { |
218 | |||
219 | OSDMap matMap = elemOsd as OSDMap; | 228 | OSDMap matMap = elemOsd as OSDMap; |
220 | if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material")) | 229 | if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material")) |
221 | { | 230 | { |
222 | try | 231 | try |
223 | { | 232 | { |
224 | m_knownMaterials[matMap["ID"].AsUUID()] = (OSDMap)matMap["Material"]; | 233 | lock (m_knownMaterials) |
234 | m_knownMaterials[matMap["ID"].AsUUID()] = (OSDMap)matMap["Material"]; | ||
225 | } | 235 | } |
226 | catch (Exception e) | 236 | catch (Exception e) |
227 | { | 237 | { |
@@ -232,7 +242,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
232 | } | 242 | } |
233 | } | 243 | } |
234 | 244 | ||
235 | |||
236 | void StoreMaterialsForPart(SceneObjectPart part) | 245 | void StoreMaterialsForPart(SceneObjectPart part) |
237 | { | 246 | { |
238 | try | 247 | try |
@@ -246,8 +255,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
246 | 255 | ||
247 | if (te.DefaultTexture != null) | 256 | if (te.DefaultTexture != null) |
248 | { | 257 | { |
249 | if (m_knownMaterials.ContainsKey(te.DefaultTexture.MaterialID)) | 258 | lock (m_knownMaterials) |
250 | mats[te.DefaultTexture.MaterialID] = m_knownMaterials[te.DefaultTexture.MaterialID]; | 259 | { |
260 | if (m_knownMaterials.ContainsKey(te.DefaultTexture.MaterialID)) | ||
261 | mats[te.DefaultTexture.MaterialID] = m_knownMaterials[te.DefaultTexture.MaterialID]; | ||
262 | } | ||
251 | } | 263 | } |
252 | 264 | ||
253 | if (te.FaceTextures != null) | 265 | if (te.FaceTextures != null) |
@@ -256,8 +268,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
256 | { | 268 | { |
257 | if (face != null) | 269 | if (face != null) |
258 | { | 270 | { |
259 | if (m_knownMaterials.ContainsKey(face.MaterialID)) | 271 | lock (m_knownMaterials) |
260 | mats[face.MaterialID] = m_knownMaterials[face.MaterialID]; | 272 | { |
273 | if (m_knownMaterials.ContainsKey(face.MaterialID)) | ||
274 | mats[face.MaterialID] = m_knownMaterials[face.MaterialID]; | ||
275 | } | ||
261 | } | 276 | } |
262 | } | 277 | } |
263 | } | 278 | } |
@@ -277,7 +292,7 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
277 | OSMaterials["Materials"] = matsArr; | 292 | OSMaterials["Materials"] = matsArr; |
278 | 293 | ||
279 | lock (part.DynAttrs) | 294 | lock (part.DynAttrs) |
280 | part.DynAttrs["OS:Materials"] = OSMaterials; | 295 | part.DynAttrs.SetStore("OpenSim", "Materials", OSMaterials); |
281 | } | 296 | } |
282 | catch (Exception e) | 297 | catch (Exception e) |
283 | { | 298 | { |
@@ -285,7 +300,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
285 | } | 300 | } |
286 | } | 301 | } |
287 | 302 | ||
288 | |||
289 | public string RenderMaterialsPostCap(string request, string path, | 303 | public string RenderMaterialsPostCap(string request, string path, |
290 | string param, IOSHttpRequest httpRequest, | 304 | string param, IOSHttpRequest httpRequest, |
291 | IOSHttpResponse httpResponse) | 305 | IOSHttpResponse httpResponse) |
@@ -319,18 +333,21 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
319 | try | 333 | try |
320 | { | 334 | { |
321 | UUID id = new UUID(elem.AsBinary(), 0); | 335 | UUID id = new UUID(elem.AsBinary(), 0); |
322 | 336 | ||
323 | if (m_knownMaterials.ContainsKey(id)) | 337 | lock (m_knownMaterials) |
324 | { | 338 | { |
325 | m_log.Info("[MaterialsDemoModule]: request for known material ID: " + id.ToString()); | 339 | if (m_knownMaterials.ContainsKey(id)) |
326 | OSDMap matMap = new OSDMap(); | 340 | { |
327 | matMap["ID"] = OSD.FromBinary(id.GetBytes()); | 341 | m_log.Info("[MaterialsDemoModule]: request for known material ID: " + id.ToString()); |
342 | OSDMap matMap = new OSDMap(); | ||
343 | matMap["ID"] = OSD.FromBinary(id.GetBytes()); | ||
328 | 344 | ||
329 | matMap["Material"] = m_knownMaterials[id]; | 345 | matMap["Material"] = m_knownMaterials[id]; |
330 | respArr.Add(matMap); | 346 | respArr.Add(matMap); |
347 | } | ||
348 | else | ||
349 | m_log.Info("[MaterialsDemoModule]: request for UNKNOWN material ID: " + id.ToString()); | ||
331 | } | 350 | } |
332 | else | ||
333 | m_log.Info("[MaterialsDemoModule]: request for UNKNOWN material ID: " + id.ToString()); | ||
334 | } | 351 | } |
335 | catch (Exception e) | 352 | catch (Exception e) |
336 | { | 353 | { |
@@ -368,7 +385,8 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
368 | m_log.Debug("[MaterialsDemoModule]: mat: " + OSDParser.SerializeJsonString(mat)); | 385 | m_log.Debug("[MaterialsDemoModule]: mat: " + OSDParser.SerializeJsonString(mat)); |
369 | 386 | ||
370 | UUID id = HashOsd(mat); | 387 | UUID id = HashOsd(mat); |
371 | m_knownMaterials[id] = mat; | 388 | lock (m_knownMaterials) |
389 | m_knownMaterials[id] = mat; | ||
372 | 390 | ||
373 | 391 | ||
374 | var sop = m_scene.GetSceneObjectPart(matLocalID); | 392 | var sop = m_scene.GetSceneObjectPart(matLocalID); |
@@ -476,24 +494,22 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
476 | m_log.Debug("[MaterialsDemoModule]: GET cap handler"); | 494 | m_log.Debug("[MaterialsDemoModule]: GET cap handler"); |
477 | 495 | ||
478 | OSDMap resp = new OSDMap(); | 496 | OSDMap resp = new OSDMap(); |
479 | |||
480 | |||
481 | int matsCount = 0; | 497 | int matsCount = 0; |
482 | |||
483 | OSDArray allOsd = new OSDArray(); | 498 | OSDArray allOsd = new OSDArray(); |
484 | 499 | ||
485 | foreach (KeyValuePair<UUID, OSDMap> kvp in m_knownMaterials) | 500 | lock (m_knownMaterials) |
486 | { | 501 | { |
487 | OSDMap matMap = new OSDMap(); | 502 | foreach (KeyValuePair<UUID, OSDMap> kvp in m_knownMaterials) |
488 | 503 | { | |
489 | matMap["ID"] = OSD.FromBinary(kvp.Key.GetBytes()); | 504 | OSDMap matMap = new OSDMap(); |
490 | 505 | ||
491 | matMap["Material"] = kvp.Value; | 506 | matMap["ID"] = OSD.FromBinary(kvp.Key.GetBytes()); |
492 | allOsd.Add(matMap); | 507 | matMap["Material"] = kvp.Value; |
493 | matsCount++; | 508 | allOsd.Add(matMap); |
509 | matsCount++; | ||
510 | } | ||
494 | } | 511 | } |
495 | 512 | ||
496 | |||
497 | resp["Zipped"] = ZCompressOSD(allOsd, false); | 513 | resp["Zipped"] = ZCompressOSD(allOsd, false); |
498 | m_log.Debug("[MaterialsDemoModule]: matsCount: " + matsCount.ToString()); | 514 | m_log.Debug("[MaterialsDemoModule]: matsCount: " + matsCount.ToString()); |
499 | 515 | ||
@@ -575,5 +591,72 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
575 | output.Flush(); | 591 | output.Flush(); |
576 | } | 592 | } |
577 | 593 | ||
594 | // FIXME: This code is currently still in UuidGatherer since we cannot use Scene.EventManager as some | ||
595 | // calls to the gatherer are done for objects with no scene. | ||
596 | // /// <summary> | ||
597 | // /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps | ||
598 | // /// </summary> | ||
599 | // /// <param name="part"></param> | ||
600 | // /// <param name="assetUuids"></param> | ||
601 | // private void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids) | ||
602 | // { | ||
603 | // // scan thru the dynAttrs map of this part for any textures used as materials | ||
604 | // OSD osdMaterials = null; | ||
605 | // | ||
606 | // lock (part.DynAttrs) | ||
607 | // { | ||
608 | // if (part.DynAttrs.ContainsStore("OpenSim", "Materials")) | ||
609 | // { | ||
610 | // OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials"); | ||
611 | // if (materialsStore == null) | ||
612 | // return; | ||
613 | // | ||
614 | // materialsStore.TryGetValue("Materials", out osdMaterials); | ||
615 | // } | ||
616 | // | ||
617 | // if (osdMaterials != null) | ||
618 | // { | ||
619 | // //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd)); | ||
620 | // | ||
621 | // if (osdMaterials is OSDArray) | ||
622 | // { | ||
623 | // OSDArray matsArr = osdMaterials as OSDArray; | ||
624 | // foreach (OSDMap matMap in matsArr) | ||
625 | // { | ||
626 | // try | ||
627 | // { | ||
628 | // if (matMap.ContainsKey("Material")) | ||
629 | // { | ||
630 | // OSDMap mat = matMap["Material"] as OSDMap; | ||
631 | // if (mat.ContainsKey("NormMap")) | ||
632 | // { | ||
633 | // UUID normalMapId = mat["NormMap"].AsUUID(); | ||
634 | // if (normalMapId != UUID.Zero) | ||
635 | // { | ||
636 | // assetUuids[normalMapId] = AssetType.Texture; | ||
637 | // //m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString()); | ||
638 | // } | ||
639 | // } | ||
640 | // if (mat.ContainsKey("SpecMap")) | ||
641 | // { | ||
642 | // UUID specularMapId = mat["SpecMap"].AsUUID(); | ||
643 | // if (specularMapId != UUID.Zero) | ||
644 | // { | ||
645 | // assetUuids[specularMapId] = AssetType.Texture; | ||
646 | // //m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString()); | ||
647 | // } | ||
648 | // } | ||
649 | // } | ||
650 | // | ||
651 | // } | ||
652 | // catch (Exception e) | ||
653 | // { | ||
654 | // m_log.Warn("[MaterialsDemoModule]: exception getting materials: " + e.Message); | ||
655 | // } | ||
656 | // } | ||
657 | // } | ||
658 | // } | ||
659 | // } | ||
660 | // } | ||
578 | } | 661 | } |
579 | } \ No newline at end of file | 662 | } \ No newline at end of file |