mirror of
https://github.com/opensim/opensim.git
synced 2026-08-07 01:35:46 +08:00
Fixes the long-standing RegionUp bug! Plus lots of other cleanups related to neighbours.
This commit is contained in:
@@ -352,7 +352,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||
// Save avatar attachment information
|
||||
if (m_scene.AvatarFactory != null)
|
||||
{
|
||||
m_log.Debug("[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId + ", ItemID: " + itemID);
|
||||
m_log.Debug("[ATTACHMENTS MODULE]: Dettaching from UserID: " + remoteClient.AgentId + ", ItemID: " + itemID);
|
||||
m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||
|
||||
public void UpdateDatabase(UUID user, AvatarAppearance appearance)
|
||||
{
|
||||
//m_log.DebugFormat("[APPEARANCE]: UpdateDatabase");
|
||||
m_log.DebugFormat("[APPEARANCE]: UpdateDatabase");
|
||||
AvatarData adata = new AvatarData(appearance);
|
||||
m_scene.AvatarService.SetAvatar(user, adata);
|
||||
}
|
||||
|
||||
@@ -922,12 +922,40 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||
/// </summary>
|
||||
public void EnableChildAgent(ScenePresence sp, GridRegion region)
|
||||
{
|
||||
m_log.DebugFormat("[ENTITY TRANSFER]: Enabling child agent in new neighour {0}", region.RegionName);
|
||||
|
||||
AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
|
||||
AgentCircuitData agent = sp.ControllingClient.RequestClientInfo();
|
||||
agent.BaseFolder = UUID.Zero;
|
||||
agent.InventoryFolder = UUID.Zero;
|
||||
agent.startpos = new Vector3(128, 128, 70);
|
||||
agent.child = true;
|
||||
agent.Appearance = sp.Appearance;
|
||||
agent.CapsPath = CapsUtil.GetRandomCapsObjectPath();
|
||||
|
||||
agent.ChildrenCapSeeds = new Dictionary<ulong, string>(sp.Scene.CapsModule.GetChildrenSeeds(sp.UUID));
|
||||
m_log.DebugFormat("[XXX] Seeds 1 {0}", agent.ChildrenCapSeeds.Count);
|
||||
|
||||
if (!agent.ChildrenCapSeeds.ContainsKey(sp.Scene.RegionInfo.RegionHandle))
|
||||
agent.ChildrenCapSeeds.Add(sp.Scene.RegionInfo.RegionHandle, sp.ControllingClient.RequestClientInfo().CapsPath);
|
||||
m_log.DebugFormat("[XXX] Seeds 2 {0}", agent.ChildrenCapSeeds.Count);
|
||||
|
||||
sp.AddNeighbourRegion(region.RegionHandle, agent.CapsPath);
|
||||
foreach (ulong h in agent.ChildrenCapSeeds.Keys)
|
||||
m_log.DebugFormat("[XXX] --> {0}", h);
|
||||
m_log.DebugFormat("[XXX] Adding {0}", region.RegionHandle);
|
||||
agent.ChildrenCapSeeds.Add(region.RegionHandle, agent.CapsPath);
|
||||
|
||||
if (sp.Scene.CapsModule != null)
|
||||
{
|
||||
sp.Scene.CapsModule.SetChildrenSeed(sp.UUID, agent.ChildrenCapSeeds);
|
||||
}
|
||||
|
||||
if (currentAgentCircuit != null)
|
||||
{
|
||||
agent.ServiceURLs = currentAgentCircuit.ServiceURLs;
|
||||
agent.Viewer = currentAgentCircuit.Viewer;
|
||||
}
|
||||
|
||||
InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
|
||||
d.BeginInvoke(sp, agent, region, region.ExternalEndPoint, true,
|
||||
|
||||
@@ -123,17 +123,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour
|
||||
|
||||
public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
|
||||
{
|
||||
m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}",
|
||||
thisRegion.RegionName, regionHandle, m_Scenes.Count);
|
||||
foreach (Scene s in m_Scenes)
|
||||
{
|
||||
if (s.RegionInfo.RegionHandle == regionHandle)
|
||||
{
|
||||
m_log.Debug("[NEIGHBOUR IN CONNECTOR]: Found region to SendHelloNeighbour");
|
||||
//m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0} to {1}", thisRegion.RegionName, s.RegionInfo.RegionName);
|
||||
return s.IncomingHelloNeighbour(thisRegion);
|
||||
}
|
||||
}
|
||||
m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: region handle {0} not found", regionHandle);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,22 +181,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
|
||||
|
||||
public List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID)
|
||||
{
|
||||
if (m_LocalCache.ContainsKey(regionID))
|
||||
{
|
||||
List<GridRegion> neighbours = m_LocalCache[regionID].GetNeighbours();
|
||||
if (neighbours.Count == 0)
|
||||
// try the DB
|
||||
neighbours = m_GridService.GetNeighbours(scopeID, regionID);
|
||||
return neighbours;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.WarnFormat("[LOCAL GRID CONNECTOR]: GetNeighbours: Requested region {0} is not on this sim", regionID);
|
||||
return new List<GridRegion>();
|
||||
}
|
||||
|
||||
// Don't go to the DB
|
||||
//return m_GridService.GetNeighbours(scopeID, regionID);
|
||||
return m_GridService.GetNeighbours(scopeID, regionID);
|
||||
}
|
||||
|
||||
public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID)
|
||||
|
||||
@@ -153,12 +153,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
|
||||
return false;
|
||||
}
|
||||
|
||||
// Let's override GetNeighbours completely -- never go to the grid server
|
||||
// Neighbours are/should be cached locally
|
||||
// For retrieval from the DB, caller should call GetRegionByPosition
|
||||
public override List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID)
|
||||
{
|
||||
return m_LocalGridService.GetNeighbours(scopeID, regionID);
|
||||
return base.GetNeighbours(scopeID, regionID);
|
||||
}
|
||||
|
||||
public override GridRegion GetRegionByUUID(UUID scopeID, UUID regionID)
|
||||
|
||||
@@ -121,17 +121,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour
|
||||
|
||||
public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
|
||||
{
|
||||
m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}",
|
||||
thisRegion.RegionName, regionHandle, m_Scenes.Count);
|
||||
m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}.",
|
||||
thisRegion.RegionName, regionHandle);
|
||||
foreach (Scene s in m_Scenes)
|
||||
{
|
||||
if (s.RegionInfo.RegionHandle == regionHandle)
|
||||
{
|
||||
m_log.Debug("[NEIGHBOUR CONNECTOR]: Found region to SendHelloNeighbour");
|
||||
//m_log.Debug("[NEIGHBOUR CONNECTOR]: Found region to SendHelloNeighbour");
|
||||
return s.IncomingHelloNeighbour(thisRegion);
|
||||
}
|
||||
}
|
||||
m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle);
|
||||
//m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,7 +181,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||
// else do the remote thing
|
||||
if (!m_localBackend.IsLocalRegion(destination.RegionHandle))
|
||||
{
|
||||
//m_regionClient.SendUserInformation(regInfo, aCircuit);
|
||||
return m_remoteConnector.CreateAgent(destination, aCircuit, teleportFlags, out reason);
|
||||
}
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user