mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 02:36:00 +08:00
Establish CachedUserInfo.OnInventoryReceived event so that region/test inventory code can be written with the async inventory fetch
This commit is contained in:
@@ -49,16 +49,24 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
IClientAPI client, UUID folderID, bool fetchFolders, bool fetchItems);
|
||||
|
||||
public delegate void OnItemReceivedDelegate(UUID itemID);
|
||||
public delegate void OnInventoryReceivedDelegate(UUID userID);
|
||||
|
||||
/// <summary>
|
||||
/// Stores user profile and inventory data received from backend services for a particular user.
|
||||
/// </summary>
|
||||
public class CachedUserInfo
|
||||
{
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
//// <value>
|
||||
/// Fired when a particular item has been received from the inventory service
|
||||
/// </value>
|
||||
public event OnItemReceivedDelegate OnItemReceived;
|
||||
|
||||
private static readonly ILog m_log
|
||||
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
/// <value>
|
||||
/// Fired once the entire inventory has been received for the user
|
||||
/// </value>
|
||||
public event OnInventoryReceivedDelegate OnInventoryReceived;
|
||||
|
||||
/// <summary>
|
||||
/// The comms manager holds references to services (user, grid, inventory, etc.)
|
||||
@@ -133,7 +141,9 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
UUID parentFolderId = folder.ParentID;
|
||||
|
||||
if (dictionary.ContainsKey(parentFolderId))
|
||||
{
|
||||
dictionary[parentFolderId].Add(folder);
|
||||
}
|
||||
else
|
||||
{
|
||||
IList<InventoryFolderImpl> folders = new List<InventoryFolderImpl>();
|
||||
@@ -299,6 +309,9 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
request.Execute();
|
||||
}
|
||||
}
|
||||
|
||||
if (OnInventoryReceived != null)
|
||||
OnInventoryReceived(UserProfile.ID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -43,6 +43,18 @@ namespace OpenSim.Framework.Communications.Tests
|
||||
[TestFixture]
|
||||
public class UserProfileCacheServiceTests
|
||||
{
|
||||
/// <value>Used by tests to indicate whether an async operation timed out</value>
|
||||
private bool timedOut;
|
||||
|
||||
private void InventoryReceived(UUID userId)
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
timedOut = false;
|
||||
Monitor.PulseAll(this);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestGetUserDetails()
|
||||
{
|
||||
@@ -118,14 +130,15 @@ namespace OpenSim.Framework.Communications.Tests
|
||||
TestHelper.InMethod();
|
||||
|
||||
Scene myScene = SceneSetupHelpers.SetupScene("inventory");
|
||||
CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager);
|
||||
for (int i = 0 ; i < 50 ; i++)
|
||||
{
|
||||
if (userInfo.HasReceivedInventory == true)
|
||||
break;
|
||||
Thread.Sleep(200);
|
||||
}
|
||||
Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)");
|
||||
|
||||
timedOut = true;
|
||||
lock (this)
|
||||
{
|
||||
UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived);
|
||||
Monitor.Wait(this, 60000);
|
||||
}
|
||||
|
||||
Assert.That(timedOut, Is.False, "Timed out");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -134,14 +147,13 @@ namespace OpenSim.Framework.Communications.Tests
|
||||
TestHelper.InMethod();
|
||||
|
||||
Scene myScene = SceneSetupHelpers.SetupScene("inventory");
|
||||
CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager);
|
||||
for (int i = 0 ; i < 50 ; i++)
|
||||
{
|
||||
if (userInfo.HasReceivedInventory == true)
|
||||
break;
|
||||
Thread.Sleep(200);
|
||||
CachedUserInfo userInfo;
|
||||
|
||||
lock (this)
|
||||
{
|
||||
userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived);
|
||||
Monitor.Wait(this, 60000);
|
||||
}
|
||||
Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)");
|
||||
|
||||
UUID folderId = UUID.Parse("00000000-0000-0000-0000-000000000011");
|
||||
Assert.That(userInfo.RootFolder.GetChildFolder(folderId), Is.Null);
|
||||
@@ -156,14 +168,13 @@ namespace OpenSim.Framework.Communications.Tests
|
||||
TestHelper.InMethod();
|
||||
|
||||
Scene myScene = SceneSetupHelpers.SetupScene("inventory");
|
||||
CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager);
|
||||
for (int i = 0 ; i < 50 ; i++)
|
||||
{
|
||||
if (userInfo.HasReceivedInventory == true)
|
||||
break;
|
||||
Thread.Sleep(200);
|
||||
CachedUserInfo userInfo;
|
||||
|
||||
lock (this)
|
||||
{
|
||||
userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived);
|
||||
Monitor.Wait(this, 60000);
|
||||
}
|
||||
Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)");
|
||||
|
||||
UUID folderId = UUID.Parse("00000000-0000-0000-0000-000000000010");
|
||||
Assert.That(userInfo.RootFolder.ContainsChildFolder(folderId), Is.False);
|
||||
@@ -192,14 +203,13 @@ namespace OpenSim.Framework.Communications.Tests
|
||||
TestHelper.InMethod();
|
||||
|
||||
Scene myScene = SceneSetupHelpers.SetupScene("inventory");
|
||||
CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager);
|
||||
for (int i = 0 ; i < 50 ; i++)
|
||||
{
|
||||
if (userInfo.HasReceivedInventory == true)
|
||||
break;
|
||||
Thread.Sleep(200);
|
||||
CachedUserInfo userInfo;
|
||||
|
||||
lock (this)
|
||||
{
|
||||
userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived);
|
||||
Monitor.Wait(this, 60000);
|
||||
}
|
||||
Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)");
|
||||
|
||||
UUID folder1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
|
||||
InventoryFolderImpl rootFolder = userInfo.RootFolder;
|
||||
@@ -258,14 +268,13 @@ namespace OpenSim.Framework.Communications.Tests
|
||||
TestHelper.InMethod();
|
||||
|
||||
Scene myScene = SceneSetupHelpers.SetupScene("inventory");
|
||||
CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager);
|
||||
for (int i = 0 ; i < 50 ; i++)
|
||||
{
|
||||
if (userInfo.HasReceivedInventory == true)
|
||||
break;
|
||||
Thread.Sleep(200);
|
||||
CachedUserInfo userInfo;
|
||||
|
||||
lock (this)
|
||||
{
|
||||
userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived);
|
||||
Monitor.Wait(this, 60000);
|
||||
}
|
||||
Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)");
|
||||
|
||||
UUID folder1Id = UUID.Parse("00000000-0000-0000-0000-000000000020");
|
||||
UUID folder2Id = UUID.Parse("00000000-0000-0000-0000-000000000021");
|
||||
@@ -299,14 +308,13 @@ namespace OpenSim.Framework.Communications.Tests
|
||||
//log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
Scene myScene = SceneSetupHelpers.SetupScene("inventory");
|
||||
CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager);
|
||||
for (int i = 0 ; i < 50 ; i++)
|
||||
{
|
||||
if (userInfo.HasReceivedInventory == true)
|
||||
break;
|
||||
Thread.Sleep(200);
|
||||
CachedUserInfo userInfo;
|
||||
|
||||
lock (this)
|
||||
{
|
||||
userInfo = UserProfileTestUtils.CreateUserWithInventory(myScene.CommsManager, InventoryReceived);
|
||||
Monitor.Wait(this, 60000);
|
||||
}
|
||||
Assert.That(userInfo.HasReceivedInventory, Is.True, "FetchInventory timed out (10 seconds)");
|
||||
|
||||
UUID folder1Id = UUID.Parse("00000000-0000-0000-0000-000000000070");
|
||||
InventoryFolderImpl rootFolder = userInfo.RootFolder;
|
||||
@@ -323,4 +331,4 @@ namespace OpenSim.Framework.Communications.Tests
|
||||
Assert.That(myScene.InventoryService.QueryFolder(myFolder), Is.Null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user