More plumbing of the EntityTransferContext (not yet complete)
parent
29798cefcc
commit
69585a4824
|
@ -184,7 +184,7 @@ namespace OpenSim.Framework
|
|||
/// Pack AgentCircuitData into an OSDMap for transmission over LLSD XML or LLSD json
|
||||
/// </summary>
|
||||
/// <returns>map of the agent circuit data</returns>
|
||||
public OSDMap PackAgentCircuitData()
|
||||
public OSDMap PackAgentCircuitData(int wearablesCount)
|
||||
{
|
||||
OSDMap args = new OSDMap();
|
||||
args["agent_id"] = OSD.FromUUID(AgentID);
|
||||
|
@ -224,7 +224,7 @@ namespace OpenSim.Framework
|
|||
{
|
||||
args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
|
||||
|
||||
OSDMap appmap = Appearance.Pack();
|
||||
OSDMap appmap = Appearance.Pack(wearablesCount);
|
||||
args["packed_appearance"] = appmap;
|
||||
}
|
||||
|
||||
|
|
|
@ -211,13 +211,12 @@ namespace OpenSim.Framework
|
|||
|
||||
m_serial = appearance.Serial;
|
||||
|
||||
m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
m_wearables[i] = new AvatarWearable();
|
||||
ClearWearables();
|
||||
|
||||
if (copyWearables && (appearance.Wearables != null))
|
||||
{
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
m_wearables = new AvatarWearable[appearance.Wearables.Length];
|
||||
for (int i = 0; i < appearance.Wearables.Length; i++)
|
||||
SetWearable(i,appearance.Wearables[i]);
|
||||
}
|
||||
|
||||
|
@ -247,7 +246,7 @@ namespace OpenSim.Framework
|
|||
|
||||
public void GetAssetsFrom(AvatarAppearance app)
|
||||
{
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
for (int i = 0; i < m_wearables.Length; i++)
|
||||
{
|
||||
for (int j = 0; j < m_wearables[i].Count; j++)
|
||||
{
|
||||
|
@ -262,8 +261,8 @@ namespace OpenSim.Framework
|
|||
|
||||
public void ClearWearables()
|
||||
{
|
||||
m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
m_wearables = new AvatarWearable[AvatarWearable.LEGACY_VERSION_MAX_WEARABLES];
|
||||
for (int i = 0; i < AvatarWearable.LEGACY_VERSION_MAX_WEARABLES; i++)
|
||||
m_wearables[i] = new AvatarWearable();
|
||||
}
|
||||
|
||||
|
@ -470,11 +469,15 @@ namespace OpenSim.Framework
|
|||
// DEBUG ON
|
||||
// m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID);
|
||||
// DEBUG OFF
|
||||
if (wearableId >= m_wearables.Length)
|
||||
{
|
||||
int currentLength = m_wearables.Length;
|
||||
Array.Resize(ref m_wearables, wearableId + 1);
|
||||
for (int i = currentLength ; i < m_wearables.Length ; i++)
|
||||
m_wearables[i] = new AvatarWearable();
|
||||
}
|
||||
m_wearables[wearableId].Clear();
|
||||
int count = wearable.Count;
|
||||
if (count > AvatarWearable.MAX_WEARABLES)
|
||||
count = AvatarWearable.MAX_WEARABLES;
|
||||
for (int i = 0; i < count; i++)
|
||||
for (int i = 0; i < wearable.Count; i++)
|
||||
m_wearables[wearableId].Add(wearable[i].ItemID, wearable[i].AssetID);
|
||||
}
|
||||
|
||||
|
@ -714,7 +717,7 @@ namespace OpenSim.Framework
|
|||
/// <summary>
|
||||
/// Create an OSDMap from the appearance data
|
||||
/// </summary>
|
||||
public OSDMap Pack()
|
||||
public OSDMap Pack(int wearablesCount)
|
||||
{
|
||||
OSDMap data = new OSDMap();
|
||||
|
||||
|
@ -722,9 +725,22 @@ namespace OpenSim.Framework
|
|||
data["height"] = OSD.FromReal(m_avatarHeight);
|
||||
|
||||
// Wearables
|
||||
OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES);
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
wears.Add(m_wearables[i].Pack());
|
||||
//
|
||||
// This will send as many or as few wearables as we have, unless a count
|
||||
// is given. Used for legacy (pre 0.4) versions.
|
||||
int count = wearablesCount;
|
||||
if (wearablesCount == -1)
|
||||
count = m_wearables.Length;
|
||||
OSDArray wears = new OSDArray(count);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
AvatarWearable dummyWearable = new AvatarWearable();
|
||||
|
||||
if (i < m_wearables.Length)
|
||||
wears.Add(m_wearables[i].Pack());
|
||||
else
|
||||
wears.Add(dummyWearable.Pack());
|
||||
}
|
||||
data["wearables"] = wears;
|
||||
|
||||
// Avatar Textures
|
||||
|
@ -782,8 +798,8 @@ namespace OpenSim.Framework
|
|||
OSDArray wears = (OSDArray)(data["wearables"]);
|
||||
|
||||
int count = wears.Count;
|
||||
if (count > AvatarWearable.MAX_WEARABLES)
|
||||
count = AvatarWearable.MAX_WEARABLES;
|
||||
|
||||
m_wearables = new AvatarWearable[count];
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
m_wearables[i] = new AvatarWearable((OSDArray)wears[i]);
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace OpenSim.Framework
|
|||
public static readonly int ALPHA = 13;
|
||||
public static readonly int TATTOO = 14;
|
||||
|
||||
public static readonly int MAX_WEARABLES = 15;
|
||||
public static readonly int LEGACY_VERSION_MAX_WEARABLES = 15;
|
||||
// public static readonly int PHYSICS = 15;
|
||||
// public static int MAX_WEARABLES = 16;
|
||||
|
||||
|
@ -225,8 +225,9 @@ namespace OpenSim.Framework
|
|||
{
|
||||
get
|
||||
{
|
||||
AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES];
|
||||
for (int i = 0; i < MAX_WEARABLES; i++)
|
||||
// We use the legacy count here because this is just a fallback anyway
|
||||
AvatarWearable[] defaultWearables = new AvatarWearable[LEGACY_VERSION_MAX_WEARABLES];
|
||||
for (int i = 0; i < LEGACY_VERSION_MAX_WEARABLES; i++)
|
||||
{
|
||||
defaultWearables[i] = new AvatarWearable();
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ namespace OpenSim.Framework
|
|||
{
|
||||
UUID AgentID { get; set; }
|
||||
|
||||
OSDMap Pack();
|
||||
OSDMap Pack(Object parms = null);
|
||||
void Unpack(OSDMap map, IScene scene);
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ namespace OpenSim.Framework
|
|||
|
||||
public Dictionary<ulong, string> ChildrenCapSeeds = null;
|
||||
|
||||
public OSDMap Pack()
|
||||
public OSDMap Pack(Object parms = null)
|
||||
{
|
||||
OSDMap args = new OSDMap();
|
||||
args["message_type"] = OSD.FromString("AgentPosition");
|
||||
|
@ -391,8 +391,18 @@ namespace OpenSim.Framework
|
|||
|
||||
public Dictionary<string, UUID> MovementAnimationOverRides = new Dictionary<string, UUID>();
|
||||
|
||||
public virtual OSDMap Pack()
|
||||
public virtual OSDMap Pack(Object parms = null)
|
||||
{
|
||||
int wearablesCount = -1;
|
||||
|
||||
if (parms != null)
|
||||
{
|
||||
Hashtable p = (Hashtable)parms;
|
||||
|
||||
if (p.ContainsKey("wearablesCount"))
|
||||
wearablesCount = (int)p["wearablesCount"];
|
||||
}
|
||||
|
||||
// m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data");
|
||||
|
||||
OSDMap args = new OSDMap();
|
||||
|
@ -493,7 +503,7 @@ namespace OpenSim.Framework
|
|||
}
|
||||
|
||||
if (Appearance != null)
|
||||
args["packed_appearance"] = Appearance.Pack();
|
||||
args["packed_appearance"] = Appearance.Pack(wearablesCount);
|
||||
|
||||
//if ((AgentTextures != null) && (AgentTextures.Length > 0))
|
||||
//{
|
||||
|
@ -800,11 +810,7 @@ namespace OpenSim.Framework
|
|||
{
|
||||
OSDArray wears = (OSDArray)(args["wearables"]);
|
||||
|
||||
int count = wears.Count;
|
||||
if (count > AvatarWearable.MAX_WEARABLES)
|
||||
count = AvatarWearable.MAX_WEARABLES;
|
||||
|
||||
for (int i = 0; i < count / 2; i++)
|
||||
for (int i = 0; i < wears.Count / 2; i++)
|
||||
{
|
||||
AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]);
|
||||
Appearance.SetWearable(i, awear);
|
||||
|
@ -897,9 +903,9 @@ namespace OpenSim.Framework
|
|||
|
||||
public class CompleteAgentData : AgentData
|
||||
{
|
||||
public override OSDMap Pack()
|
||||
public override OSDMap Pack(object parms = null)
|
||||
{
|
||||
return base.Pack();
|
||||
return base.Pack(parms);
|
||||
}
|
||||
|
||||
public override void Unpack(OSDMap map, IScene scene)
|
||||
|
|
|
@ -312,7 +312,7 @@ namespace OpenSim.Framework.Tests
|
|||
Agent1Data.startpos = StartPos;
|
||||
|
||||
OSDMap map2;
|
||||
OSDMap map = Agent1Data.PackAgentCircuitData();
|
||||
OSDMap map = Agent1Data.PackAgentCircuitData(-1);
|
||||
try
|
||||
{
|
||||
string str = OSDParser.SerializeJsonString(map);
|
||||
|
|
|
@ -12233,10 +12233,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
cachedresp.WearableData =
|
||||
new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length];
|
||||
|
||||
int maxWearablesLoop = cachedtex.WearableData.Length;
|
||||
if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES)
|
||||
maxWearablesLoop = AvatarWearable.MAX_WEARABLES;
|
||||
|
||||
int cacheHits = 0;
|
||||
|
||||
// We need to make sure the asset stored in the bake is available on this server also by it's assetid before we map it to a Cacheid
|
||||
|
@ -12250,6 +12246,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
cacheItems = p.Appearance.WearableCacheItems;
|
||||
}
|
||||
|
||||
int maxWearablesLoop = cachedtex.WearableData.Length;
|
||||
if (maxWearablesLoop > cacheItems.Length)
|
||||
maxWearablesLoop = cacheItems.Length;
|
||||
|
||||
if (cacheItems != null)
|
||||
{
|
||||
for (int i = 0; i < maxWearablesLoop; i++)
|
||||
|
|
|
@ -853,7 +853,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
|
||||
if (invService.GetRootFolder(userID) != null)
|
||||
{
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
for (int i = 0; i < appearance.Wearables.Length; i++)
|
||||
{
|
||||
for (int j = 0; j < appearance.Wearables[i].Count; j++)
|
||||
{
|
||||
|
@ -1258,8 +1258,17 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
|
||||
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
|
||||
{
|
||||
if (wear.Type < AvatarWearable.MAX_WEARABLES)
|
||||
avatAppearance.Wearables[wear.Type].Add(wear.ItemID, UUID.Zero);
|
||||
// If the wearable type is larger than the current array, expand it
|
||||
if (avatAppearance.Wearables.Length <= wear.Type)
|
||||
{
|
||||
int currentLength = avatAppearance.Wearables.Length;
|
||||
AvatarWearable[] wears = avatAppearance.Wearables;
|
||||
Array.Resize(ref wears, wear.Type + 1);
|
||||
for (int i = currentLength ; i <= wear.Type ; i++)
|
||||
wears[i] = new AvatarWearable();
|
||||
avatAppearance.Wearables = wears;
|
||||
}
|
||||
avatAppearance.Wearables[wear.Type].Add(wear.ItemID, UUID.Zero);
|
||||
}
|
||||
|
||||
avatAppearance.GetAssetsFrom(sp.Appearance);
|
||||
|
|
|
@ -849,7 +849,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// Let's create an agent there if one doesn't exist yet.
|
||||
// NOTE: logout will always be false for a non-HG teleport.
|
||||
bool logout = false;
|
||||
if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout))
|
||||
if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, ctx, out reason, out logout))
|
||||
{
|
||||
m_interRegionTeleportFailures.Value++;
|
||||
|
||||
|
@ -948,7 +948,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// destination region but the viewer cannot establish the connection (e.g. due to network issues between
|
||||
// the viewer and the destination). In this case, UpdateAgent timesout after 10 seconds, although then
|
||||
// there's a further 10 second wait whilst we attempt to tell the destination to delete the agent in Fail().
|
||||
if (!UpdateAgent(reg, finalDestination, agent, sp))
|
||||
if (!UpdateAgent(reg, finalDestination, agent, sp, ctx))
|
||||
{
|
||||
if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting)
|
||||
{
|
||||
|
@ -1084,7 +1084,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// Let's create an agent there if one doesn't exist yet.
|
||||
// NOTE: logout will always be false for a non-HG teleport.
|
||||
bool logout = false;
|
||||
if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout))
|
||||
if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, ctx, out reason, out logout))
|
||||
{
|
||||
m_interRegionTeleportFailures.Value++;
|
||||
|
||||
|
@ -1158,7 +1158,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// Send the Update. If this returns true, we know the client has contacted the destination
|
||||
// via CompleteMovementIntoRegion, so we can let go.
|
||||
// If it returns false, something went wrong, and we need to abort.
|
||||
if (!UpdateAgent(reg, finalDestination, agent, sp))
|
||||
if (!UpdateAgent(reg, finalDestination, agent, sp, ctx))
|
||||
{
|
||||
if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting)
|
||||
{
|
||||
|
@ -1280,13 +1280,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
sp.Scene.EventManager.TriggerTeleportFail(sp.ControllingClient, logout);
|
||||
}
|
||||
|
||||
protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout)
|
||||
protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, EntityTransferContext ctx, out string reason, out bool logout)
|
||||
{
|
||||
GridRegion source = new GridRegion(Scene.RegionInfo);
|
||||
source.RawServerURI = m_GatekeeperURI;
|
||||
|
||||
logout = false;
|
||||
bool success = Scene.SimulationService.CreateAgent(source, finalDestination, agentCircuit, teleportFlags, out reason);
|
||||
bool success = Scene.SimulationService.CreateAgent(source, finalDestination, agentCircuit, teleportFlags, ctx, out reason);
|
||||
|
||||
if (success)
|
||||
sp.Scene.EventManager.TriggerTeleportStart(sp.ControllingClient, reg, finalDestination, teleportFlags, logout);
|
||||
|
@ -1294,9 +1294,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
return success;
|
||||
}
|
||||
|
||||
protected virtual bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent, ScenePresence sp)
|
||||
protected virtual bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent, ScenePresence sp, EntityTransferContext ctx)
|
||||
{
|
||||
return Scene.SimulationService.UpdateAgent(finalDestination, agent);
|
||||
return Scene.SimulationService.UpdateAgent(finalDestination, agent, ctx);
|
||||
}
|
||||
|
||||
protected virtual void SetCallbackURL(AgentData agent, RegionInfo region)
|
||||
|
@ -1679,7 +1679,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
||||
}
|
||||
|
||||
if (!CrossAgentIntoNewRegionMain(agent, pos, neighbourRegion, isFlying))
|
||||
if (!CrossAgentIntoNewRegionMain(agent, pos, neighbourRegion, isFlying, ctx))
|
||||
{
|
||||
m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: cross main failed. Resetting transfer state", LogHeader);
|
||||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
||||
|
@ -1695,7 +1695,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
return agent;
|
||||
}
|
||||
|
||||
public bool CrossAgentIntoNewRegionMain(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying)
|
||||
public bool CrossAgentIntoNewRegionMain(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying, EntityTransferContext ctx)
|
||||
{
|
||||
int ts = Util.EnvironmentTickCount();
|
||||
try
|
||||
|
@ -1718,7 +1718,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// Beyond this point, extra cleanup is needed beyond removing transit state
|
||||
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.Transferring);
|
||||
|
||||
if (!agent.Scene.SimulationService.UpdateAgent(neighbourRegion, cAgent))
|
||||
if (!agent.Scene.SimulationService.UpdateAgent(neighbourRegion, cAgent, ctx))
|
||||
{
|
||||
// region doesn't take it
|
||||
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.CleaningUp);
|
||||
|
@ -2360,7 +2360,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
string reason = String.Empty;
|
||||
|
||||
bool regionAccepted = scene.SimulationService.CreateAgent(reg, reg, a, (uint)TeleportFlags.Default, out reason);
|
||||
EntityTransferContext ctx = new EntityTransferContext();
|
||||
bool regionAccepted = scene.SimulationService.CreateAgent(reg, reg, a, (uint)TeleportFlags.Default, ctx, out reason);
|
||||
|
||||
if (regionAccepted)
|
||||
{
|
||||
|
|
|
@ -263,7 +263,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
}
|
||||
}
|
||||
|
||||
protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout)
|
||||
protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, EntityTransferContext ctx, out string reason, out bool logout)
|
||||
{
|
||||
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: CreateAgent {0} {1}", reg.ServerURI, finalDestination.ServerURI);
|
||||
reason = string.Empty;
|
||||
|
@ -308,7 +308,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
}
|
||||
}
|
||||
|
||||
return base.CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout);
|
||||
return base.CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, ctx, out reason, out logout);
|
||||
}
|
||||
|
||||
public void TriggerTeleportHome(UUID id, IClientAPI client)
|
||||
|
@ -333,7 +333,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: RestrictAppearanceAbroad is ON. Checking generic appearance");
|
||||
|
||||
// Check wearables
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
for (int i = 0; i < sp.Appearance.Wearables.Length ; i++)
|
||||
{
|
||||
for (int j = 0; j < sp.Appearance.Wearables[i].Count; j++)
|
||||
{
|
||||
|
@ -342,7 +342,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
bool found = false;
|
||||
foreach (AvatarAppearance a in ExportedAppearance)
|
||||
if (a.Wearables[i] != null)
|
||||
if (i < a.Wearables.Length && a.Wearables[i] != null)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
|
@ -356,7 +356,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
|
||||
found = false;
|
||||
foreach (AvatarAppearance a in ExportedAppearance)
|
||||
if (sp.Appearance.Wearables[i][j].AssetID == a.Wearables[i][j].AssetID)
|
||||
if (i < a.Wearables.Length && sp.Appearance.Wearables[i][j].AssetID == a.Wearables[i][j].AssetID)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
|
|
|
@ -185,7 +185,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
|||
* Agent-related communications
|
||||
*/
|
||||
|
||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
|
||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, EntityTransferContext ctx, out string reason)
|
||||
{
|
||||
if (destination == null)
|
||||
{
|
||||
|
@ -204,7 +204,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
|||
return false;
|
||||
}
|
||||
|
||||
public bool UpdateAgent(GridRegion destination, AgentData cAgentData)
|
||||
public bool UpdateAgent(GridRegion destination, AgentData cAgentData, EntityTransferContext ctx)
|
||||
{
|
||||
if (destination == null)
|
||||
return false;
|
||||
|
|
|
@ -160,7 +160,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
|||
* Agent-related communications
|
||||
*/
|
||||
|
||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
|
||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, EntityTransferContext ctx, out string reason)
|
||||
{
|
||||
if (destination == null)
|
||||
{
|
||||
|
@ -170,27 +170,27 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
|||
}
|
||||
|
||||
// Try local first
|
||||
if (m_localBackend.CreateAgent(source, destination, aCircuit, teleportFlags, out reason))
|
||||
if (m_localBackend.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out reason))
|
||||
return true;
|
||||
|
||||
// else do the remote thing
|
||||
if (!m_localBackend.IsLocalRegion(destination.RegionID))
|
||||
{
|
||||
return m_remoteConnector.CreateAgent(source, destination, aCircuit, teleportFlags, out reason);
|
||||
return m_remoteConnector.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out reason);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool UpdateAgent(GridRegion destination, AgentData cAgentData)
|
||||
public bool UpdateAgent(GridRegion destination, AgentData cAgentData, EntityTransferContext ctx)
|
||||
{
|
||||
if (destination == null)
|
||||
return false;
|
||||
|
||||
// Try local first
|
||||
if (m_localBackend.IsLocalRegion(destination.RegionID))
|
||||
return m_localBackend.UpdateAgent(destination, cAgentData);
|
||||
return m_localBackend.UpdateAgent(destination, cAgentData, ctx);
|
||||
|
||||
return m_remoteConnector.UpdateAgent(destination, cAgentData);
|
||||
return m_remoteConnector.UpdateAgent(destination, cAgentData, ctx);
|
||||
}
|
||||
|
||||
public bool UpdateAgent(GridRegion destination, AgentPosition cAgentData)
|
||||
|
|
|
@ -44,6 +44,7 @@ using OpenSim.Region.CoreModules.World.Serialiser;
|
|||
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
|
||||
using OpenSim.Tests.Common;
|
||||
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
|
||||
using OpenSim.Services.Interfaces;
|
||||
|
||||
namespace OpenSim.Region.Framework.Scenes.Tests
|
||||
{
|
||||
|
@ -226,7 +227,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
|||
// *** This is the first stage, when a neighbouring region is told that a viewer is about to try and
|
||||
// establish a child scene presence. We pass in the circuit code that the client has to connect with ***
|
||||
// XXX: ViaLogin may not be correct here.
|
||||
scene.SimulationService.CreateAgent(null, region, acd, (uint)TeleportFlags.ViaLogin, out reason);
|
||||
EntityTransferContext ctx = new EntityTransferContext();
|
||||
scene.SimulationService.CreateAgent(null, region, acd, (uint)TeleportFlags.ViaLogin, ctx, out reason);
|
||||
|
||||
Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(agentId), Is.Not.Null);
|
||||
Assert.That(scene.AuthenticateHandler.GetAgentCircuits().Count, Is.EqualTo(1));
|
||||
|
@ -287,4 +289,4 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
|||
// Assert.That(childPresence.IsChildAgent, Is.True);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3114,7 +3114,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (appearanceModule != null)
|
||||
{
|
||||
appearanceModule.SaveBakedTextures(sp.UUID);
|
||||
OSDMap appearancePacked = sp.Appearance.Pack();
|
||||
OSDMap appearancePacked = sp.Appearance.Pack(-1);
|
||||
|
||||
TaskInventoryItem item
|
||||
= SaveNotecard(notecard, "Avatar Appearance", Util.GetFormattedXml(appearancePacked as OSD), true);
|
||||
|
|
|
@ -461,6 +461,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
|||
// This is the meaning of POST agent
|
||||
//m_regionClient.AdjustUserInformation(aCircuit);
|
||||
//bool result = m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason);
|
||||
|
||||
bool result = CreateAgent(source, gatekeeper, destination, aCircuit, data.flags, data.fromLogin, out reason);
|
||||
|
||||
resp["reason"] = OSD.FromString(reason);
|
||||
|
@ -539,12 +540,15 @@ namespace OpenSim.Server.Handlers.Simulation
|
|||
AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, out string reason)
|
||||
{
|
||||
reason = String.Empty;
|
||||
// The data and protocols are already defined so this is just a dummy to satisfy the interface
|
||||
// TODO: make this end-to-end
|
||||
EntityTransferContext ctx = new EntityTransferContext();
|
||||
if ((teleportFlags & (uint)TeleportFlags.ViaLogin) == 0)
|
||||
{
|
||||
Util.FireAndForget(x =>
|
||||
{
|
||||
string r;
|
||||
m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, out r);
|
||||
m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out r);
|
||||
m_log.DebugFormat("[AGENT HANDLER]: ASYNC CreateAgent {0}", r);
|
||||
});
|
||||
|
||||
|
@ -553,7 +557,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
|||
else
|
||||
{
|
||||
|
||||
bool ret = m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, out reason);
|
||||
bool ret = m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out reason);
|
||||
m_log.DebugFormat("[AGENT HANDLER]: SYNC CreateAgent {0} {1}", ret.ToString(), reason);
|
||||
return ret;
|
||||
}
|
||||
|
@ -739,7 +743,10 @@ namespace OpenSim.Server.Handlers.Simulation
|
|||
// subclasses can override this
|
||||
protected virtual bool UpdateAgent(GridRegion destination, AgentData agent)
|
||||
{
|
||||
return m_SimulationService.UpdateAgent(destination, agent);
|
||||
// The data and protocols are already defined so this is just a dummy to satisfy the interface
|
||||
// TODO: make this end-to-end
|
||||
EntityTransferContext ctx = new EntityTransferContext();
|
||||
return m_SimulationService.UpdateAgent(destination, agent, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -138,7 +138,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
|||
Console.WriteLine(" >>> LoginAgentToGrid <<< " + home.ServerURI);
|
||||
|
||||
uint flags = fromLogin ? (uint)TeleportFlags.ViaLogin : (uint)TeleportFlags.ViaHome;
|
||||
return CreateAgent(source, home, aCircuit, flags, out reason);
|
||||
EntityTransferContext ctx = new EntityTransferContext();
|
||||
return CreateAgent(source, home, aCircuit, flags, ctx, out reason);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -152,7 +152,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
// <param name=""></param>
|
||||
public bool SetAppearance(UUID userID, AvatarAppearance appearance)
|
||||
{
|
||||
OSDMap map = appearance.Pack();
|
||||
OSDMap map = appearance.Pack(-1);
|
||||
if (map == null)
|
||||
{
|
||||
m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to encode appearance for {0}",userID);
|
||||
|
|
|
@ -98,13 +98,13 @@ namespace OpenSim.Services.Connectors.Simulation
|
|||
args["teleport_flags"] = OSD.FromString(flags.ToString());
|
||||
}
|
||||
|
||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason)
|
||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string reason)
|
||||
{
|
||||
string tmp = String.Empty;
|
||||
return CreateAgent(source, destination, aCircuit, flags, out tmp, out reason);
|
||||
return CreateAgent(source, destination, aCircuit, flags, ctx, out tmp, out reason);
|
||||
}
|
||||
|
||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string myipaddress, out string reason)
|
||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string myipaddress, out string reason)
|
||||
{
|
||||
m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Creating agent at {0}", destination.ServerURI);
|
||||
reason = String.Empty;
|
||||
|
@ -121,7 +121,7 @@ namespace OpenSim.Services.Connectors.Simulation
|
|||
|
||||
try
|
||||
{
|
||||
OSDMap args = aCircuit.PackAgentCircuitData();
|
||||
OSDMap args = aCircuit.PackAgentCircuitData(-1);
|
||||
PackData(args, source, aCircuit, destination, flags);
|
||||
|
||||
OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000);
|
||||
|
@ -172,9 +172,9 @@ namespace OpenSim.Services.Connectors.Simulation
|
|||
/// <summary>
|
||||
/// Send complete data about an agent in this region to a neighbor
|
||||
/// </summary>
|
||||
public bool UpdateAgent(GridRegion destination, AgentData data)
|
||||
public bool UpdateAgent(GridRegion destination, AgentData data, EntityTransferContext ctx)
|
||||
{
|
||||
return UpdateAgent(destination, (IAgentData)data, 200000); // yes, 200 seconds
|
||||
return UpdateAgent(destination, (IAgentData)data, ctx, 200000); // yes, 200 seconds
|
||||
}
|
||||
|
||||
private ExpiringCache<string, bool> _failedSims = new ExpiringCache<string, bool>();
|
||||
|
@ -235,7 +235,8 @@ namespace OpenSim.Services.Connectors.Simulation
|
|||
}
|
||||
}
|
||||
|
||||
success = UpdateAgent(destination, (IAgentData)pos, 10000);
|
||||
EntityTransferContext ctx = new EntityTransferContext(); // Dummy, not needed for position
|
||||
success = UpdateAgent(destination, (IAgentData)pos, ctx, 10000);
|
||||
}
|
||||
// we get here iff success == false
|
||||
// blacklist sim for 2 minutes
|
||||
|
@ -250,7 +251,7 @@ namespace OpenSim.Services.Connectors.Simulation
|
|||
/// <summary>
|
||||
/// This is the worker function to send AgentData to a neighbor region
|
||||
/// </summary>
|
||||
private bool UpdateAgent(GridRegion destination, IAgentData cAgentData, int timeout)
|
||||
private bool UpdateAgent(GridRegion destination, IAgentData cAgentData, EntityTransferContext ctx, int timeout)
|
||||
{
|
||||
// m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: UpdateAgent in {0}", destination.ServerURI);
|
||||
|
||||
|
|
|
@ -459,7 +459,7 @@ namespace OpenSim.Services.HypergridService
|
|||
true, aCircuit.startpos, new List<UUID>(), ctx, out reason))
|
||||
return false;
|
||||
|
||||
return m_SimulationService.CreateAgent(source, destination, aCircuit, (uint)loginFlag, out reason);
|
||||
return m_SimulationService.CreateAgent(source, destination, aCircuit, (uint)loginFlag, ctx, out reason);
|
||||
}
|
||||
|
||||
protected bool Authenticate(AgentCircuitData aCircuit)
|
||||
|
|
|
@ -281,7 +281,9 @@ namespace OpenSim.Services.HypergridService
|
|||
}
|
||||
else
|
||||
{
|
||||
success = m_GatekeeperConnector.CreateAgent(source, region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out myExternalIP, out reason);
|
||||
//TODO: Should there not be a call to QueryAccess here?
|
||||
EntityTransferContext ctx = new EntityTransferContext();
|
||||
success = m_GatekeeperConnector.CreateAgent(source, region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, ctx, out myExternalIP, out reason);
|
||||
}
|
||||
|
||||
if (!success)
|
||||
|
|
|
@ -150,7 +150,8 @@ namespace OpenSim.Services.Interfaces
|
|||
// Wearables
|
||||
Data["AvatarHeight"] = appearance.AvatarHeight.ToString();
|
||||
|
||||
for (int i = 0 ; i < AvatarWearable.MAX_WEARABLES ; i++)
|
||||
// TODO: With COF, is this even needed?
|
||||
for (int i = 0 ; i < AvatarWearable.LEGACY_VERSION_MAX_WEARABLES ; i++)
|
||||
{
|
||||
for (int j = 0 ; j < appearance.Wearables[i].Count ; j++)
|
||||
{
|
||||
|
|
|
@ -74,7 +74,7 @@ namespace OpenSim.Services.Interfaces
|
|||
/// <param name="aCircuit"></param>
|
||||
/// <param name="flags"></param>
|
||||
/// <param name="reason">Reason message in the event of a failure.</param>
|
||||
bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason);
|
||||
bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string reason);
|
||||
|
||||
/// <summary>
|
||||
/// Full child agent update.
|
||||
|
@ -82,7 +82,7 @@ namespace OpenSim.Services.Interfaces
|
|||
/// <param name="regionHandle"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
bool UpdateAgent(GridRegion destination, AgentData data);
|
||||
bool UpdateAgent(GridRegion destination, AgentData data, EntityTransferContext ctx);
|
||||
|
||||
/// <summary>
|
||||
/// Short child agent update, mostly for position.
|
||||
|
|
|
@ -999,7 +999,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
region, aCircuit.AgentID, null, true, aCircuit.startpos, new List<UUID>(), ctx, out reason))
|
||||
return false;
|
||||
|
||||
return simConnector.CreateAgent(null, region, aCircuit, (uint)flags, out reason);
|
||||
return simConnector.CreateAgent(null, region, aCircuit, (uint)flags, ctx, out reason);
|
||||
}
|
||||
|
||||
private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, IPEndPoint clientIP, out string reason)
|
||||
|
|
Loading…
Reference in New Issue