mirror of
https://github.com/opensim/opensim.git
synced 2026-08-12 04:05:42 +08:00
* Drop cached inventory from the local region when a user crosses out into a remote region
* May resolves inventory problems that occur when the user moves between two regions` * e.g. if the user moves to a second region, adds an inventory item, moves back to the original region then tries to manipulate that item * Not yet implemented for teleport
This commit is contained in:
@@ -75,7 +75,7 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
private readonly IList<IInventoryRequest> m_pendingRequests = new List<IInventoryRequest>();
|
||||
|
||||
/// <summary>
|
||||
/// The root folder of this user's inventory. Returns null if the inventory has not yet been received.
|
||||
/// The root folder of this user's inventory. Returns null if the root folder has not yet been received.
|
||||
/// </summary>
|
||||
public InventoryFolderImpl RootFolder { get { return m_rootFolder; } }
|
||||
private InventoryFolderImpl m_rootFolder;
|
||||
@@ -183,6 +183,21 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Drop all cached inventory.
|
||||
/// </summary>
|
||||
public void DropInventory()
|
||||
{
|
||||
// Make sure there aren't pending requests around when we do this
|
||||
// FIXME: There is still a race condition where an inventory operation can be requested (since these aren't being locked).
|
||||
// Will have to extend locking to exclude this very soon.
|
||||
lock (m_pendingRequests)
|
||||
{
|
||||
m_hasReceivedInventory = false;
|
||||
m_rootFolder = null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Callback invoked when the inventory is received from an async request to the inventory service
|
||||
|
||||
@@ -118,21 +118,19 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns>true if the user was successfully removed, false otherwise</returns>
|
||||
public bool RemoveUser(LLUUID userID)
|
||||
public bool RemoveUser(LLUUID userId)
|
||||
{
|
||||
lock (m_userProfiles)
|
||||
{
|
||||
if (m_userProfiles.ContainsKey(userID))
|
||||
if (m_userProfiles.ContainsKey(userId))
|
||||
{
|
||||
m_userProfiles.Remove(userID);
|
||||
m_log.DebugFormat("[USER CACHE]: Removing user {0}", userId);
|
||||
m_userProfiles.Remove(userId);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.ErrorFormat("[USER CACHE]: Tried to remove the profile of user {0}, but this was not in the scene", userID);
|
||||
}
|
||||
}
|
||||
|
||||
m_log.ErrorFormat("[USER CACHE]: Tried to remove the profile of user {0}, but this was not in the scene", userId);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -41,20 +41,34 @@ namespace OpenSim.Framework
|
||||
// private static readonly log4net.ILog m_log
|
||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
/// <summary>
|
||||
/// The port by which http communication occurs with the region (most noticeably, CAPS communication)
|
||||
/// </summary>
|
||||
public uint HttpPort
|
||||
{
|
||||
get { return m_httpPort; }
|
||||
set { m_httpPort = value; }
|
||||
}
|
||||
protected uint m_httpPort;
|
||||
|
||||
/// <summary>
|
||||
/// A well-formed URI for the host region server (namely "http://" + ExternalHostName)
|
||||
/// </summary>
|
||||
public string ServerURI
|
||||
{
|
||||
get { return m_serverURI; }
|
||||
set { m_serverURI = value; }
|
||||
}
|
||||
protected string m_serverURI;
|
||||
|
||||
protected bool Allow_Alternate_Ports;
|
||||
public bool m_allow_alternate_ports;
|
||||
protected string m_externalHostName;
|
||||
|
||||
/// <value>
|
||||
/// The port by which http communication occurs with the region (most noticeably, CAPS communication)
|
||||
/// </value>
|
||||
protected uint m_httpPort;
|
||||
|
||||
|
||||
protected IPEndPoint m_internalEndPoint;
|
||||
protected uint? m_regionLocX;
|
||||
protected uint? m_regionLocY;
|
||||
protected uint m_remotingPort;
|
||||
protected string m_serverURI;
|
||||
protected uint m_remotingPort;
|
||||
public LLUUID RegionID = LLUUID.Zero;
|
||||
public string RemotingAddress;
|
||||
|
||||
@@ -101,18 +115,6 @@ namespace OpenSim.Framework
|
||||
set { m_remotingPort = value; }
|
||||
}
|
||||
|
||||
public uint HttpPort
|
||||
{
|
||||
get { return m_httpPort; }
|
||||
set { m_httpPort = value; }
|
||||
}
|
||||
|
||||
public string ServerURI
|
||||
{
|
||||
get { return m_serverURI; }
|
||||
set { m_serverURI = value; }
|
||||
}
|
||||
|
||||
/// <value>
|
||||
/// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw.
|
||||
///
|
||||
|
||||
@@ -195,7 +195,7 @@ namespace OpenSim.Framework.Servers
|
||||
string path = request.RawUrl;
|
||||
string handlerKey = GetHandlerKey(request.HttpMethod, path);
|
||||
|
||||
// m_log.DebugFormat("[BASE HTTP SERVER]: Handling {0} request for {1}", request.HttpMethod, path);
|
||||
//m_log.DebugFormat("[BASE HTTP SERVER]: Handling {0} request for {1}", request.HttpMethod, path);
|
||||
|
||||
if (TryGetStreamHandler(handlerKey, out requestHandler))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user