* Hooked up the GridComm event ChildDataUpdate to the scene.
* Added List<RegionInfo> m_neighbours to Scene * Hooked up the OnRegionUp event to m_neighbours list * Modified RegionInfo to have a bool commFailTF value so that we can skip neighbors that fail. (when the region comes up, this gets reset to false and the region will try again. * Added SetChildAgentThrottle(byte[]) to IClientAPI * Several other insignificant changes related to passing child pertanant agent data from sim to sim.afrisby
parent
be5d8811be
commit
e595f82489
|
@ -480,7 +480,7 @@ namespace OpenSim.Framework
|
||||||
void SendCoarseLocationUpdate(List<LLVector3> CoarseLocations);
|
void SendCoarseLocationUpdate(List<LLVector3> CoarseLocations);
|
||||||
|
|
||||||
void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint);
|
void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint);
|
||||||
|
void SetChildAgentThrottle(byte[] throttle);
|
||||||
void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape,
|
void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape,
|
||||||
LLVector3 pos, uint flags, LLUUID objectID, LLUUID ownerID, string text, byte[] color,
|
LLVector3 pos, uint flags, LLUUID objectID, LLUUID ownerID, string text, byte[] color,
|
||||||
uint parentID, byte[] particleSystem, LLQuaternion rotation, byte clickAction);
|
uint parentID, byte[] particleSystem, LLQuaternion rotation, byte clickAction);
|
||||||
|
|
|
@ -186,6 +186,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public string DataStore = "";
|
public string DataStore = "";
|
||||||
public bool isSandbox = false;
|
public bool isSandbox = false;
|
||||||
|
public bool commFailTF = false;
|
||||||
|
|
||||||
public LLUUID MasterAvatarAssignedUUID = LLUUID.Zero;
|
public LLUUID MasterAvatarAssignedUUID = LLUUID.Zero;
|
||||||
public string MasterAvatarFirstName = "";
|
public string MasterAvatarFirstName = "";
|
||||||
|
|
|
@ -2015,7 +2015,10 @@ namespace OpenSim.Region.ClientStack
|
||||||
this.OutPacket(mbReply, ThrottleOutPacketType.Land);
|
this.OutPacket(mbReply, ThrottleOutPacketType.Land);
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
public void SetChildAgentThrottle(byte[] throttles)
|
||||||
|
{
|
||||||
|
PacketQueue.SetThrottleFromClient(throttles);
|
||||||
|
}
|
||||||
// Previously ClientView.PacketQueue
|
// Previously ClientView.PacketQueue
|
||||||
protected PacketQueue PacketQueue;
|
protected PacketQueue PacketQueue;
|
||||||
|
|
||||||
|
|
|
@ -710,9 +710,10 @@ namespace OpenSim.Region.Communications.OGS1
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region using tcp://" + regInfo.RemotingAddress +
|
// This line errors with a Null Reference Exception.. Why? @.@
|
||||||
":" + regInfo.RemotingPort +
|
//MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region using tcp://" + regInfo.RemotingAddress +
|
||||||
"/InterRegions - @ " + regInfo.RegionLocX + "," + regInfo.RegionLocY + " - This is likely caused by an incompatibility in the protocol between this sim and that one");
|
// ":" + regInfo.RemotingPort +
|
||||||
|
//"/InterRegions - @ " + regInfo.RegionLocX + "," + regInfo.RegionLocY + " - This is likely caused by an incompatibility in the protocol between this sim and that one");
|
||||||
MainLog.Instance.Debug(e.ToString());
|
MainLog.Instance.Debug(e.ToString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
protected Timer m_restartWaitTimer = new Timer();
|
protected Timer m_restartWaitTimer = new Timer();
|
||||||
|
|
||||||
protected List<RegionInfo> m_regionRestartNotifyList = new List<RegionInfo>();
|
protected List<RegionInfo> m_regionRestartNotifyList = new List<RegionInfo>();
|
||||||
|
protected List<RegionInfo> m_neighbours = new List<RegionInfo>();
|
||||||
|
|
||||||
public InnerScene m_innerScene;
|
public InnerScene m_innerScene;
|
||||||
|
|
||||||
|
@ -266,13 +267,37 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public override bool OtherRegionUp(RegionInfo otherRegion)
|
public override bool OtherRegionUp(RegionInfo otherRegion)
|
||||||
{
|
{
|
||||||
// Another region is up. We have to tell all our ScenePresences about it
|
// Another region is up.
|
||||||
|
// We have to tell all our ScenePresences about it..
|
||||||
|
//and add it to the neighbor list.
|
||||||
|
|
||||||
|
|
||||||
if (RegionInfo.RegionHandle != otherRegion.RegionHandle)
|
if (RegionInfo.RegionHandle != otherRegion.RegionHandle)
|
||||||
{
|
{
|
||||||
if ((Math.Abs(otherRegion.RegionLocX - RegionInfo.RegionLocX) <= 1) && (Math.Abs(otherRegion.RegionLocY - RegionInfo.RegionLocY) <= 1))
|
if ((Math.Abs(otherRegion.RegionLocX - RegionInfo.RegionLocX) <= 1) && (Math.Abs(otherRegion.RegionLocY - RegionInfo.RegionLocY) <= 1))
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < m_neighbours.Count; i++)
|
||||||
|
{
|
||||||
|
// The purpose of this loop is to re-update the known neighbors
|
||||||
|
// when another region comes up on top of another one.
|
||||||
|
// The latest region in that location ends up in the
|
||||||
|
// 'known neighbors list'
|
||||||
|
// Additionally, the commFailTF property gets reset to false.
|
||||||
|
if (m_neighbours[i].RegionHandle == otherRegion.RegionHandle)
|
||||||
|
{
|
||||||
|
m_neighbours[i] = otherRegion;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the value isn't in the neighbours, add it.
|
||||||
|
// If the RegionInfo isn't exact but is for the same XY World location,
|
||||||
|
// then the above loop will fix that.
|
||||||
|
|
||||||
|
if (!(m_neighbours.Contains(otherRegion)))
|
||||||
|
{
|
||||||
|
m_neighbours.Add(otherRegion);
|
||||||
|
}
|
||||||
|
|
||||||
if (!(m_regionRestartNotifyList.Contains(otherRegion)))
|
if (!(m_regionRestartNotifyList.Contains(otherRegion)))
|
||||||
{
|
{
|
||||||
m_regionRestartNotifyList.Add(otherRegion);
|
m_regionRestartNotifyList.Add(otherRegion);
|
||||||
|
@ -1112,6 +1137,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_sceneGridService.OnAvatarCrossingIntoRegion += AgentCrossing;
|
m_sceneGridService.OnAvatarCrossingIntoRegion += AgentCrossing;
|
||||||
m_sceneGridService.OnCloseAgentConnection += CloseConnection;
|
m_sceneGridService.OnCloseAgentConnection += CloseConnection;
|
||||||
m_sceneGridService.OnRegionUp += OtherRegionUp;
|
m_sceneGridService.OnRegionUp += OtherRegionUp;
|
||||||
|
m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate;
|
||||||
|
|
||||||
m_sceneGridService.KillObject = SendKillObject;
|
m_sceneGridService.KillObject = SendKillObject;
|
||||||
}
|
}
|
||||||
|
@ -1121,6 +1147,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void UnRegisterReginWithComms()
|
public void UnRegisterReginWithComms()
|
||||||
{
|
{
|
||||||
|
m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate;
|
||||||
m_sceneGridService.OnRegionUp -= OtherRegionUp;
|
m_sceneGridService.OnRegionUp -= OtherRegionUp;
|
||||||
m_sceneGridService.OnExpectUser -= NewUserConnection;
|
m_sceneGridService.OnExpectUser -= NewUserConnection;
|
||||||
m_sceneGridService.OnAvatarCrossingIntoRegion -= AgentCrossing;
|
m_sceneGridService.OnAvatarCrossingIntoRegion -= AgentCrossing;
|
||||||
|
@ -1182,6 +1209,24 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual bool IncomingChildAgentDataUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||||
|
{
|
||||||
|
ScenePresence childAgentUpdate = GetScenePresence(new LLUUID(cAgentData.AgentID));
|
||||||
|
if (!(childAgentUpdate.Equals(null)))
|
||||||
|
{
|
||||||
|
// I can't imagine *yet* why we would get an update if the agent is a root agent..
|
||||||
|
// however to avoid a race condition crossing borders..
|
||||||
|
if (childAgentUpdate.IsChildAgent)
|
||||||
|
{
|
||||||
|
//Send Data to ScenePresence
|
||||||
|
childAgentUpdate.ChildAgentDataUpdate(cAgentData);
|
||||||
|
// Not Implemented:
|
||||||
|
//TODO: Do we need to pass the message on to one of our neighbors?
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -23,6 +23,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public event CloseAgentConnection OnCloseAgentConnection;
|
public event CloseAgentConnection OnCloseAgentConnection;
|
||||||
public event PrimCrossing OnPrimCrossingIntoRegion;
|
public event PrimCrossing OnPrimCrossingIntoRegion;
|
||||||
public event RegionUp OnRegionUp;
|
public event RegionUp OnRegionUp;
|
||||||
|
public event ChildAgentUpdate OnChildAgentUpdate;
|
||||||
|
|
||||||
public KillObjectDelegate KillObject;
|
public KillObjectDelegate KillObject;
|
||||||
public string _debugRegionName = "";
|
public string _debugRegionName = "";
|
||||||
|
@ -59,6 +60,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
regionCommsHost.OnPrimCrossingIntoRegion += PrimCrossing;
|
regionCommsHost.OnPrimCrossingIntoRegion += PrimCrossing;
|
||||||
regionCommsHost.OnCloseAgentConnection += CloseConnection;
|
regionCommsHost.OnCloseAgentConnection += CloseConnection;
|
||||||
regionCommsHost.OnRegionUp += newRegionUp;
|
regionCommsHost.OnRegionUp += newRegionUp;
|
||||||
|
regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -70,6 +73,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (regionCommsHost != null)
|
if (regionCommsHost != null)
|
||||||
{
|
{
|
||||||
|
regionCommsHost.OnChildAgentUpdate -= ChildAgentUpdate;
|
||||||
regionCommsHost.OnRegionUp -= newRegionUp;
|
regionCommsHost.OnRegionUp -= newRegionUp;
|
||||||
regionCommsHost.OnExpectUser -= NewUserConnection;
|
regionCommsHost.OnExpectUser -= NewUserConnection;
|
||||||
regionCommsHost.OnAvatarCrossingIntoRegion -= AgentCrossing;
|
regionCommsHost.OnAvatarCrossingIntoRegion -= AgentCrossing;
|
||||||
|
@ -105,6 +109,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
protected bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||||
|
{
|
||||||
|
if (OnChildAgentUpdate != null)
|
||||||
|
OnChildAgentUpdate(regionHandle, cAgentData);
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying)
|
protected void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying)
|
||||||
{
|
{
|
||||||
|
@ -262,6 +274,37 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
//bool val = m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region));
|
//bool val = m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region));
|
||||||
}
|
}
|
||||||
|
public delegate void SendChildAgentDataUpdateDelegate(ulong regionHandle, ChildAgentDataUpdate cAgentData);
|
||||||
|
|
||||||
|
private void SendChildAgentDataUpdateAsync(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||||
|
{
|
||||||
|
MainLog.Instance.Notice("INTERGRID", "Informing a neighbor about my agent.");
|
||||||
|
bool regionAccepted = m_commsProvider.InterRegion.ChildAgentUpdate(regionHandle,cAgentData);
|
||||||
|
|
||||||
|
if (regionAccepted)
|
||||||
|
{
|
||||||
|
MainLog.Instance.Notice("INTERGRID", "Completed sending a neighbor an update about my agent");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MainLog.Instance.Notice("INTERGRID", "Failed sending a neighbor an update about my agent");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void SendChildAgentDataUpdateCompleted(IAsyncResult iar)
|
||||||
|
{
|
||||||
|
SendChildAgentDataUpdateDelegate icon = (SendChildAgentDataUpdateDelegate)iar.AsyncState;
|
||||||
|
icon.EndInvoke(iar);
|
||||||
|
}
|
||||||
|
public void SendChildAgentDataUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||||
|
{
|
||||||
|
// This assumes that we know what our neighbors are.
|
||||||
|
SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync;
|
||||||
|
d.BeginInvoke(regionHandle, cAgentData,
|
||||||
|
SendChildAgentDataUpdateCompleted,
|
||||||
|
d);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
|
|
|
@ -53,6 +53,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
private uint m_requestedSitTargetID = 0;
|
private uint m_requestedSitTargetID = 0;
|
||||||
private LLVector3 m_requestedSitOffset = new LLVector3();
|
private LLVector3 m_requestedSitOffset = new LLVector3();
|
||||||
private float m_sitAvatarHeight = 2.0f;
|
private float m_sitAvatarHeight = 2.0f;
|
||||||
|
private float m_godlevel = 0;
|
||||||
|
|
||||||
private bool m_isTyping = false;
|
private bool m_isTyping = false;
|
||||||
private bool m_setAlwaysRun = false;
|
private bool m_setAlwaysRun = false;
|
||||||
|
@ -1255,7 +1256,20 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
respondPacket.AgentData = adb;
|
respondPacket.AgentData = adb;
|
||||||
ControllingClient.OutPacket(respondPacket, ThrottleOutPacketType.Task);
|
ControllingClient.OutPacket(respondPacket, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
public void ChildAgentDataUpdate(ChildAgentDataUpdate cAgentData)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
m_DrawDistance = cAgentData.drawdistance;
|
||||||
|
m_pos = new LLVector3(cAgentData.Position.x, cAgentData.Position.y, cAgentData.Position.z);
|
||||||
|
m_CameraCenter = new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z);
|
||||||
|
m_godlevel = cAgentData.godlevel;
|
||||||
|
ControllingClient.SetChildAgentThrottle(cAgentData.throttles);
|
||||||
|
//cAgentData.AVHeight;
|
||||||
|
//cAgentData.regionHandle;
|
||||||
|
//m_velocity = cAgentData.Velocity;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -202,10 +202,13 @@ namespace SimpleApp
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void SendKillObject(ulong regionHandle, uint localID)
|
public virtual void SendKillObject(ulong regionHandle, uint localID)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
public virtual void SetChildAgentThrottle(byte[] throttle)
|
||||||
|
{
|
||||||
|
}
|
||||||
public virtual void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId)
|
public virtual void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue